用语音活动检测切分音频,一句话被切成三四段,转写出来断断续续,标点也乱了。
一开始怀疑是「最短语音段限制过大,句首句尾被裁」,查了一圈,方向不对。
把日志和配置对完,能解释这个现象的基本就这几处。静音阈值过高,正常停顿被当成静音。少数情况下是最小静音时长设得太短。
还有一种情况,背景噪声让检测结果抖动。
动手时先把阈值调整到合适区间
python -c "print(vad.threshold)"
延长判静音所需的最小时长
python -c "print('min_silence_ms=800')"
保留句首句尾的缓冲时间
python -c "print('speech_pad_ms=200')"
末了对噪声做一次降噪后重跑
ffmpeg -i a.wav -af afftdn -ar 16000 denoise.wav
同事提醒我看一下最近一次发布,时间点确实对得上。
恢复的判定其实很直接。切分后的片段以完整句子为单位,转写结果连贯,标点位置合理。
判静音时长过短会把换气声也当成分段点,宁可切得粗一点让模型自己断句,也不要切得太碎。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。