Transformers documentation

Fun-ASR-Nano

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

该模型于 2025-09-15 在 HF papers 上发布,并于 2026-09-08 贡献至 Hugging Face Transformers。

Fun-ASR-Nano

概述

Fun-ASR-Nano 是由阿里巴巴达摩院 FunAudioLLM 团队开发的 800M 参数端到端语音识别模型。它在中文、英文和日文 ASR 基准测试中达到了最先进的性能,同时体积显著小于同类模型。

该模型在 Fun-ASR: An Industrial-Grade Speech Recognition System 中提出。

架构

Fun-ASR-Nano 由三个组件组成:

  1. 音频编码器(SenseVoiceEncoderSmall):一个 70 层的 SANM(带 FSMN 记忆的自注意力)编码器,将多头自注意力与前馈顺序记忆网络相结合,以实现高效的语音特征提取。

  2. Audio Adaptor:一个 2 层 Transformer,用于将编码器输出(512 维)投影到 LLM 维度(1024 维)。

  3. 语言模型(Qwen3-0.6B):一个 28 层的因果语言模型,以自回归方式生成转录文本。

主要功能

  • 中文、英文和日文,包含 7 种中文方言和 26 种地区口音
  • 用于领域特定词汇的热词定制
  • 原生标点输出(无需单独的标点模型)

用法

单次推理

from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor

model_id = "FunAudioLLM/Fun-ASR-Nano-2512-hf"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForSpeechSeq2Seq.from_pretrained(model_id, device_map="auto")

audio_url = "https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/resolve/main/example/en.mp3"
inputs = processor.apply_transcription_request(audio=audio_url).to(model.device)

generated_ids = model.generate(**inputs, max_new_tokens=200)
generated_ids = generated_ids[:, inputs.input_ids.shape[1]:]
print(processor.decode(generated_ids, skip_special_tokens=True)[0])

批量推理

from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor

model_id = "FunAudioLLM/Fun-ASR-Nano-2512-hf"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForSpeechSeq2Seq.from_pretrained(model_id, device_map="auto")

audio_urls = [
    "https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/resolve/main/example/zh.mp3",
    "https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/resolve/main/example/en.mp3",
]
languages = ["zh", "en"]
inputs = processor.apply_transcription_request(audio=audio_urls, language=languages).to(model.device)

generated_ids = model.generate(**inputs, max_new_tokens=200)
generated_ids = generated_ids[:, inputs.input_ids.shape[1]:]
print(processor.decode(generated_ids, skip_special_tokens=True))

自定义提示词和热词

通过 prompt 传递上下文信息,通过 keywords 传递热词;检查点的聊天模板会构建完整的转录指令。language 接受中文、英文和日文的完整名称或 ISO 代码。

from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor

model_id = "FunAudioLLM/Fun-ASR-Nano-2512-hf"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForSpeechSeq2Seq.from_pretrained(model_id, device_map="auto")

audio_url = "https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/resolve/main/example/en.mp3"
inputs = processor.apply_transcription_request(
    audio=audio_url,
    prompt="A tribal story involving a chieftain and a boy.",
    keywords=["tribal chieftain", "fifty pieces of gold"],
).to(model.device)

generated_ids = model.generate(**inputs, max_new_tokens=200)
generated_ids = generated_ids[:, inputs.input_ids.shape[1]:]
print(processor.decode(generated_ids, skip_special_tokens=True)[0])

训练

from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor

model_id = "FunAudioLLM/Fun-ASR-Nano-2512-hf"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForSpeechSeq2Seq.from_pretrained(model_id, device_map="auto")
model.train()

audio_url = "https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/resolve/main/example/en.mp3"
conversation = [
    {
        "role": "user",
        "content": [
            {"type": "audio", "path": audio_url},
        ],
    },
    {
        "role": "assistant",
        "content": [
            {
                "type": "text",
                "text": "The tribal chieftain called for the boy, and presented him with fifty pieces of gold.",
            }
        ],
    },
]
inputs = processor.apply_chat_template(
    conversation,
    tokenize=True,
    return_dict=True,
    processor_kwargs={"output_labels": True},
).to(model.device)

loss = model(**inputs).loss
loss.backward()

使用 torch.compile 进行推理

import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, CompileConfig

model_id = "FunAudioLLM/Fun-ASR-Nano-2512-hf"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForSpeechSeq2Seq.from_pretrained(model_id, device_map="auto")

audio_url = "https://huggingface.co/FunAudioLLM/Fun-ASR-Nano-2512/resolve/main/example/en.mp3"
inputs = processor.apply_transcription_request(audio=audio_url).to(model.device)

with torch.inference_mode():
    generated_ids = model.generate(
        **inputs,
        max_new_tokens=200,
        compile_config=CompileConfig(),
    )
generated_ids = generated_ids[:, inputs.input_ids.shape[1]:]
print(processor.decode(generated_ids, skip_special_tokens=True)[0])

FunAsrNanoConfig

class transformers.FunAsrNanoConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneadaptor_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneaudio_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Nonetext_config: dict | transformers.configuration_utils.PreTrainedConfig | None = Noneaudio_token_id: int = 151646initializer_range: float = 0.02tie_word_embeddings: bool = True )

参数

  • adaptor_config (dict 或 FunAsrNanoAdaptorConfig,可选) — 双向音频适配器的配置。
  • audio_config (Union[dict, ~configuration_utils.PreTrainedConfig], 可选) — 音频骨干网络的配置对象或字典。
  • text_config (Union[dict, ~configuration_utils.PreTrainedConfig],可选) — 文本骨干网络的配置对象或字典。
  • audio_token_id (int,可选,默认为 151646) — 用作输入音频占位符的音频 token 索引。
  • initializer_range (float,可选,默认为 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • tie_word_embeddings (bool,可选,默认为 True) — 是否根据模型的 tied_weights_keys 映射来绑定权重嵌入。

这是用于存储 FunAsrNanoModel 配置的类。它根据指定的参数实例化 Fun Asr Nano 模型,并定义模型架构。使用默认值实例化配置,将得到与 FunAudioLLM/Fun-ASR-Nano-2512-hf 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

FunAsrNanoEncoderConfig

类 transformers.FunAsrNanoEncoderConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonenum_mel_bins: int = 80hidden_size: int = 512num_attention_heads: int = 4intermediate_size: int = 2048num_hidden_layers: int = 70hidden_dropout: float = 0.1attention_dropout: float = 0.1layer_norm_eps: float = 1e-05hidden_act: str = 'relu'max_position_embeddings: int = 2049num_stacked_frames: int = 7num_timestamp_prediction_layers: int = 20fsmn_kernel_size: int = 11 )

参数

  • num_mel_bins (int,可选,默认为 80) — 每个输入帧使用的 mel 特征数量。应与 AutoFeatureExtractor 类中使用的值相对应。
  • hidden_size (int,可选,默认为 512) — 隐藏表示的维度。
  • num_attention_heads (int,可选,默认为 4) — Transformer 解码器中每个注意力层的注意力头数量。
  • intermediate_size (int,可选,默认为 2048) — MLP 表示的维度。
  • num_hidden_layers (int,可选,默认为 70) — 编码器层的总数,包括转录层和随后的时间戳预测层。
  • hidden_dropout (float, 可选,默认为 0.1) — 嵌入层、编码器和池化层中所有全连接层的 dropout 概率。
  • attention_dropout (float,可选,默认为 0.1) — 注意力概率的 dropout 比率。
  • layer_norm_eps (float,可选,默认为 1e-05) — 层归一化层所使用的 epsilon 值。
  • hidden_act (str,可选,默认为 relu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • max_position_embeddings (int,可选,默认为 2049) — 该模型可能使用的最大序列长度。
  • num_stacked_frames (int,可选,默认为 7) — 低帧率特征提取中堆叠的连续 mel 帧数量。
  • num_timestamp_prediction_layers (int,可选,默认为 20) — 专门用于时间戳预测的编码器层数(最后几层)。转录输出取自第 num_hidden_layers - num_timestamp_prediction_layers - 1 层之后。
  • fsmn_kernel_size (int, 可选,默认为 11) — 前馈顺序记忆网络(FSMN)卷积的核大小。

这是用于存储 FunAsrNanoModel 配置的类。它根据指定的参数实例化 Fun Asr Nano 模型,并定义模型架构。使用默认值实例化配置,将得到与 FunAudioLLM/Fun-ASR-Nano-2512-hf 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

FunAsrNanoAdaptorConfig

class transformers.FunAsrNanoAdaptorConfig

< >

( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 1024num_attention_heads: int = 8intermediate_size: int = 256num_hidden_layers: int = 2hidden_dropout: float = 0.0attention_dropout: float = 0.0layer_norm_eps: float = 1e-05hidden_act: str = 'relu'projector_hidden_act: str = 'relu'projector_hidden_size: int = 2048 )

参数

  • hidden_size (int,可选,默认为 1024) — 隐藏表示的维度。
  • num_attention_heads (int,可选,默认为 8) — Transformer 解码器中每个注意力层的注意力头数量。
  • intermediate_size (int,可选,默认为 256) — MLP 表示的维度。
  • num_hidden_layers (int,可选,默认为 2) — Transformer 解码器中的隐藏层数。
  • hidden_dropout (float,可选,默认为 0.0) — 嵌入层、编码器和池化层中所有全连接层的 dropout 概率。
  • attention_dropout (float,可选,默认为 0.0) — 注意力概率的 dropout 比率。
  • layer_norm_eps (float,可选,默认为 1e-05) — 层归一化层所使用的 epsilon 值。
  • hidden_act (str,可选,默认为 relu) — 解码器中的非线性激活函数(函数或字符串)。例如,"gelu"、 "relu"、"silu" 等。
  • projector_hidden_act (str,可选,默认为 relu) — 多模态投影器使用的激活函数。
  • projector_hidden_size (int,可选,默认为 2048) — 文本和视觉投影层的维度。

这是用于存储 FunAsrNanoModel 配置的类。它根据指定的参数实例化 Fun Asr Nano 模型,并定义模型架构。使用默认值实例化配置,将得到与 FunAudioLLM/Fun-ASR-Nano-2512-hf 类似的配置。

配置对象继承自 PreTrainedConfig,可用于控制模型输出。有关更多信息,请参阅 PreTrainedConfig 的文档。

FunAsrNanoFeatureExtractor

class transformers.FunAsrNanoFeatureExtractor

< >

( feature_size: int = 80sampling_rate: int = 16000frame_length: int = 25frame_shift: int = 10num_frames_lfr: int = 7stride_lfr: int = 6window: str = 'hamming'padding_value: float = 0.0return_attention_mask: bool = True**kwargs )

参数

  • feature_size (int,可选,默认为 80) — 梅尔频率分箱的数量。
  • sampling_rate (int,可选,默认为 16000) — 音频的采样率。
  • frame_length (int,可选,默认为 25) — STFT 的帧长(以毫秒为单位)。
  • frame_shift (int,可选,默认为 10) — STFT 的帧移(跳长),单位为毫秒。
  • num_frames_lfr (int,可选,默认为 7) — 要堆叠的连续帧数(LFR 堆叠因子)。
  • stride_lfr (int,可选,默认为 6) — LFR 的降采样步长(每隔 stride_lfr 个堆叠帧取一个)。
  • window (str,可选,默认为 "hamming") — 用于 STFT 的窗函数。
  • padding_value (float,可选,默认为 0.0) — 用于填充较短序列的值。
  • return_attention_mask (bool,可选,默认为 True) — 是否返回注意力掩码。

构建 Fun-ASR-Nano 特征提取器。

该特征提取器继承自 SequenceFeatureExtractor,其中包含了大部分主要方法。用户应参考该父类以获取有关这些方法的更多信息。

它提取与 Kaldi 兼容的 mel 滤波器组特征(通过 torchaudio.compliance.kaldi.fbank,与原始 FunASR 前端保持一致),然后应用低帧率(LFR)处理,即堆叠 num_frames_lfr 个连续帧,并以步长 stride_lfr 进行下采样。

示例:

>>> import numpy as np
>>> from transformers import FunAsrNanoFeatureExtractor

>>> feature_extractor = FunAsrNanoFeatureExtractor()
>>> audio = np.random.randn(16000)  # 1 second of audio at 16kHz
>>> features = feature_extractor(audio, sampling_rate=16000, return_tensors="pt")
>>> features.input_features.shape  # (1, num_frames_after_lfr, 560)

__call__

< >

( raw_speech: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]sampling_rate: int | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = 'pt'padding: bool | str = Truemax_length: int | None = Nonetruncation: bool = Falsepad_to_multiple_of: int | None = Nonereturn_attention_mask: bool | None = None**kwargs )

参数

  • raw_speech (np.ndarray、list[float]、list[np.ndarray]、list[list[float]]) — 要提取特征的单个单声道波形序列或批量单声道波形。
  • sampling_rate (int, 可选) — 输入音频的采样率。必须与 self.sampling_rate(16000 Hz)一致。
  • return_tensors (str 或 TensorType,可选) — 如果设置,则返回指定框架的张量("pt"、"np" 等)。
  • padding(bool 或 str,可选,默认为 True)— 传递给 pad() 的填充策略。
  • max_length (int, 可选) — 用于填充/截断的最大 LFR 序列长度。
  • truncation (bool,可选,默认为 False) — 是否截断长度超过 max_length 的序列。
  • pad_to_multiple_of (int, 可选) — 如果设置,则将 LFR 序列长度填充为该值的整数倍。
  • return_attention_mask (bool,可选) — 是否返回 input_features_mask。默认为 self.return_attention_mask。

从一个或多个原始音频波形中提取 Kaldi mel 滤波器组 + LFR 特征。

FunAsrNanoProcessor

class transformers.FunAsrNanoProcessor

< >

( feature_extractortokenizerchat_template = Noneaudio_token = '<|object_ref_start|>' )

参数

  • feature_extractor(FunAsrNanoFeatureExtractor)— 特征提取器是必需的输入。
  • tokenizer (Qwen2Tokenizer) — 分词器是必需的输入。
  • chat_template (str) — 一个 Jinja 模板,用于将聊天中的消息列表转换为可分词的字符串。
  • audio_token (str,可选,默认为 "<|object_ref_start|>") — 在文本中用作音频占位符的 token。

构造一个 FunAsrNanoProcessor,它将特征提取器和分词器封装为单个处理器。

FunAsrNanoProcessor 提供了 FunAsrNanoFeatureExtractor 和 Qwen2Tokenizer 的所有功能。有关更多信息,请参阅 ~FunAsrNanoFeatureExtractor 和 ~Qwen2Tokenizer。

__call__

< >

( text: str | list[str]audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor'], NoneType] = Noneoutput_labels: bool | None = False**kwargs: *<class 'transformers.processing_utils.ProcessingKwargs'> ) → BatchFeature

参数

  • text (Union[str, list[str]]) — 要编码的序列或序列批次。每个序列可以是字符串或字符串列表(预分词字符串)。如果传入预分词输入,请设置 is_split_into_words=True 以避免与批量输入产生歧义。
  • audio (Union[numpy.ndarray, torch.Tensor, collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence[torch.Tensor]], 可选) — 要准备处理的音频或音频批次。每个音频可以是 NumPy 数组或 PyTorch 张量。 如果为 NumPy 数组/PyTorch 张量,每个音频的形状应为 (C, T),其中 C 为通道数,T 为音频的采样长度。
  • output_labels (bool,可选,默认值=False) — 是否返回用于训练的标签。
  • return_mm_token_type_ids (bool, kwargs) — 是否返回多模态 token 类型 id,用于指示多模态占位符 token 的位置。
  • return_text_replacement_offsets (bool, kwargs) — 是否返回每个多模态占位符及其替换内容的字符偏移量。
  • return_tensors (str 或 TensorType, 可选) — 如果设置,将返回特定框架的张量。可接受的值为:
    • 'pt':返回 PyTorch torch.Tensor 对象。
    • 'np':返回 NumPy np.ndarray 对象。
  • **kwargs (ProcessingKwargs,可选) — 每种模态(文本、图像、视频、音频)的额外处理选项。模型特定参数已在上方列出;有关支持参数的完整列表,请参阅 TypedDict 类。

返回值

BatchFeature

一个包含分词文本(input_ids、attention_mask)和音频特征(input_features、input_features_mask)的字典。

apply_transcription_request

< >

( audio: typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor'], list[typing.Union[numpy.ndarray, ForwardRef('torch.Tensor'), collections.abc.Sequence[numpy.ndarray], collections.abc.Sequence['torch.Tensor']]]]language: str | list[str] | None = Noneprompt: str | list[str] | None = Nonekeywords: str | list[str] | list[list[str]] | None = Nonetokenize: bool = True**kwargs: *<class 'transformers.processing_utils.ProcessingKwargs'> ) → BatchFeature or list[str]

参数

  • audio (AudioInput 或 list[AudioInput]) — 要转录的音频。可以是 URL、本地路径、NumPy 数组、PyTorch 张量,或这些类型的列表。
  • language (str 或 list[str],可选) — 目标语言。接受中文、英文或日文的完整英文名称、ISO 代码("zh"、 "en"、"ja")或检查点的中文语言名称("中文"、"英文"、"日文")。 单个值会广播到整个批次。
  • prompt (str 或 list[str],可选) — 可能有助于提升转录效果的上下文信息。如果传入列表,其长度必须与音频批次大小一致。
  • keywords (str、list[str] 或 list[list[str]],可选) — 用于偏置识别的热词。字符串或扁平列表在整个批次中共享;嵌套列表则为每个音频样本提供各自的热词。
  • tokenize (bool,可选,默认为 True) — 是否对提示词进行分词并处理音频。如果为 False,则不会加载音频,提示词将以字符串形式返回,其中包含未展开的音频占位符。将这些提示词与音频一起传递给处理器,即 processor(text=prompts, audio=audio),其输出与 tokenize=True 时相同。
  • **kwargs — 转发给 apply_chat_template() 和底层 processor 调用的额外关键字参数(例如 text_kwargs、audio_kwargs 等)。

返回值

BatchFeature 或 list[str]

当 tokenize=False 时,每个音频对应一个 prompt;否则,processor 的输出可直接传入 FunAsrNanoForConditionalGeneration.generate()。

使用检查点的结构化转录聊天模板为 ASR 准备输入。

FunAsrNanoEncoder

class transformers.FunAsrNanoEncoder

< >

( config: FunAsrNanoEncoderConfig )

参数

  • config (FunAsrNanoEncoderConfig) — 模型的配置类,包含模型的所有参数。通过配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

Fun-ASR-Nano 音频编码器(SenseVoice SAN-M 架构),顶部未添加任何 head。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_features: Tensorinput_features_mask: Tensor**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutput or tuple(torch.Tensor)

参数

返回值

BaseModelOutput 或 tuple(torch.Tensor)

一个 BaseModelOutput 或 torch.Tensor 元组(如果传入了 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(FunAsrNanoConfig)和输入。

FunAsrNanoEncoder 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • last_hidden_state(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor)— 模型最后一层输出的隐藏状态序列。

  • hidden_states (tuple(torch.Tensor),可选,当传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层的输出,以及每一层的输出),形状为 (batch_size, sequence_length, hidden_size)。

    模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。

  • attentions (tuple(torch.Tensor),可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。

FunAsrNanoModel

class transformers.FunAsrNanoModel

< >

( config: FunAsrNanoConfig )

参数

  • config (FunAsrNanoConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

Fun-ASR-Nano 模型(SenseVoice SAN-M 音频编码器、一个 Transformer 适配器以及一个 Qwen3 语言模型), 不包含语言建模头。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneinput_features: typing.Optional[torch.Tensor] = Noneinput_features_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Noneuse_cache: bool | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → FunAsrNanoModelOutputWithPast or tuple(torch.Tensor)

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length), ,可选) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)将被忽略。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。

    什么是输入 ID?

  • input_features (torch.Tensor,形状为 (batch_size, sequence_length, feature_dim),可选) — 与输入音频特征对应的张量。可以使用 FunAsrNanoFeatureExtractor 获取音频特征。有关详细信息,请参阅 FunAsrNanoFeatureExtractor.call()(FunAsrNanoProcessor 使用 FunAsrNanoFeatureExtractor 来处理音频)。
  • input_features_mask(形状为 (batch_size, feature_sequence_length) 的 torch.Tensor)— 用于避免对填充特征索引执行注意力机制的掩码。
  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为 [0, config.n_positions - 1].

    什么是位置 ID?

  • past_key_values (~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由 past_key_values 在解码的先前阶段返回,当 use_cache=True 或 config.use_cache=True.

    仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入 past_key_values,则默认会初始化 DynamicCache。

    模型将输出与输入相同的缓存格式。

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即未向该模型提供其过去键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的全部 input_ids。

  • inputs_embeds(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 input_ids。如果您希望对 input_ids 索引如何转换为相应向量拥有比模型内部嵌入查找矩阵更多的控制权,这将非常有用。
  • use_cache (bool,可选) — 如果设置为 True,则会返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。

返回值

FunAsrNanoModelOutputWithPast 或 tuple(torch.Tensor)

FunAsrNanoModelOutputWithPast 或 torch.Tensor 元组(如果传入 return_dict=False 或 config.return_dict=False),其包含的元素取决于配置(FunAsrNanoConfig)和输入。

FunAsrNanoModel 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • audio_hidden_states (torch.Tensor,可选) — 投影后的音频隐藏状态。

FunAsrNanoForConditionalGeneration

类 transformers.FunAsrNanoForConditionalGeneration

< >

( config: FunAsrNanoConfig )

参数

  • config (FunAsrNanoConfig) — 模型的配置类,包含模型的所有参数。使用配置文件进行初始化时,不会加载与模型关联的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。

用于语音识别的 Fun-ASR-Nano 模型:一个 SenseVoice SAN-M 音频编码器、一个 Transformer 适配器,以及一个带有语言建模头的 Qwen3 语言模型。

该模型继承自 PreTrainedModel。请查阅父类文档,了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。

该模型也是 PyTorch torch.nn.Module 的子类。 请将其作为常规的 PyTorch Module 使用,有关通用用法和行为的所有事项,请参阅 PyTorch 文档。

forward

< >

( input_ids: typing.Optional[torch.LongTensor] = Noneinput_features: typing.Optional[torch.Tensor] = Noneinput_features_mask: typing.Optional[torch.Tensor] = Noneattention_mask: typing.Optional[torch.Tensor] = Noneposition_ids: typing.Optional[torch.LongTensor] = Nonepast_key_values: transformers.cache_utils.Cache | None = Noneinputs_embeds: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneuse_cache: bool | None = Nonelogits_to_keep: typing.Union[int, torch.Tensor] = 0**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → FunAsrNanoCausalLMOutputWithPast or tuple(torch.Tensor)

参数

  • input_ids (torch.LongTensor 形状为 (batch_size, sequence_length), ,可选) — 输入序列中各 token 在词汇表中的索引。默认情况下,填充(padding)将被忽略。

    可以使用 AutoTokenizer 获取索引。有关详细信息,请参阅 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。

    什么是输入 ID?

  • input_features (torch.Tensor,形状为 (batch_size, sequence_length, feature_dim),可选) — 与输入音频特征对应的张量。可以使用 FunAsrNanoFeatureExtractor 获取音频特征。有关详细信息,请参阅 FunAsrNanoFeatureExtractor.call()(FunAsrNanoProcessor 使用 FunAsrNanoFeatureExtractor 来处理音频)。
  • input_features_mask(形状为 (batch_size, feature_sequence_length) 的 torch.Tensor)— 用于避免对填充特征索引执行注意力机制的掩码。
  • attention_mask (torch.Tensor 形状为 (batch_size, sequence_length), ,可选) — 用于避免对填充 token 索引执行注意力机制的掩码。掩码值取自 [0, 1]:
    • 1 表示未被屏蔽的 token,
    • 对于被掩码的 token,值为 0。

    什么是注意力掩码?

  • position_ids (torch.LongTensor 形状为 (batch_size, sequence_length), 可选) — 输入序列中每个 token 在位置嵌入中的位置索引。取值范围为 [0, config.n_positions - 1].

    什么是位置 ID?

  • past_key_values (~cache_utils.Cache, 可选) — 预计算的隐藏状态(自注意力块和交叉注意力块中的键和值),可用于加速顺序解码。这通常由 past_key_values 在解码的先前阶段返回,当 use_cache=True 或 config.use_cache=True.

    仅允许将 Cache 实例作为输入,请参阅我们的 kv cache 指南。 如果未传入 past_key_values,则默认会初始化 DynamicCache。

    模型将输出与输入相同的缓存格式。

    如果使用了 past_key_values,用户应仅输入未处理的 input_ids(即未向该模型提供其过去键值状态的那些),其形状为 (batch_size, unprocessed_length),而不是形状为 (batch_size, sequence_length) 的全部 input_ids。

  • inputs_embeds(形状为 (batch_size, sequence_length, hidden_size) 的 torch.Tensor,可选) — 可选地,您可以选择直接传入嵌入表示,而不是传入 input_ids。如果您希望对 input_ids 索引如何转换为相应向量拥有比模型内部嵌入查找矩阵更多的控制权,这将非常有用。
  • labels(形状为 (batch_size, sequence_length) 的 torch.LongTensor,可选)— 用于计算掩码语言建模损失的标签。
  • use_cache (bool,可选) — 如果设置为 True,则会返回 past_key_values 键值状态,可用于加速解码(参见 past_key_values)。
  • logits_to_keep (Union[int, torch.Tensor], 可选,默认为 0) — 如果为 int,则计算最后 logits_to_keep 个 token 的 logits。如果为 0,则计算所有 input_ids 的 logits(特殊情况)。生成过程只需要最后一个 token 的 logits,仅针对该 token 进行计算可以节省内存,对于长序列或大词汇量而言,这种节省相当显著。 如果为 torch.Tensor,则必须是一维张量,对应于序列长度维度中需要保留的索引。 这在使用打包张量格式(将批次和序列长度合并为单一维度)时非常有用。

返回值

FunAsrNanoCausalLMOutputWithPast 或 tuple(torch.Tensor)

FunAsrNanoCausalLMOutputWithPast 或 torch.Tensor 元组(当传入 return_dict=False 或 config.return_dict=False 时),其包含的元素取决于配置(FunAsrNanoConfig)和输入。

FunAsrNanoForConditionalGeneration 的 forward 方法重写了 __call__ 特殊方法。

尽管前向传播的实现需要在此函数中定义,但之后应调用 Module 实例,而不是直接调用此函数,因为前者会负责执行预处理和后处理步骤,而后者则会静默地忽略这些步骤。

  • loss (torch.Tensor,形状为 (1,),可选,当提供 labels 时返回) — 语言建模损失(用于下一个 token 预测)。

  • logits(形状为 (batch_size, sequence_length, config.vocab_size) 的 torch.Tensor)— 语言建模头的预测分数。

  • past_key_values(Cache,可选,在传入 use_cache=True 或 config.use_cache=True 时返回)—— 它是一个 Cache 实例。

  • hidden_states (tuple[torch.Tensor],可选,当传入 output_hidden_states=True 或 config.output_hidden_states=True 时返回) — 一个 torch.Tensor 元组(如果模型具有嵌入层,则包含嵌入层输出的一个张量,以及每个层输出的一个张量),形状为 (batch_size, sequence_length, hidden_size)。

    模型在每一层输出处的隐藏状态,以及可选的初始嵌入输出。

  • attentions (tuple[torch.Tensor],可选,当传入 output_attentions=True 或 config.output_attentions=True 时返回) — 一个 torch.Tensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)。

    注意力权重,即经过注意力 softmax 之后的权重,用于在自注意力头中计算加权平均值。

  • audio_hidden_states (torch.Tensor,可选) — 音频编码器投影后的隐藏状态。

示例:

>>> from transformers import FunAsrNanoForConditionalGeneration, AutoProcessor

>>> model_id = "FunAudioLLM/Fun-ASR-Nano-2512-hf"
>>> processor = AutoProcessor.from_pretrained(model_id)
>>> model = FunAsrNanoForConditionalGeneration.from_pretrained(model_id, device_map="auto")
Update on GitHub