十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

NeMo ASR API 参考指南:语音识别模型类、模块与解码子系统的源码级解读

NeMo ASR API 参考指南:语音识别模型类、模块与解码子系统的源码级解读 NeMo ASR API 参考指南语音识别模型类、模块与解码子系统的源码级解读【免费下载链接】SpeechA scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Recognition and Text-to-Speech)项目地址: https://gitcode.com/GitHub_Trending/nem/Speech本文基于仓库文档 NeMo ASR API 系统梳理 NVIDIA NeMo 语音识别ASR子包的公开 API 体系覆盖模型类CTC / RNNT / 混合 Transducer-CTC / 多说话人 / 分类与说话人标签、编码器与解码器模块、Mixins 混入、数据集、音频预处理器与增强器、CTC/RNNT/TDT 三类解码后端以及 Adapter 适配网络。读完后你可以按类名快速定位到 nemo/collections/asr 下的具体源码文件理解每个组件的职责边界与调用关系并在自研 ASR 流水线中正确选型与组合这些组件。API 文档的组织方式docs/source/asr/api.rst 是 Sphinx autoclass 驱动的 API 参考页本身不承载长篇教程而是把 NeMo ASR 子包的公共接口按六大类组织Model Classes模型类、Modules网络模块、Mixins混入、Datasets数据集、Audio Preprocessors / Augmentors预处理与增强、Miscellaneous Classes解码器、假设对象、Adapter 等杂项。页面中的每一项都对应源码中的一个具体类模型类位于 nemo/collections/asr/models均以EncDec前缀命名体现编码器-解码器结构网络模块位于 nemo/collections/asr/modules混入与解码逻辑位于 nemo/collections/asr/parts数据集位于 nemo/collections/asr/data。这种分层是 NeMo 的典型设计模型类只负责组装preprocessor encoder decoder/joint loss decoding具体算子下沉到模块层数据流封装在数据集层。对 LLM Agent 和检索工具而言按“类名 → 文件路径”的映射即可直接索引实现。模型类Model ClassesAPI 页共列出 9 个模型类其继承关系可直接在源码中验证模型类实现位置继承链源码验证EncDecCTCModelctc_models.pyASRModel, ExportableEncDecModel, ASRModuleMixin, InterCTCMixin, ASRTranscriptionMixinEncDecCTCModelBPEctc_bpe_models.pyEncDecCTCModel, ASRBPEMixinEncDecRNNTModelrnnt_models.pyASRModel, ASRModuleMixin, ExportableEncDecModel, ASRTranscriptionMixinEncDecRNNTBPEModelrnnt_bpe_models.pyEncDecRNNTModel, ASRBPEMixinEncDecRNNTBPEModelWithPromptrnnt_bpe_models_prompt.pyPromptStreamingMixin, EncDecRNNTBPEModel, ASRTranscriptionMixinEncDecHybridRNNTCTCBPEModelWithPrompthybrid_rnnt_ctc_bpe_models_prompt.pyPromptStreamingMixin, EncDecHybridRNNTCTCBPEModel, ASRTranscriptionMixinEncDecMultiTalkerRNNTBPEModelmultitalker_asr_models.pyEncDecRNNTBPEModel, SpeakerKernelMixinEncDecSpeakerLabelModellabel_models.pyModelPT, ExportableEncDecModel, VerificationMixinEncDecClassificationModelclassification_models.pyEncDecSpeakerLabelModel, TranscriptionMixin可以看出BPE 版本模型...BPE...都是在对应字符版模型之上叠加ASRBPEMixin得到的EncDecClassificationModel则复用了说话人标签模型的编码-分类骨架API 页面中每个类重复列出的change_vocabulary / setup_training_data / setup_optimization / setup_validation_data / setup_test_data / register_artifact等成员正是这些继承链共享的接口。transcribe统一推理入口API 页对每个模型类都显式列出transcribe方法。以 EncDecCTCModel.transcribe 的源码签名为例其参数集与 NeMo 其他 ASR 模型保持一致可直接对照配置def transcribe( self, audio: Union[str, List[str], torch.Tensor, np.ndarray, DataLoader], batch_size: int 4, return_hypotheses: bool False, num_workers: int 0, channel_selector: Optional[ChannelSelectorType] None, augmentor: DictConfig None, verbose: bool True, timestamps: Optional[bool] None, override_config: Optional[TranscribeConfig] None, ) - TranscriptionReturnType:要点均来自源码 docstring 与实现audio支持单路径 / 路径列表 / 波形张量 / manifest 文件 / DataLoader 五种输入docstring 建议单文件长度 525 秒长音频在显存充足时也可传入batch_size默认 4调大提升吞吐但增加显存占用timestampsTrue时会自动把self.cfg.decoding.compute_timestamps置为True并调用change_decoding_strategy重建解码器时间戳随后写入返回的Hypothesis.timestep[word/segment/char]见 Hypothesis 类override_config传参后其余参数全部被忽略这是批量改写推理配置beam size、timestamps、logprobs 等的正规入口其结构由 TranscribeConfig 定义。change_vocabulary微调时换词表EncDecCTCModel.change_vocabulary 是跨语言微调的关键方法。源码显示它的行为边界非常明确若新词表与旧词表一致则直接跳过新词表至少需包含 2 个元素只重建 decoder、CTCLoss 与解码器CTCDecoding/WERencoder 和 preprocessor 保持不动——这正是用预训练编码器 新语言文本侧微调场景的设计目的会自动把decoder.num_classes同步为新词表长度并刷新cfg.decoding与已注册的train_ds / validation_ds / test_ds相关字段。setup_training_data / setup_validation_data / setup_test_data以 EncDecCTCModel 为例三个 setup 方法都接收Optional[Union[DictConfig, Dict]]参数传入配置时按配置构建 DataLoader不传则复用模型构建时注册的数据集。RNNT 侧的对应实现见 rnnt_models.py。EncDecClassificationModel额外提供use_feat形参classification_models.py用于直接从特征文件读取测试数据。setup_optimization 与 register_artifactsetup_optimization相关的优化器/调度器构建逻辑集中在基类 ASRModel.setup_optimization_flags 及 NeMo core 的优化模块中模型类通过组合方式继承register_artifact属于 NeMo core 类机制nemo/core/classes允许在 Hydra 配置中以persist/download方式注册文件类工件如预处理器、分词器路径API 页将这两个方法并列列出正是因为它们在配置驱动的微调流程中总是成对出现。Prompt 模型扩展的推理接口EncDecRNNTBPEModelWithPrompt与EncDecHybridRNNTCTCBPEModelWithPrompt在 API 页比其他模型多出set_inference_prompt与initialize_prompt_feature两个成员对应其继承的PromptStreamingMixin前者在推理前为每个批样本注入文本 prompt 序列后者在模型加载阶段完成 prompt 特征的初始化。配套的训练/推理脚本可参考 examples/asr/asr_transducer/transcribe.py 与 examples/asr/conf 下的 RNNT / hybrid 配置。多说话人分类与说话人标签模型EncDecMultiTalkerRNNTBPEModel叠加 SpeakerKernelMixin为每个说话人维护一个 kernel实现多说话人并行转写EncDecSpeakerLabelModel与EncDecClassificationModel用于说话人/事件级分类任务二者复用 conv_asr.py 中的ConvASRDecoderClassification作为分类头。Modules编码器、解码器与 Joint 网络API 页 Modules 一节列出的类都位于 nemo/collections/asr/modules是模型类的积木件编码器ConformerEncoder当前 NeMo ASR 的主力编码器ConformerEncoder同时实现StreamingEncoder接口是 FastConformer 系列含流式与混合 RNNT-CTC 模型的默认 backboneTransformerEncoder 与 StreamingTransformerEncoder前者为通用 Transformer 编码实现后者通过继承前者并实现流式状态管理支持分块chunk推理ConvASREncoder基于 CNN 的经典编码器早期 WaveNet-ASR 风格模型沿用RNNEncoderLSTM/GRU 编码器主要服务小模型与历史 checkpoint 兼容。解码器与 JointConvASRDecoderCTC 字符版线性投影解码器SpeakerDecoder说话人/标签分类任务的解码头RNNTDecoderTransducer 的语言模型侧prediction 网络同时支持字符与 BPE 词表StatelessTransducerDecoder无状态版本面向流式推理场景的缓存管理RNNTJointTransducer 的 joint 网络融合声学帧与语言模型状态输出标签分布EncDecRNNTModel初始化时会从cfg.joint动态注入num_classes、vocabulary以及encoder_hidden / pred_hidden见 rnnt_models.pySampledRNNTJointRNNTJoint的采样变体继承链SampledRNNTJoint(RNNTJoint)表明其在 joint 前向中引入标签采样近似以加速训练。Mixins把能力“混入”模型API 页 Mixins 一节列出 6 个混入它们解释了许多模型类为何长得像却能力不同ASRBPEMixinBPE 词表、分词器加载与change_vocabulary的 BPE 版本实现所有*BPE*模型的能力来源ASRModuleMixin提供forward统一前向输入音频→logprobs与 Adapter 注入入口其基类为ASRAdapterModelMixinTranscriptionMixintranscribe的通用实现处理 manifest/DataLoader 解析、批次循环与结果归并TranscribeConfig推理覆盖配置的 dataclasstranscribe(override_config...)的结构定义InterCTCMixin在 RNNT/Transducer 训练中加入中间层 CTC 辅助损失interCTCEncDecCTCModel.__init__末尾的self.setup_interctc(...)调用即来自该混入见 ctc_models.pySpeakerKernelMixin多说话人转写所需的 speaker kernel 管理与并行解码逻辑。Datasets四类音频-文本数据管道API 页按词元粒度把数据集分为四组全部位于 nemo/collections/asr/data字符编码Character EncodingAudioToCharDataset 与 TarredAudioToCharDataset基于 manifest 的字符级数据集Tarred 版本读取 sharded/tarred 音频用于大规模训练子词编码Subword EncodingAudioToBPEDataset 与 TarredAudioToBPEDataset结构同字符版文本侧换成 BPE 词元与ASRBPEMixin配套Text-to-Text 数据集TextToTextDatasetmap-style与 TextToTextIterableDatasetiterable用于语言模型重打分等纯文本任务后者适合流式分片数据多说话人数据集Speaker-TaggedLhotseSpeechToTextSpkBpeDataset基于 Lhotse 的多说话人 ASR 数据集供EncDecMultiTalkerRNNTBPEModel训练LhotseAudioToSpeechE2ESpkDiarDataset端到端说话人日志数据集MultiSpeakerSimulator 与 RIRMultiSpeakerSimulator多说话人音频模拟工具后者叠加 RIR房间脉冲响应混响模拟仓库同时提供独立入口 tools/speech_data_simulator/multispeaker_simulator.py 与配置 conf。Audio Preprocessors 与 Audio Augmentors预处理器AudioToMelSpectrogramPreprocessor梅尔谱特征提取FastConformer/Parakeet 系列模型的默认 preprocessor其配置 dataclass AudioToMelSpectrogramPreprocessorConfig 覆盖n_fft、sample_rate、窗函数等参数AudioToMFCCPreprocessorMFCC 特征提取面向传统 RNN/LSTM 模型。两个 preprocessor 均实现 NeMo 的Exportable接口因此可在模型导出时一并打包。增强器Augmentors增强器分为谱图级与波形级两类谱图级SpectrogramAugmentation频带掩码 时间掩码即 SpecAugment与 CropOrPadSpectrogramAugmentation对谱图做裁剪/补齐以统一时长波形级扰动位于 nemo/collections/asr/parts/preprocessing/perturb.pyAPI 页列出的 9 个扰动类各司其职扰动类行号作用SpeedPerturbationL102变速改变语速TimeStretchPerturbationL175时域拉伸/压缩保持音调GainPerturbationL323随机增益ImpulsePerturbationL343脉冲爆音注入ShiftPerturbationL423时移延迟NoisePerturbationL457噪声文件混合WhiteNoisePerturbationL850白噪声叠加RirAndNoisePerturbationL871RIR 混响 噪声联合模拟TranscodePerturbationL1002有损转码模拟电话/低码率场景在线增强的示例可参考教程 Online_Noise_Augmentation.ipynb。Miscellaneous Classes解码子系统与假设对象这是 API 页信息量最大的一节对应parts/submodules下的解码管理器*Decoding与推理后端*Infer两层结构。解码管理器CTC / RNNT / TDTCTCCTCDecoding 与 CTCPEDecodingBPE 版负责按decoding配置greedy / beam / flashlight实例化推理后端并在词表变化后重建RNNTRNNTDecoding 与 RNNTBPEDecoding构造时接收decoder与joint实例见 rnnt_models.py是 Transducer 解码的统一入口TDTTransducer-Data-Driven / TDT 变体损失GreedyTDTInfer等 TDT 推理后端复用 RNNT 的联合解码框架用于训练损失为 TDT 的模型。推理后端后端位置说明GreedyCTCInferctc_greedy_decoding.pyCTC 贪心解码支持置信度ConfidenceMethodMixinBeamCTCInferctc_beam_decoding.pyCTC 束搜索GreedyRNNTInferrnnt_greedy_decoding.pyRNNT 贪心解码GreedyBatchedRNNTInferrnnt_greedy_decoding.py批量化贪心解码实现WithOptionalCudaGraphs可启用 CUDA Graphs 降低启动开销BeamRNNTInferrnnt_beam_decoding.pyRNNT 束搜索BeamBatchedRNNTInferrnnt_beam_decoding.py批量化 RNNT 束搜索GreedyTDTInferrnnt_greedy_decoding.pyTDT 贪心解码GreedyBatchedTDTInferrnnt_greedy_decoding.pyTDT 批量贪心BeamTDTInfertdt_beam_decoding.pyTDT 束搜索BeamBatchedTDTInfertdt_beam_decoding.pyTDT 批量束搜索从源码结构看每个*Infer都有对应的*Configdataclass如 GreedyRNNTInferConfig、BeamRNNTInferConfig模型配置中decoding: {decoding_strategy: greedy|beam, ...}的字段最终就是由这些 Config 结构解析的——修改 examples/asr/conf 下 YAML 的 decoding 段即可切换策略无需改代码。Hypothesis 与 NBestHypothesesHypothesis 与 NBestHypotheses 是transcribe(return_hypothesesTrue)的返回结构前者承载单条假设的文本、置信度、时间戳timestep中的 word/segment/char 粒度与 logprobs后者承载 N-best 候选列表。对需要下游重打分rescoring或对齐后处理的管线这两个类是标准数据契约。Adapter Networks 与 Adapter StrategiesAPI 页末尾列出的 Adapter 接口支撑冻结大模型 轻量适配层的微调范式MultiHeadAttentionAdapter 与 RelPositionMultiHeadAttentionAdapter注入到注意力层的 MHA Adapter 及其相对位置编码变体PositionalEncodingAdapter与RelPositionalEncodingAdapter对位置编码层做适配与 MHA Adapter 组合使用MHAResidualAddAdapterStrategyAdapter 注入策略ResidualAdd表示把 Adapter 输出以残差相加方式并入原前向其adapter_module_names属性声明可注入的目标模块名。模型侧由 ASRModuleMixin 提供的setup_adapters负责按配置实例化这些 AdapterEncDecCTCModel.__init__末尾的self.setup_adapters()即此调用相关实践可结合教程 ASR_Adapter 系列 与 examples/asr/asr_adapters 的线性/相对位置 MHA 示例脚本。如何按 API 页定位源码并继续深入拿到类名后按上表的文件 行号直接跳转源码每个类的 docstring 与__init__会说明其配置字段关注模型配置基类 EncDecCTCModelConfig 与 nemo/collections/asr/models/configs它是 YAML 中各字段preprocessor/encoder/decoder/joint/decoding/loss的类型定义验证行为时参考测试目录 tests/collections/asr其中 100 测试文件按模型类组织覆盖 transcribe、change_vocabulary、解码切换等 API 行为的回归验证端到端用法以 examples/asr 为入口speech_to_text_finetune.py训练、transcribe_speech.py推理、export导出配合 docs/source/asr/inference.rst 等文档页可形成完整工作流。小结docs/source/asr/api.rst 所覆盖的 API 面可以概括为一句话NeMo ASR 以 9 个EncDec*模型类为入口向下组合编码器/解码器/joint 模块与 CTC-RNNT-TDT 三套可切换解码后端向上通过 BPE、Prompt、InterCTC、多说话人等 Mixins 扩展能力并以 Hypothesis/NBestHypotheses 作为统一的推理输出契约。理解这一分层后无论是更换词表、切换 beam 策略、加入数据增强还是注入 Adapter 做参数高效微调都可以在不改动主干代码的前提下通过模型配置与对应 setup 方法完成。【免费下载链接】SpeechA scalable generative AI framework built for researchers and developers working on Large Language Models, Multimodal, and Speech AI (Automatic Speech Recognition and Text-to-Speech)项目地址: https://gitcode.com/GitHub_Trending/nem/Speech创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表