
FunASR SOND 模型数据预处理完整解析重叠语音场景 4 个概念块 参数速查表【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR你在会议录音里遇到过这种时刻吗两个人同时开口转录结果变成谁说了什么完全说不清。FunASR 里的 SONDSpeaker Overlap-aware Neural Diarization感知说话人重叠的神经说话人日志模型就是干这个的把一段多人语音逐帧切成此刻有哪些人、各自在说什么多人重叠时也不糊成一团。它的表现很大程度上取决于预处理把特征做得多干净下面按 4 个概念块把它讲透。一图看懂 SOND 数据预处理全貌预处理不是加载→特征→增强一条直线而是四条并行的数据流语音特征、说话人画像、重叠标签、增强分支。概念块一把任意来源的音频对齐成同一口径模型不认识设备差异只认识统一后的数字。这个块负责三件事全部由 WavFrontend 完成采样率锁定 16kHz数据列表用 Kaldi 风格的wav.scp见 data/list/管理音频路径与 ID非 16kHz 的音频要先重采样否则后面的窗长计算全部错位。波形幅度放大WavFrontend.forward里会把波形乘以115把浮点 [-1,1] 波形还原成 16bit PCM 量级再提特征与 Kaldi 的 fbank 口径对齐——这是很多自己写的前端和官方结果对不上问题的根源。fbank 一步出梅尔特征窗长 25ms、窗移 10ms、80 个梅尔滤波器、hamming 窗。窗长/窗移决定时间分辨率10ms 一帧梅尔维数决定频率分辨率80 维。frontend WavFrontend(fs16000, n_mels80, frame_length25, frame_shift10) # 官方默认口径概念块二归一化与降帧——让特征长得像训练集特征提出来之后还有两步调分布的操作配置在 wav_frontend.py 的cmvn_file和lfr_m/lfr_nCMVN 均值方差归一化用训练集统计出的均值/方差文件cmvn_file把每条音频的每个梅尔维度拉到同一分布。注意它是全局统计而非逐句统计所以推理时缺这个文件结果会明显漂移。LFR 低帧率拼接lfr_m/lfr_n把相邻 m 帧拼成宽特征再每 n 帧取一帧用更少的帧数覆盖更宽的上下文。SOND 默认 1/1不生效但 Paraformer 系模型常用它来压缩序列长度。这两步是为什么训练好、推理翻车这类问题最常见的排查点训练时开了推理时漏了。概念块三读懂重叠——SOND 区别于普通 ASR 的地方 普通说话人日志把每一帧标成第 1 人 / 第 2 人 / 静音遇到两人同说就错了。DiarSondModel 的做法是给每一帧标一个组合PSE 幂集编码把此刻活跃的说话人集合编码成一个整数码1 号3 号同时说话 2^1 2^3解码器直接预测这个码字重叠帧天然可表示。max_spk_num16定义了支持的最大说话人数决定编码空间大小。说话人画像分支除了语音本身模型还吃一份 profile每位说话人的参考特征向量经过说话人编码器和两个打分器——cico-occurrence inter两两重叠打分和 cdco-occurrence diagonal单人打分——给谁和谁重叠提供独立证据。标签侧对齐卷积编码器会降采样预测帧数与标签帧数对不齐时用label_aggregator聚合标签对齐训练时onfly_shuffle_speaker随机打乱说话人编号防止模型记住编号顺序而非人本身。raw_pse_labels torch.sum(pad_bin_labels * self.power_weight, dim2, keepdimTrue) # 多热标签 → 2 进制幂集码字概念块四训练专属增强——让模型见过更糟的声音SOND 的增强有两层且都只在训练时生效self.training分支内SpecAug 声学扰动对梅尔特征做三种变换代码在 funasr/models/specaug/specaug.py。时间扭曲在 5 帧窗口内随机缩放时间轴模拟语速变化GPU 上插值结果不完全可复现频率掩码盖掉 2 条宽度 0~20 的频带逼模型不依赖单一频段时间掩码盖掉 2 段静音逼模型容忍丢帧。ProfileAug 说话人混合把不同说话人的片段混音、按混音比例修正 PSE 标签直接人工制造重叠样本——这是针对重叠场景的定向增强普通 ASR 增强替代不了。关键参数速查 ⚙️参数默认值影响fs16000采样率错配会导致窗长/频率轴全部错位n_mels80梅尔维数决定频率分辨率frame_length / frame_shift25ms / 10ms时间分辨率帧数 ≈ 时长 × 100dither1.0加抖动噪声训练用推理建议设 0 保证稳定cmvn_fileNone全局均值方差归一化训练开了推理必须带上lfr_m / lfr_n1 / 1低帧率拼接1 时压缩序列长度time_warp_window5时间扭曲窗口越大扰动越强freq_mask_width_range / num_freq_mask(0, 20) / 2频率掩码宽度与条数num_time_mask2时间掩码段数max_spk_num16PSE 编码支持的最大说话人数lsm_weight0.1标签平滑系数正则化分类损失常见坑与调优建议推理时 dither 没关dither1.0是训练正则化手段推理时加噪声只会引入误差设 0 拿到确定结果。cmvn 文件训练/推理不一致推理漏掉cmvn_file会系统性偏特征分布是同一条音频训练好、上线差的头号嫌疑。SpecAug 泄漏到推理确认推理走eval()模式SOND 的增强分支都挂在self.training下但自定义前端里手写的增强要自己加开关。说话人数超过max_spk_numPSE 编码空间装不下的说话人会被截断多人会议场景按需调大该值。训练想要更强的重叠鲁棒性优先调 ProfileAug 的混音比例分布重叠段占比而不是单纯加大 SpecAug 掩码强度——掩码增强解决噪声鲁棒性混音增强才解决重叠。延伸资源整体教程docs/tutorial/README_zh.md前端与归一化实现funasr/frontends/SOND 模型源码PSE、ci/cd 打分器funasr/models/sond/SpecAug 增强实现funasr/models/specaug/specaug.py流式 VAD预处理上游常搭配funasr/models/fsmn_vad_streaming/样例数据列表格式data/list/模型下载与部署model_zoo/readme.md【免费下载链接】FunASROpen-source speech recognition toolkit for training, inference, streaming ASR, VAD, punctuation, speaker diarization pipelines, and OpenAI-compatible/MCP serving.项目地址: https://gitcode.com/GitHub_Trending/fun/FunASR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考