拓冰建站拓冰建站
首页 / 资讯中心 / 正文

FunASR SOND 数据预处理链路:把会议混音变成“谁在说话“的时间轴

FunASR SOND 数据预处理链路把会议混音变成谁在说话的时间轴【免费下载链接】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 的 SOND 说话人日志Speaker Diarization模型你要的不是文字稿而是一条时间轴每一时刻是谁在说、重叠处又是谁在同时说。在这段混音波形和这条时间轴之间发生的就是本文要拆的 SOND 数据预处理与前端处理链路。顺便解释一下说话人日志它像一位会议秘书不只记录说了什么还要记下是谁说的。这条链路要解决的三个真实问题抢话。传统做法是先切段、再判人但重叠语音连切段这一步都做不到——两个人同时出声的片段没法归给任何一个人。SOND 直接从混音波形逐帧输出说话人组合前提是特征里必须保留所有说话人的信息前端不能只听清一个人。长录音、杂来源。仓库模型表里 SOND 中文版用 AliMeeting 120 小时数据训练不同房间、麦克风、距离、音量各不相同。同一段你好在这台设备上能量高、那台设备上能量低特征分布对不齐模型就没法学会稳定的判别规律。已知参会者。SOND 除了音频还接收一段说话人画像profile即已知说话人的声纹嵌入。模型用当前声音和画像的相似度辅助判断这意味着同一条链路要同时服务音频特征和嵌入向量两边的口径必须一致。全流程鸟瞰波形进来谁在说出去整条链路五个环节前端提特征 → 训练时做数据增强 → utterance 级归一化 → 编码器与说话人嵌入对齐打分 → 解码出逐帧说话人组合。注意三个环节增强、画像扰动、说话人顺序打乱只在训练时生效推理时是裸链路。下面按数据流动顺序四步拆完。第一步把混音变成 23 维 Mel 特征编码器不吃波形吃矩阵。FunASR 的 EEND/SOND 系列常配 WavFrontendMel23librosa 分帧做 STFT过 23 带 Mel 滤波器组取 log10 能量。Mel 刻度模拟人耳对频率的敏感度不均对低频更敏感、对高频更迟钝可以理解为按这个心理刻度画出的频谱热力图。参数默认值为什么这么设窗长1024 采样点128ms 8kHz太短频率分辨率不够太长会把两个人的声音切换抹糊帧移256 采样点32ms帧间 75% 重叠时间分辨率和算力各让一步Mel 带数23判别谁在说不需要 80 维那么细维度省编码快特征形式log10 能量 按维减去整句均值音量差异在这里先被压平一轮等于免费的粗归一化之后可选做帧拼接再降采样lfr_m/lfr_n默认 1 即不做来压缩时间轴。易错点eend_ola_feature.py 的 Mel 计算是按 8kHz 写的对应英文 CallHome 版模型中文 AliMeeting 版是 16k——采样率必须跟模型名对齐别拿 16k 音频直接进 8k 前端。第二步训练时随机破坏特征——SpecAug 三件套120 小时的语料终究有限。SpecAugment 的思路是故意把频谱图局部涂掉、扭曲像把练习册故意涂花着练逼模型不依赖某一片频率或某一刻的细节。实现在 funasr/models/specaug/作用于上一步的 23 维特征变换默认参数模拟什么时间扭曲window5 帧bicubic 插值说话快慢不一总帧数 ≤ 2×window 时自动跳过防止短音频被扭曲过头频率掩码2 条每条宽 0~20 带信道/麦克风造成的频带缺失时间掩码2 条声音短暂被遮挡、断断续续说话人画像那一侧另有 profileaug 扰动同样只在训练时生效。易错点推理时 SpecAug 会被self.training自动门控跳过不用手动关但 CUDA 上时间扭曲的插值不可复现如果你在对比两次运行的差异先把apply_time_warp关掉再排查。第三步utterance 级归一化把不同录音拉到同一基线前端已经按维减过一次均值UtteranceMVN 再补一刀更严格的对每条语音的有效帧求均值并减去把这句整体响/闷的直流偏移消掉让不同录音的特征落在同一水平线上。参数默认值改了会怎样norm_meansTrue关掉后句间能量差异重新进入特征判别边界变飘norm_varsFalse故意只减均值不除方差——相对响度对谁在说本身有信息量除掉反而丢线索eps1e-20防止除零实际很少触发易错点链路里顺序是先增强、后归一化。如果反过来先归一化再打掩码掩掉的区域会拉偏统计量等于自己给自己埋噪声。另外归一化求均值时会自动屏蔽零填充帧batch 里长短不一的音频不会被 padding 拖累。第四步重叠语音怎么变成标签——幂集编码上一步产出的是特征监督信号这边也要改造。普通分类标签这一帧是 A无法表达A、B 同时在说SOND 用 PSEPower-Set Encoding每个说话人对应二进制的一位——1 号说话人是 2^02 号是 2^1A、B 同时在说就是对应位相加得到一个整数。代码里直接生成 2^0~2^15 的幂次权重表与 0/1 帧标签相乘求和即可。参数默认值为什么这么设max_spk_num16PSE 的词表是 2^16 种组合上限必须 ≥ 实际可能同时说话的人数小了会丢标签大了分类头输出爆炸长度容差±2 帧编码器卷积下采样后输出会比标签短一截代码允许差 2 帧并截断对齐再长就对齐不住了易错点训练时还会对说话人做在线顺序打乱profile 和标签同步随机置换防止模型记住1 号说话人总坐左边这类位置偏见。复现训练日志里的 DER 时这个打乱本身不可复现属正常现象。训练 vs 推理链路上的开关在哪环节训练推理23 维 Mel 前端开开SpecAug 三件套开每次前向随机跳过self.training门控画像增强 / 说话人顺序打乱开关Utterance 归一化开开freeze_encoder可选微调时冻住编码器—输出PSE logits DER 分量漏检/虚警/混淆logits取 argmax 还原说话人组合解码侧还会把逐帧预测展开成 0/1 矩阵分别统计说话人漏检、虚警、混淆合成 DER——训练时这些分量直接进 stats 日志调参时比总 DER 更有诊断价值。上手清单跑之前确认六件事⚠️ 先核对采样率与模型一致英文 CallHome 版 8k中文 AliMeeting 版 16k前端口径跟着模型走。训练保持 SpecAug 默认全开怀疑结果不可复现时先关时间扭曲再查别处。推理不用手动关增强门控自动生效确认max_spk_num≥ 你预期同时说话的人数。标签和预测长度差 1~2 帧属卷积下采样正常现象超过 2 帧再排查配置。微调预训练 SOND 时考虑freeze_encoderTrue只训打分头和解码器省算力也防过拟合。看日志别只盯总 DERsad_mr漏检、mi/fa/cf 分量各管一段分别定位问题。延伸资源SOND 主模型与 PSE/DER 实现funasr/models/sond/23 维 Mel 前端与流式前端funasr/frontends/wav_frontend.pySpecAug 模块时间扭曲/双掩码funasr/models/specaug/SOND 中英文模型卡片参数规模、训练数据model_zoo/modelscope_models_zh.md下一步建议挑一段含重叠语音的短录音分别用训练态开增强和推理态各跑一遍前端打印两次的特征 shape 和均值你会直观看到增强与归一化各自改变了什么。【免费下载链接】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),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门