NeMo Speech 自监督学习集合 API 指南:SSL 模型类与 Mixin 深度解析
【免费下载链接】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
本指南围绕 docs/source/asr/ssl/api.rst 展开,系统讲解 NeMo Speech 仓库中自监督学习(SSL)集合的核心 API:两个模型类
SpeechEncDecSelfSupervisedModel与EncDecDenoiseMaskedTokenPredModel,以及两个通用 MixinASRModuleMixin与AccessMixin。阅读完本文,你将理解 SSL 预训练模型的构造流程、loss_list多损失机制、掩码 token 预测(NEST)的数据流,并掌握如何基于这些 API 训练、加载与迁移自监督预训练权重。
SSL 集合 API 文档的定位
在 NeMo 的 SSL 文档树中,api.rst 是面向开发者的"类库索引页",它以 Sphinxautoclass指令把 SSL 集合对外暴露的关键符号自动渲染成带完整 docstring、签名与继承关系的 API 参考。它与 intro.rst(原理介绍)、models.rst(模型设计思路)、configs.rst(配置指南)、results.rst(检查点与微调)共同构成完整的 SSL 文档体系。
api.rst 共收录四个符号,按功能可分为两组:
| 类别 | 符号 | 所在源码文件 |
|---|---|---|
| 模型类 | nemo.collections.asr.models.EncDecDenoiseMaskedTokenPredModel | nemo/collections/asr/models/ssl_models.py |
| 模型类 | nemo.collections.asr.models.SpeechEncDecSelfSupervisedModel | nemo/collections/asr/models/ssl_models.py |
| Mixin | nemo.collections.asr.parts.mixins.mixins.ASRModuleMixin | nemo/collections/asr/parts/mixins/mixins.py |
| Mixin | nemo.core.classes.mixins.access_mixins.AccessMixin | nemo/core/classes/mixins/access_mixins.py |
下文依次深入这些类的实现细节,并结合仓库中的示例脚本与 YAML 配置给出可落地的用法。
SpeechEncDecSelfSupervisedModel:自监督预训练基类
SpeechEncDecSelfSupervisedModel是 SSL 集合中最基础的模型类,定义于 ssl_models.py,其 docstring 明确了定位:"用于自监督编码器预训练的编码器-解码器模型基类"。它同时继承了三个父类:
ModelPT:NeMo 模型基类,提供from_config_dict、from_pretrained、restore_from、save_to、maybe_init_from_pretrained_checkpoint等能力;ASRModuleMixin:提供面向 ASR 模块的运行时调整方法(详见后文);AccessMixin:提供中间层张量访问与注册机制(详见后文)。
构造流程:从配置到模块
构造方法(__init__)按以下顺序构建模型组件(ssl_models.py):
- preprocessor:从
cfg.preprocessor实例化特征提取器(MFCC / Mel 频谱),把原始波形转为模型输入特征; - encoder:从
cfg.encoder实例化编码器,这是 SSL 训练后要保留下来的核心部分(后续微调直接复用); - decoder + loss 或 loss_list:若配置中存在
loss_list键,则构建多个 decoder-loss 对组成的nn.ModuleDict;否则按单decoder+ 单loss构建。SSL 阶段使用的 decoder 与损失在下游微调时会被丢弃; - spec_augmentation:从
cfg.spec_augment实例化频谱增强模块(SSL 中通常使用掩码类增强); - dropout_features / dropout_features_q:可选的特征级 Dropout,分别作用于"送入编码器的特征"和"送入量化器的目标特征"(Wav2Vec 风格训练常用);
- feature_penalty:可选的预处理器输出特征惩罚项(Wav2Vec 训练的
feat_pen机制),其值为processed_signal.float().pow(2).mean() * pen_factor; - access 配置:若
cfg中存在access键,则通过set_access_cfg写入全局访问配置,供AccessMixin使用。
从源码结构可以推断,apply_masking标志控制训练时是否对频谱施加掩码增强,forward中会根据该标志决定是否调用self.spec_augmentation(ssl_models.py)。
前向传播:四元组输出
forward方法(ssl_models.py)接受两种互斥的输入组合:
- 原始波形:
input_signal(形状[B, T])+input_signal_length; - 已处理特征:
processed_signal(形状[B, D, T])+processed_signal_length(例如来自 DALI 预处理器)。
它返回一个四元组:
spectrograms:形状[B, D, T],送入量化器/目标构造用的频谱(在 dropout_features_q 之后);spec_masks:形状[B, D, T],实际施加到频谱上的掩码(由增强模块产生,超出有效长度的位置被强制清零);encoded:编码器输出特征,形状[B, D, T];encoded_len:编码器下采样后的序列长度向量[B]。
前向过程中还包含一个关键细节:若loss_list中任一子损失的output_from_layer非空,模型会通过AccessMixin注册机制在训练/验证时保存指定中间层的编码器输出,供后续损失使用(ssl_models.py)。
多损失机制:loss_list深度解读
SSL 集合最大的灵活性在于支持同时使用多个 decoder-loss 对(ssl_models.py)。loss_list是DictConfig字典,每个键代表一个命名子损失,其配置字段如下(源自 configs.rst 与源码实现):
| 字段 | 默认值 | 含义 |
|---|---|---|
decoder | 必填 | 解码器配置,指定_target_类与参数 |
loss | 必填 | 对应损失配置 |
loss_alpha | 1.0 | 该损失的加权系数 |
targets_from_loss | None | 从哪个对比损失中提取标签(当损失需要标签而 manifest 中没有时必填) |
transpose_encoded | False | 送入该损失前是否转置编码特征 |
start_step | 0 | 该 decoder+loss 从第几步开始生效 |
output_from_layer | None | 提取编码特征的中间层名;为null时使用编码器最后一层 |
is_active | True | 是否启用该子损失(源码在构造时跳过非活跃项) |
在decoder_loss_step中(ssl_models.py),模型遍历decoder_losses:
- 按
output_from_layer从AccessMixin注册表中取指定中间层输出(registry[name]['encoder'][-1]); - 按
transpose_encoded决定是否转置; - 若
targets_from_loss指定了某个对比损失,则从该损失中取出量化目标target_ids与target_lengths作为其他损失的标签; - 每个损失根据自身
needs_labels属性决定是否传入 targets; - 最终总损失为各损失按
loss_alpha加权求和,同时返回未加权损失字典用于日志记录。
training_step中还有一个细节:每个子损失按trainer.global_step >= start_step动态激活(ssl_models.py),这允许训练初期只跑对比损失、后期再加入 MLM/CTC/RNNT 等需要标签的损失,以提升早期训练稳定性。
数据集加载:多后端支持
_setup_dataloader_from_config(ssl_models.py)展示了 SSL 数据管线的兼容性:
- Lhotse:
use_lhotse: true时走 Lhotse 数据加载; - DALI:
use_dali: true时使用 GPU 数据管线; - tarred 数据集:
is_tarred: true时使用TarredAudioToCharDataset(配合shuffle_n做内存打乱); - 普通数据集:默认走
get_char_dataset。
此外还支持在数据集配置中注入augmentor(如random_segment扰动)。setup_training_data/setup_validation_data会默认填充shuffle(训练 True、验证 False)并对 IterableDataset 修正limit_train_batches步数。
官方预训练权重列表
list_available_models()(ssl_models.py)暴露了该基类可直接加载的 NGC 预训练模型:
ssl_en_conformer_largessl_en_conformer_xlarge
这两个模型可通过from_pretrained(model_name="ssl_en_conformer_large")直接实例化(详见后文"检查点加载"小节)。
EncDecMaskedTokenPredModel与EncDecDenoiseMaskedTokenPredModel:掩码 token 预测家族
api.rst 直接收录的是EncDecDenoiseMaskedTokenPredModel,它继承自EncDecMaskedTokenPredModel(ssl_models.py),后者又继承自SpeechEncDecSelfSupervisedModel,三者构成掩码 token 预测(Masked Token Prediction)的自监督模型家族。
EncDecMaskedTokenPredModel:掩码预测基类
其 docstring 定位为"在编码器输出上执行掩码 token 预测的语音自监督模型"。构造时(ssl_models.py)构建五个组件:
quantizer:向量量化器,把频谱特征离散化为 token(伪标签来源);mask_processor:掩码处理器;encoder/decoder/loss。
构造逻辑里有一个值得注意的参数mask_position(可选pre_conv/post_conv):
pre_conv(默认):在卷积下采样之前对原始频谱特征掩码;post_conv:在卷积下采样之后掩码,此时源码会自动修正quantizer.feat_in、masking.feat_in(改为encoder.d_model)、masking.block_size(除以encoder.subsampling_factor)以及loss.combine_time_steps(置为 1),并通过ConvFeatureMaksingWrapper包装encoder.pre_encode实现后卷积掩码。
input_types/output_types声明了神经类型契约:输入为AudioSignal(或已处理SpectrogramType),输出为logprobs、encoded_len、masks、tokens(当num_books == 1且squeeze_single时 logprobs 为('B','T','C'),否则为('B','T','C','H'))。该类还定义了oomptimizer_schema,用于 OOMptimizer 对不同序列长度做最优 batch size 标定。
EncDecDenoiseMaskedTokenPredModel:NEST(去噪 + 掩码预测)
该类是NEST(Neural End-to-End Speech Transformer 类模型)在 NeMo 中的实现,docstring 明确指出其"执行去噪与掩码 token 预测",对应 NEST 论文(见 examples/asr/speech_pretraining/README.md)。其关键特性:
数据流:与普通 ASR 数据集不同,它使用ssl_dataset.AudioNoiseBatch,每个 batch 同时包含三路信号(ssl_models.py):
audio+audio_len:干净语音;noise+noise_len:噪声信号;noisy_audio+noisy_audio_len:加噪后的混合语音。
前向流程(ssl_models.py):
- 对干净语音
processed_signal做量化,得到tokens作为预测目标; - 对加噪语音
processed_noisy_input_signal施加掩码(apply_mask控制是否掩码,掩码时用mask_processor或包装后的pre_encoder); - 编码器接收掩码后的加噪特征,输出
encoded; decoder(MultiSoftmaxDecoder)将编码输出映射为 logits,与量化 token 一起送入MultiMLMLoss(mask_threshold: 0.8控制掩码损失的阈值);- 返回
(log_probs, encoded_len, masks, tokens)。
input_types完整声明了noise_signal、noisy_input_signal及其长度向量(ssl_models.py),output_types则根据num_books/squeeze_single动态决定 logprobs 维度(ssl_models.py)。
数据加载:_setup_dataloader_from_config使用ssl_dataset.get_audio_noise_dataset_from_config(Lhotse 模式下用LhotseAudioNoiseDataset),数据集配置需要同时指定manifest_filepath与noise_manifest,并可配置batch_augmentor(如MultiSpeakerNoiseAugmentation)在 batch 级实时混噪。
ASRModuleMixin:ASR 模块运行时调整
ASRModuleMixin(mixins.py)是所有 ASR 模型(包括 SSL 模型)共享的模块级能力扩展,继承自ASRAdapterModelMixin。其设计原则是:每个方法先检查子类中是否存在对应模块,存在才提供附加功能。SSL 预训练阶段关注的核心方法包括:
change_attention_model(mixins.py):在训练/推理前修改编码器的注意力类型,支持:
rel_pos:相对位置编码 + Transformer-XL;rel_pos_local_attn:相对位置编码 + 基于att_context_size重叠窗口的局部注意力;abs_pos:绝对位置编码 + 标准 Transformer;rope:旋转位置编码(此时可额外指定rope_base与rotary_fraction)。
att_context_size为[left, right]列表,控制每个 step 可见的左右上下文步数。update_config为True时会同步回写self.cfg(包括rope_base/rotary_fraction),保证配置与模型状态一致。
change_conv_asr_se_context_window(mixins.py):当模型含ConvASREncoder时,更新其中 SqueezeExcitation 模块的 context window(以 STFT 帧为单位)。
change_subsampling_conv_chunking_factor:调整卷积下采样的 chunking 因子(流式/低延迟场景)。
此外,该类还承载了流式推理相关方法(conformer_stream_step、transcribe_simulate_cache_aware_streaming)与推理工具方法(path2audio_files_to_manifest、diarize等),可见它把"模块切换 + 推理辅助"两类能力统一在了同一 Mixin 中。
AccessMixin:中间层输出访问机制
AccessMixin(access_mixins.py)为模型提供"访问中间层输出"的能力,是 SSL 多损失机制(尤其是output_from_layer)与多层级特征提取的底层支撑。核心机制如下:
register_accessible_tensor(name, tensor):将张量注册到模块内部_registry字典(列表结构,可累积多次前向的结果)。受全局access_cfg控制,可配置convert_to_cpu(拷回 CPU)与detach(分离计算图);get_module_registry(module):递归收集所有命名子模块的注册表,返回{模块名: registry}字典——SSL 的decoder_loss_step正是用它在编码器上取出layers.5、layers.11等指定层的输出;reset_registry():清空本模块及所有子模块的注册表,并在结束后调用set_access_enabled(False)显式关闭缓存;access_cfg属性:读取全局共享的访问配置(按model_guid隔离,默认使用全局 GUID);- 类方法
update_access_cfg/is_access_enabled/set_access_enabled:全局配置的读写与启用开关。
从源码结构看,AccessMixin采用"全局配置 + 按需注册"的设计:只有is_access_enabled为真且训练/验证状态成立时,forward才开启张量注册(ssl_models.py),避免推理或无关阶段产生额外内存开销。这一机制也让 scripts/ssl/extract_features.py 之类的工具能够从 NEST 中提取多层级特征用于下游分类任务(见 examples/asr/speech_pretraining/README.md)。
实战:基于 API 训练、加载与迁移 SSL 模型
数据格式
SSL 预训练沿用 ASR 数据集格式,但不需要真实转写文本。manifest(jsonl)示例如下(源自 examples/asr/speech_pretraining/README.md):
{"audio_filepath": "path/to/audio1.wav", "duration": 10.0, "text": ""} {"audio_filepath": "path/to/audio2.wav", "duration": 5.0, "text": ""}NEST(去噪)训练还需要一个noise_manifest提供噪声数据,配合配置中的batch_augmentor(MultiSpeakerNoiseAugmentation)在运行时按概率混合语音与噪声。
训练入口
仓库提供两个训练脚本,分别对应两类模型 API:
Wav2Vec-BERT 风格(对比/重建预训练,使用SpeechEncDecSelfSupervisedModel):
python examples/asr/speech_pretraining/speech_pre_training.py \ model.train_ds.manifest_filepath=<path to train manifest> \ model.validation_ds.manifest_filepath=<path to val/test manifest> \ trainer.devices=-1 \ trainer.accelerator="gpu" \ strategy="ddp" \ trainer.max_epochs=100 \ model.optim.name="adamw" \ model.optim.lr=0.001 \ model.optim.betas=[0.9,0.999] \ model.optim.weight_decay=0.0001 \ model.optim.sched.warmup_steps=2000该脚本的默认配置为examples/asr/conf/ssl/fastconformer/fast-conformer.yaml(speech_pre_training.py)。
NEST 风格(去噪掩码 token 预测,使用EncDecDenoiseMaskedTokenPredModel):
python examples/asr/speech_pretraining/masked_token_pred_pretrain.py \ model.train_ds.manifest_filepath=<path to train manifest> \ model.train_ds.noise_manifest=<path to noise manifest> \ model.validation_ds.manifest_filepath=<path to val/test manifest> \ model.validation_ds.noise_manifest=<path to noise manifest> \ trainer.devices=-1 \ trainer.accelerator="gpu" \ strategy="ddp" \ trainer.max_epochs=100 \ model.optim.name="adamw" \ model.optim.lr=0.001 \ model.optim.betas=[0.9,0.999] \ model.optim.weight_decay=0.0001 \ model.optim.sched.warmup_steps=2000默认配置为examples/asr/conf/ssl/nest/nest_fast-conformer.yaml(masked_token_pred_pretrain.py)。脚本主体逻辑是EncDecDenoiseMaskedTokenPredModel(cfg=cfg.model, trainer=trainer)+ 可选maybe_init_from_pretrained_checkpoint(cfg)+trainer.fit()。
NEST 配置核心参数
examples/asr/conf/ssl/nest/nest_fast-conformer.yaml 是理解EncDecDenoiseMaskedTokenPredModel配置的完整样例,关键段落如下:
model: sample_rate: 16000 num_classes: 8192 # 量化码本大小 num_books: 1 # 码本数量 code_dim: 16 # 码字维度 squeeze_single: false mask_position: pre_conv # 掩码位置:pre_conv / post_conv train_ds: manifest_filepath: ??? # 训练 manifest(可字符串或列表) noise_manifest: null # 噪声 manifest sample_rate: ${model.sample_rate} batch_size: 8 shuffle: true num_workers: 8 max_duration: 60.0 min_duration: 1.0 is_tarred: false bucketing_strategy: "synced_randomized" batch_augmentor: _target_: nemo.collections.asr.modules.ssl_modules.MultiSpeakerNoiseAugmentation prob: 0.5 noise_ratio: 0.5 min_r_speech: -5.0 max_r_speech: 5.0 min_r_noise: -5.0 max_r_noise: 20.0 min_mix_rate: 0.5 max_mix_rate: 0.5 min_num_segments: 1 max_num_segments: 1 min_num_speakers: 1 max_num_speakers: 1 preprocessor: _target_: nemo.collections.asr.modules.AudioToMelSpectrogramPreprocessor sample_rate: ${model.sample_rate} window_size: 0.025 window_stride: 0.01 features: 80 n_fft: 512 log: true dither: 0.00001 pad_to: 16 masking: _target_: nemo.collections.asr.modules.RandomBlockMasking block_size: 40 # pre_conv 时每帧 10ms,40 帧即 400ms 一个块 mask_prob: 0.01 # allow_overlap=true 时表示每帧掩码概率 feat_in: ${model.preprocessor.features} freeze: true allow_overlap: true quantizer: _target_: nemo.collections.asr.modules.RandomProjectionVectorQuantizer feat_in: ${model.preprocessor.features} code_dim: ${model.code_dim} num_books: ${model.num_books} num_classes: ${model.num_classes} dist_fn: "l2" # 可选 ["l2", "cosine"] freeze: true squeeze_single: ${model.squeeze_single} combine_time_steps: ${model.encoder.subsampling_factor} encoder: _target_: nemo.collections.asr.modules.ConformerEncoder feat_in: ${model.preprocessor.features} n_layers: 17 d_model: 512 subsampling: dw_striding subsampling_factor: 8 self_attention_model: rel_pos n_heads: 8 att_context_size: [-1, -1] # -1 表示不限上下文 conv_kernel_size: 9 dropout: 0.1 decoder: _target_: nemo.collections.asr.modules.MultiSoftmaxDecoder feat_in: ${model.encoder.d_model} num_classes: ${model.num_classes} num_decoders: ${model.num_books} squeeze_single: ${model.squeeze_single} loss: _target_: nemo.collections.asr.losses.MultiMLMLoss combine_time_steps: ${model.encoder.subsampling_factor} mask_threshold: 0.8 num_decoders: ${model.num_books} squeeze_single: ${model.squeeze_single} optim: name: adamw lr: 5.0 betas: [0.9, 0.98] weight_decay: 1e-3 sched: name: NoamAnnealing d_model: ${model.encoder.d_model} warmup_steps: 25000 min_lr: 1e-6配置注释中还给出了 FastConformer 各规模变体的推荐超参(d_model / n_heads / n_layers / conv_kernel_size / weight_decay 等),从 Small(14M)到 XXLarge(1.2B),供按资源选型。trainer段推荐precision: 32、val_check_interval: 2500、enable_checkpointing: False(检查点由 exp_manager 管理),exp_manager段支持always_save_nemo: True(直接保存.nemo格式)与resume_if_exists(断点续训)。
数据集配置的三个技巧
configs.rst 特别强调:做对比损失时,一个 batch 内各句需要掩码等量 patch,因此应控制 batch 内时长差异,三种推荐做法:
min_duration:在数据集配置中直接丢弃过短样本(适合短样本占比不影响总时长的场景);random_segment扰动:对长音频在运行时随机采样固定长度片段(不足部分 padding):
augmentor: random_segment: prob: 1.0 duration_sec: 16 # 指定目标片段时长- bucketing:按时长分桶保证 batch 内长度相近,参考仓库中
bucketing_strategy: "synced_randomized"的用法。
对比损失还需保证掩码步数足够采样负例:例如 4x stride 下要采样 100 个负例,就需要超过 400 个掩码步;使用默认patch_size=48时mask_patches至少设为 9。掩码增强推荐使用MaskedPatchAugmentation:
spec_augment: _target_: nemo.collections.asr.modules.MaskedPatchAugmentation patch_size: 48 mask_patches: 0.5 # 掩码比例(也可设为固定整数数量) freq_masks: 3 # 切 3 个频率带 freq_width: 20 # 每个频率带最大宽度 20多损失组合示例
基于loss_list,可以将对比损失与其他损失组合(完整示例见 configs.rst):
对比 + MLM(MLM 的标签来自对比损失的量化器,targets_from_loss: "contrastive"):
loss_list: contrastive: decoder: _target_: nemo.collections.asr.modules.ConvASRDecoderReconstruction feat_in: ${model.encoder.d_model} feat_hidden: 128 feat_out: ${model.decoder_out} stride_layers: 0 non_stride_layers: 0 loss: _target_: nemo.collections.asr.losses.ContrastiveLoss in_dim: ${model.preprocessor.features} proj_dim: ${model.decoder_out} combine_time_steps: 4 quantized_targets: true codebook_size: 300 num_groups: 2 sample_from_same_utterance_only: true sample_from_non_masked: false mlm: decoder: _target_: nemo.collections.asr.modules.ConvASRDecoder feat_in: ${model.encoder.d_model} num_classes: 90000 # 等于 codebook_size^groups loss: _target_: nemo.collections.asr.losses.MLMLoss combine_time_steps: 4 targets_from_loss: "contrastive" loss_alpha: 1000. transpose_encoded: false start_step: 0 output_from_layer: null对比 + CTC / RNNT:CTC 与 RNNT 不要求标签与步数严格对齐,可将对比损失的reduce_ids设为true把连续相同 id 合并为单个(configs.rst 中contrastive+ctc与contrastive+rnnt示例完整给出了ConvASRDecoder/CTCLossForSSL与RNNTDecoderJointSSL/RNNTLossForSSL的配置)。
多中间层 MLM:利用output_from_layer+transpose_encoded,可以从编码器第 6、12 层及最后一层分别接入 MLM 损失,实现多层级监督(对应 configs.rst 中的mlm、mlm_2(layers.5)、mlm_3(layers.11)示例),这正是AccessMixin与loss_list协同工作的典型场景。
检查点加载与下游微调
results.rst 给出了完整的加载路径:
加载本地.nemo检查点:
import nemo.collections.asr as nemo_asr ssl_model = nemo_asr.models.ASRModel.restore_from(restore_path="<path/to/checkpoint/file.nemo>")从 NGC 下载预训练模型(SpeechEncDecSelfSupervisedModel.list_available_models()列出的ssl_en_conformer_large/ssl_en_conformer_xlarge):
ssl_model = nemo_asr.models.ASRModel.from_pretrained(model_name="ssl_en_conformer_large")也可从具体模型类调用from_pretrained(如SpeechEncDecSelfSupervisedModel)以访问特定模型功能;用list_available_models()可编程列出某基类下全部可用模型。
把 SSL 权重迁移到下游模型(微调的核心步骤):
# 定义下游模型(以 RNNT-BPE 为例) asr_model = nemo_asr.models.EncDecRNNTBPEModel(cfg=cfg.model, trainer=trainer) # 加载 SSL 检查点并复制 state_dict(strict=False 丢弃 SSL 专用 decoder/loss 权重) asr_model.load_state_dict(ssl_model.state_dict(), strict=False) del ssl_modelSSL 阶段使用的 decoder 与损失在下游微调时被替换为任务相关模块,只有 encoder 被保留——这正是 models.rst 强调的设计。训练脚本中的maybe_init_from_pretrained_checkpoint(cfg)也可以自动完成这一初始化。若将 NEST 作为多层级特征提取器用于下游分类,参考 downstream/speech_classification_mfa_train.py(配置examples/asr/conf/ssl/nest/multi_layer_feat/下的nest_ecapa_tdnn_small.yaml、nest_titanet_small.yaml),或在 scripts/ssl/extract_features.py 中直接抽取多层级特征。
小结
NeMo SSL 集合的 API 设计体现了清晰的分层思想:
SpeechEncDecSelfSupervisedModel提供通用的"预处理器 + 编码器 + 多损失解码器"框架,loss_list使其能灵活组合对比、MLM、CTC、RNNT 等损失,适配 Wav2Vec-BERT 等对比/重建式预训练;EncDecDenoiseMaskedTokenPredModel(含其父类EncDecMaskedTokenPredModel)实现 NEST 风格的"去噪 + 掩码 token 预测",通过AudioNoiseBatch同时建模干净语音、噪声与加噪语音;ASRModuleMixin提供注意力切换、SE context window 调整等模块级能力;AccessMixin提供中间层张量注册与访问,支撑多层级损失与特征提取。
理解这四个 API 符号,就抓住了 NeMo SSL 集合的骨架——无论你是要复现预训练、把 SSL encoder 迁移到 ASR/说话人任务,还是要基于 NEST 抽取多层级特征,都可以在 ssl_models.py、configs.rst 与 examples/asr/speech_pretraining 的配合下快速落地。
【免费下载链接】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),仅供参考