ARTICLE DETAIL

资讯详情

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

NeMo Speech Classification 资源导航与实践指南:从 Speech Command、VAD 到 Lang ID 的完整学习路径

NeMo Speech Classification 资源导航与实践指南:从 Speech Command、VAD 到 Lang ID 的完整学习路径 NeMo Speech Classification 资源导航与实践指南从 Speech Command、VAD 到 Lang ID 的完整学习路径【免费下载链接】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 Speech当前仓库 GitHub_Trending/nem/Speech中 Speech Classification语音分类模块的官方资源页为核心系统梳理该模块涉及的三大任务语音命令识别 / 语音活动检测 / 语种识别、配套模型MatchboxNet、MarbleNet、AmberNet、数据集预处理、配置编写与预训练模型加载方法。读完本文你将掌握在 NeMo 框架中从零开始训练、微调与推理语音分类模型所需的完整资源索引与可复现代码路径。一、Speech Classification 模块概览Speech Classification语音分类指让程序自动将输入语音片段或音频片段划分到预设类别的任务集合涵盖三大典型问题语音命令识别Speech Command RecognitionSCR将输入音频模式划分到离散类集合是自动语音识别ASR的子集常称为关键词唤醒Key Word Spotting。模型持续分析语音模式以检测特定命令类检测到命令后系统可执行对应动作。此类模型通常追求小体积、高效率以便部署在低功耗传感器上并长时间保持激活。语音活动检测Voice Activity DetectionVAD预测输入音频的哪些部分包含语音、哪些是背景噪声。它是各类语音应用包括 ASR的关键第一步用于决定哪些样本送入模型、何时关闭麦克风。口语语种识别Spoken Language IdentificationLang ID自动识别口语话语的语言类别通常作为 ASR 的前置处理根据语种决定激活哪个 ASR 模型。该模块的官方文档树完整路径位于 docs/source/asr/speech_classification/包含intro、models、datasets、results、configs、resources六个页面。本文即围绕其中的资源页resources展开并将其引用的各页面内容全部落地为可执行实践。二、动手实践首选教程 Notebook 与示例脚本资源页明确指出语音分类的动手教程 Notebook 位于仓库的tutorials/asr/目录下覆盖 Speech Command Detection 与 Voice Activity Detection 任务的训练、离线推理与在线麦克风推理。相关教程包括Speech_Commands.ipynb语音命令检测的训练、推理、微调完整讲解Online_Offline_Speech_Commands_Demo.ipynb语音命令检测的在线 / 离线麦克风演示06_Voice_Activiy_Detection.ipynbVAD 训练、推理、后处理、阈值调优Online_Offline_Microphone_VAD_Demo.ipynbVAD 的在线 / 离线麦克风演示。同时示例脚本集中在examples/asr/speech_classification/目录其中 README.md 是理解该模块当前实现的关键入口。仓库将 VAD 模型明确区分为两种类型Frame-VAD帧级 VAD对音频的每一帧预测是否包含语音。例如默认配置文件examples/asr/conf/marblenet/marblenet_3x2x64_20ms.yaml中模型对每 20ms 的帧输出一个概率。Segment-VAD片段级 VAD对每个音频片段默认 0.63 秒预测单一标签。三、支持的模型与架构解析Speech Classification 集合目前支持的模型均可在配置文件里通过指定模型架构使用模型实例化类统一为EncDecClassificationModelMatchboxNet、MarbleNet与EncDecSpeakerLabelModelAmberNet。相关配置示例位于examples/asr/conf/目录。3.1 MatchboxNet语音命令识别MatchboxNet 是端到端的语音命令识别神经网络。模型家族记号为MatchBoxNet_[BxRxC]其中Bblock块数量R每个 block 内卷积子块数量C通道数。每个子块包含一维可分离卷积1-D separable convolution、批归一化BatchNorm、ReLU 激活与 dropout。_v1/_v2后缀分别表示在 Google Speech Commands v130 类分类与 v235 类分类数据集上训练的版本_subset_task表示 (102) 类子集任务10 个具体类 其余类 静音。从 classification_results.csv 可看到仓库提供的 MatchboxNet 预训练模型列表均以EncDecClassificationModel为基类例如commandrecognition_en_matchboxnet3x1x64_v1/_v2commandrecognition_en_matchboxnet3x2x64_v1/_v2commandrecognition_en_matchboxnet3x1x64_v2_subset_task/commandrecognition_en_matchboxnet3x2x64_v2_subset_task3.2 MarbleNet语音活动检测MarbleNet 是基于 MatchboxNet 架构的端到端 VAD 神经网络家族记号与结构同 MatchboxNet一维可分离卷积 BatchNorm ReLU dropout 的子块堆叠。它在 AVA speech 等困难数据集上仍能以显著更少的参数量获得高精度表现。仓库提供的 VAD 预训练模型同样记录在 classification_results.csv 中vad_marblenetvad_telephony_marblenetvad_multilingual_marblenet多语种版也是vad_inference_postprocessing.yaml的默认模型3.3 AmberNet语种识别AmberNet 是基于 TitaNet 的端到端语种识别模型在 VoxLingua107 数据集上训练可用EncDecSpeakerLabelModel类实例化仓库提供的预训练模型名为langid_ambernet。3.4 模型架构配置要点来自 configs 文档每个配置文件需包含encoder与decoder两节并通过_target_指定具体模块Encodernemo.collections.asr.modules.ConvASREncoder输入为经过预处理器计算的 MFCC 或 Mel 频谱特征。MarbleNet-3x2x64 的编码器为 6 层 Jasper 风格堆叠首尾为 128 通道、中间 4 层为 64 通道卷积核宽度 11/13/15/17/29/1全部使用可分离卷积与残差连接首尾两层除外。Decodernemo.collections.asr.modules.ConvASRDecoderClassification旧式或nemo.collections.common.parts.MultiLayerPerceptron新式。分类解码器关键参数如下model: ... decoder: _target_: nemo.collections.asr.modules.ConvASRDecoderClassification feat_in: *enc_final_filters return_logits: true # return logits if true, else return softmax output pooling_type: avg # AdaptiveAvgPool1d avg 或 AdaptiveMaxPool1d maxreturn_logitstrue时输出 logits否则输出 softmax 概率pooling_type决定编码器输出的时间池化方式训练与推理阶段必须保持一致以保证正确性。四、数据集准备从公开数据集到自定义数据资源页将数据预处理文档指向datasets页面NeMo 为多个常见数据集提供了预处理脚本并支持构建 NeMo 兼容的自定义数据集。4.1 Google Speech Commands 数据集Google 发布过两个版本v1 约 65k 样本、30 类v2 约 110k 样本、35 类。使用scripts/dataset_processing/process_speech_commands_data.py生成nemo_asr支持的格式python process_speech_commands_data.py --data_rootdata directory --data_version1 or 2 {--rebalance}--data_root数据集目录--data_version数据集版本整数 1 或 2--rebalance可选通过随机过采样重平衡训练集。处理后会在{data_root}/google_speech_recognition_v{1/2}生成train_manifest.json、validation_manifest.json、test_manifest.json。注意 v1 / v2 分别至少需要 4GB / 6GB 磁盘空间。manifest 每行是一个训练样本{audio_filepath: absolute path to dataset/two/8aa35b0c_nohash_0.wav, duration: 1.0, label: two}4.2 Freesound 背景音频Freesound 是开放的协作式音频片段数据库。预处理脚本位于scripts/下文档中记为freesound_download_resample目录流程为安装依赖pip install -r freesound_requirements.txt含 freesound、requests、requests_oauthlib、joblib、librosa、sox在 freesound.org 开发者页面申请 API key创建freesound_private_apikey.py写入api_key your Freesound api key与client_id your Freesound client id运行python freesound_download.py --authorize完成授权调整download_resample_freesound.sh中的max_samples、max_filesize等参数执行下载与重采样bash download_resample_freesound.sh 4000 ./freesound ./freesound_resampled_background下载耗时可能达数小时完成后得到 16kHz 单声道 wav 文件可用于 VAD 训练的背景噪声数据。4.3 Speech Command FreesoundSCFVAD 数据集SCF 数据集用于训练 MarbleNet以 Google Speech Commands v2 为语音数据、Freesound 为背景数据。使用scripts/dataset_processing/process_vad_data.py处理mkdir ./google_dataset_v2 python process_vad_data.py --out_dir./manifest/ --speech_data_root./google_dataset_v2 --background_data_rootresampled freesound data directory --log --rebalance_methodfixed可选参数--test_size/--val_size划分验证集与测试集--window_length_in_sec片段/窗口长度默认 0.63 秒--rebalance_methodfixed每类固定数量训练 5000、验证 1000、测试 1000、over过采样、under欠采样。处理后manifest目录将包含(balanced_)background_*_manifest.json与(balanced_)speech_*_manifest.json分别含 training / validation / testing 三种。每条样本包含audio_filepath、duration、offset、label字段{audio_filepath: absolute path/two/8aa35b0c_nohash_0.wav, duration: 0.63, label: speech, offset: 0.0} {audio_filepath: absolute path/Emergency_vehicle/id_58368 simambulance.wav, duration: 0.63, label: background, offset: 4.0}4.4 VoxLingua107语种识别数据集VoxLingua107 是从 YouTube 视频自动抽取的短语音片段数据集覆盖 107 种语言训练集共约 6628 小时平均每种语言约 62 小时但类别极不平衡另有独立评估集1609 段、33 种语言、经至少两名志愿者校验。其 manifest 样例如下{audio_filepath: absolute path/ln/lFpWXQYseo4__U__S113---0400.650-0410.420.wav, offset: 0, duration: 3.0, label: ln}4.5 自定义语音分类数据与 Tarred 数据集自定义语音分类数据的准备方式与自定义 ASR 数据几乎一致唯一区别是manifest 中不再使用text字段而是使用label字段标记样本类别。若数据规模庞大可参照 ASR 的 Tarred 方案使用TarredAudioToClassificationLabelDataset对应非 tarred 的AudioToClassificationLabelDataset对音频打包训练。五、配置文件编写数据集、预处理器、增强与架构资源页将配置文档指向configs页面。Speech Classification 的配置中数据集参数通过train_ds、validation_ds、test_ds三节指定预处理器负责计算 MFCC / Mel 频谱特征增强通过augmentor与spec_augment配置。5.1 训练 / 验证配置示例以下为文档给出的 Speech Classification 训练与验证配置骨架以语音命令识别为例model: sample_rate: 16000 repeat: 2 # 每个 block 内卷积子块数量即 MODEL_[BxRxC] 中的 R dropout: 0.0 kernel_size_factor: 1.0 labels: [bed, bird, cat, dog, down, eight, five, four, go, happy, house, left, marvin, nine, no, off, on, one, right, seven, sheila, six, stop, three, tree, two, up, wow, yes, zero] train_ds: manifest_filepath: ??? sample_rate: ${model.sample_rate} labels: ${model.labels} # 复用上方 labels batch_size: 128 shuffle: True validation_ds: manifest_filepath: ??? sample_rate: ${model.sample_rate} labels: ${model.labels} batch_size: 128 shuffle: False # 验证集无需打乱manifest_filepath可留空、在运行时通过命令行传入。???表示 Hydra 必填占位符。任何 Dataset 类的初始化参数均可写入配置节。5.2 真实 MarbleNet-3x2x6420ms 帧配置要点仓库中examples/asr/conf/marblenet/marblenet_3x2x64_20ms.yaml是 Frame-VAD 的完整可运行配置关键参数如下音频与标签sample_rate: 16000VAD 标签为[0, 1]0 非语音1 语音预处理器AudioToMelSpectrogramPreprocessor80 维 Mel 特征features: 80窗口 25ms、步长 10ms、hann 窗、n_fft: 512normalize: None、dither: 0.00001SpecAugmentSpectrogramAugmentationfreq_masks: 2、time_masks: 10设为 0 可禁用增强augmentorwhite_noiseprob 0.9-90~-46 dB、gainprob 0.5±10 dBFS、noiseprob 0.6SNR 0~20 dBmanifest_path: ???需提供噪声 manifestEncoderConvASREncoder输入 80 维 Mel6 层结构filters 128/64/64/64/64/128separable: trueDecodernemo.collections.common.parts.MultiLayerPerceptronhidden_size: 128、num_classes: -1运行时按标签数推断、num_layers: 1优化器SGDlr 0.01weight_decay 0.001momentum 0.9调度器PolynomialHoldDecayAnnealingpower 2.0、warmup_ratio 0.05、hold_ratio 0.45、min_lr 0.001Trainerdevices: -1、max_epochs: 100、strategy: ddp、benchmark: false变长语音输入必须关闭exp_managercheckpoint 监控val_acc_macromaxsave_top_k: 3always_save_nemo: true直接保存.nemo格式resume_if_exists: true。5.3 微调执行流程顺序编写训练或微调脚本时务必按照文档给出的执行流程顺序操作以保证推理正确性Speech Classification 模型的具体步骤可参考examples/asr/speech_classification/README.md训练 → 推理 → 后处理 → 可视化。六、训练与推理实战6.1 Frame-VAD 训练使用examples/asr/speech_classification/speech_to_frame_label.pypython speech_to_frame_label.py \ --config-path../conf/marblenet \ --config-namemarblenet_3x2x64_20ms \ model.train_ds.manifest_filepath[path to train manifest1,path to train manifest2] \ model.validation_ds.manifest_filepath[path to val manifest1,path to val manifest2] \ trainer.devices-1 \ trainer.acceleratorgpu \ strategyddp \ trainer.max_epochs100Frame-VAD 的 manifest 每行包含audio_filepath、offset、duration、label四字段其中label是帧级标签字符串空格分隔的 0/1 序列{audio_filepath: /path/to/audio_file1, offset: 0, duration: 10000, label: 0 1 0 0 1}例如 1 秒音频需要 50 个帧标签20ms/帧。若以 40ms 帧准备标签模型会自动将标签重复到每个 20ms 帧。6.2 Segment-VAD 训练使用examples/asr/speech_classification/speech_to_label.pypython speech_to_label.py \ --config-path../conf/marblenet \ --config-namemarblenet_3x2x64 \ model.train_ds.manifest_filepath[path to train manifest1,path to train manifest2] \ model.validation_ds.manifest_filepath[path to val manifest1,path to val manifest2] \ trainer.devices-1 \ trainer.acceleratorgpu \ strategyddp \ trainer.max_epochs100Segment-VAD manifest 的label是单一类别值{audio_filepath: /path/to/audio_file1, offset: 0, duration: 0.63, label: 0} {audio_filepath: /path/to/audio_file2, offset: 0, duration: 0.63, label: 1}6.3 推理与评估Segment-VAD 推理examples/asr/speech_classification/vad_infer.pypython vad_infer.py \ --config-path../conf/vad \ --config-namevad_inference_postprocessing.yaml \ datasetPath of json file of evaluation dataFrame-VAD 推理examples/asr/speech_classification/frame_vad_infer.pypython frame_vad_infer.py \ --config-path../conf/vad --config-nameframe_vad_infer_postprocess \ datasetPath of manifest file containing evaluation data推理 manifest 每行仅需audio_filepath、offset、duration音频文件名须唯一。如需评估 AUROC 与 DER 指标在配置中设置evaluate: True并在 manifest 中提供帧级label字符串或rttm_filepath{audio_filepath: /path/to/audio_file1.wav, offset: 0, duration: 10000, label: 0 1 0 0 0 1 1 1 0}6.4 VAD 后处理与阈值调优examples/asr/conf/vad/vad_inference_postprocessing.yaml完整定义了 VAD 推理后处理链路前置准备prepare_manifest.auto_split: True按split_duration: 400秒自动切分长音频避免 CUDA 显存溢出仍有 OOM 时调小该值滑动窗口预测window_length_in_sec: 0.63为 VAD 上下文窗口长度shift_length_in_sec: 0.08为帧级预测的滑动步长Posterior 平滑smoothing: False可选median/meanoverlap: 0.875为重叠平滑滤波器比例Binarization二值化onset/offset阈值检测语音起止pad_onset/pad_offset为每个语音段前后填充时长Filtering过滤min_duration_on删除过短语音段min_duration_off删除过短静音段filter_speech_first: True控制先执行短语音段删除输出控制gen_seg_table: True将帧级预测转为起止时间格式的语音段write_to_manifest: True写入 manifest默认输出vad_out.json帧级输出目录vad_frame。该配置文件默认加载vad_multilingual_marblenet预训练模型其参数注释说明阈值是基于 0~20dB SNR 噪声与干净多语种 ASR 数据调优的。进一步的 posterior 处理、后处理与阈值调优细节可参考scripts/voice_activity_detection/目录下的脚本如vad_overlap_posterior.py、vad_tune_threshold.py。6.5 VAD 结果可视化使用nemo.collections.asr.parts.utils.vad_utils.plot_sample_from_rttm可视化音频波形与 VAD 标签from nemo.collections.asr.parts.utils.vad_utils import plot_sample_from_rttm plot_sample_from_rttm( audio_file/path/to/audio_file.wav, rttm_file/path/to/rttm_file.rttm, offset0.0, duration1000, save_pathvad_pred.png )VAD 推理脚本默认输出的manifest_vad_out.json可转换为 RTTM 后直接用于此可视化。七、预训练模型加载与推理资源页将 checkpoint 相关说明指向results页面该页面详细介绍了两种加载方式。7.1 两种加载方式本地.nemo文件训练过程中 NeMo 会自动以.nemo格式保存 checkpoint也可随时用model.save_to(checkpoint_path.nemo)手动保存。加载使用restore_from()import nemo.collections.asr as nemo_asr model nemo_asr.models.MODEL_BASE_CLASS.restore_from(restore_pathpath/to/checkpoint/file.nemo)NGC 预训练模型使用from_pretrained()下载并加载import nemo.collections.asr as nemo_asr model nemo_asr.models.EncDecClassificationModel.from_pretrained(model_nameMODEL_NAME)例如加载 MatchboxNet3x2x64_v1 语音命令模型model nemo_asr.models.EncDecClassificationModel.from_pretrained(model_namecommandrecognition_en_matchboxnet3x2x64_v1)用list_available_models()可程序化列出某基类下可用的全部模型nemo_asr.models.MODEL_BASE_CLASS.list_available_models()注意上述说明针对已训练完成的模型的评估与微调若要恢复未完成的训练实验应通过实验管理器exp_manager设置resume_if_exists: True见 marblenet_3x2x64_20ms.yaml 中默认已开启。7.2 各任务推理示例语音命令识别——加载模型后调用transcribe()音频需为 16kHz 单声道 wavmbn_model nemo_asr.models.EncDecClassificationModel.from_pretrained(model_nameMODEL_NAME) mbn_model.transcribe([list of audio files], batch_sizeBATCH_SIZE, logprobsFalse)将logprobs设为True可返回对数概率而非转录结果。VAD 推理——命令行方式运行等价于 6.3 节的 Segment-VAD 推理命令python NeMo-git-root/examples/asr/speech_classification/vad_infer.py \ --config-path../conf/vad --config-namevad_inference_postprocessing.yaml \ datasetPath of json file of evaluation data语种识别——使用get_label()判断单个音频文件的语种langid_model nemo_asr.models.EncDecSpeakerLabelModel.from_pretrained(model_nameMODEL_NAME) lang langid_model.get_label(audio_path)或使用batch_inference()对 manifest 批量推理返回语言嵌入、logits、真实标签与预测标签langid_model nemo_asr.models.EncDecSpeakerLabelModel.from_pretrained(model_nameMODEL_NAME) lang_embs, logits, gt_labels, trained_labels langid_model.batch_inference(manifest_filepath, batch_size32)7.3 可用预训练模型一览根据 classification_results.csvSpeech Classification 模块当前提供的 NGC 预训练模型如下模型名称模型基类任务langid_ambernetEncDecSpeakerLabelModel语种识别vad_multilingual_marblenetEncDecClassificationModel多语种 VADvad_marblenetEncDecClassificationModelVADvad_telephony_marblenetEncDecClassificationModel电话语音 VADcommandrecognition_en_matchboxnet3x1x64_v1EncDecClassificationModel语音命令v1commandrecognition_en_matchboxnet3x2x64_v1EncDecClassificationModel语音命令v1commandrecognition_en_matchboxnet3x1x64_v2EncDecClassificationModel语音命令v2commandrecognition_en_matchboxnet3x2x64_v2EncDecClassificationModel语音命令v2commandrecognition_en_matchboxnet3x1x64_v2_subset_taskEncDecClassificationModel语音命令v2 子集任务commandrecognition_en_matchboxnet3x2x64_v2_subset_taskEncDecClassificationModel语音命令v2 子集任务八、资源速查索引按资源页指引Speech Classification 模块的学习资源可归纳为以下路径便于按需深入动手教程tutorials/asr/ 下的 Speech Commands 与 VAD 系列 Notebook示例脚本与说明examples/asr/speech_classification/README.md 及同目录speech_to_label.py、speech_to_frame_label.py、vad_infer.py、frame_vad_infer.py模型配置examples/asr/conf/marblenet/MarbleNet-3x2x64 与 20ms 帧版、examples/asr/conf/vad/推理后处理配置、examples/asr/conf/lang_id/语种识别参考配置数据集处理脚本scripts/dataset_processing/process_speech_commands_data.py、scripts/dataset_processing/process_vad_data.pyVAD 后处理与阈值调优scripts/voice_activity_detection/模型与检查点清单docs/source/asr/speech_classification/models.rst、results.rst、classification_results.csv配置说明docs/source/asr/speech_classification/configs.rst数据集说明docs/source/asr/speech_classification/datasets.rst。以上教程 Notebook 大多可借助 Google Colab 直接运行将 Notebook 的 GitHub 页面链接填入 Colab 即可。整体而言NeMo Speech Classification 模块提供了一条模型 → 数据 → 配置 → 训练/推理 → 后处理完整闭环的学习与实践链路开发者可按需从任意环节切入快速落地语音命令识别、语音活动检测与语种识别三类任务。【免费下载链接】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),仅供参考
返回列表