ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

静音录音被识别成乱码?OpenSuperWhisper如何用Silero VAD门控彻底消除Whisper幻觉

静音录音被识别成乱码?OpenSuperWhisper如何用Silero VAD门控彻底消除Whisper幻觉 静音录音被识别成乱码OpenSuperWhisper如何用Silero VAD门控彻底消除Whisper幻觉【免费下载链接】OpenSuperWhispermacOS dictation app项目地址: https://gitcode.com/gh_mirrors/op/OpenSuperWhisper如果你用过基于 Whisper 的 macOS 语音输入工具大概率遇到过这种糟心场景按了快捷键却忘了说话或者录音里夹着一段长静音结果转录出来的是一串莫名其妙的重复文字。这就是典型的Whisper 幻觉。OpenSuperWhisper 这款 macOS 本地语音转文字应用的解法很直接在音频进入 Whisper 解码器之前先用Silero VAD做一道门控让模型根本看不见任何静音。本文将带你拆解这套机制。什么是 Whisper 幻觉为什么静音最危险Whisper 是一个语言模型优先的语音模型它倾向于永远输出点什么。当输入是纯噪声或长时间静默时解码器会脑补出一段看似通顺、实则无中生有的文本——常见症状包括重复短语死循环比如连续十几句 Thanks for watching把键盘声、风扇底噪识别成外语单词一句话中间插入凭空出现的标点或人名对普通转录来说只是有点烦对**语音输入Dictation**场景则是灾难——幻觉文字会直接插进你的光标位置污染你正在写的文档。OpenSuperWhisper 的选择VAD 门控而非事后补救市面上处理幻觉的常见思路有两类一是在解码参数上做文章比如调no_speech_threshold二是转录完再用正则清洗文本。OpenSuperWhisper 选择了更彻底的方案——在 WhisperEngine.swift 中随应用捆绑了 Silero VAD 模型文件 ggml-silero-v5.1.2.bin并明确注释了设计意图语音检测器始终用于在编码器之前丢弃非语音音频更快且静音不会产生幻觉VADVoice Activity Detection语音活动检测是一个轻量级神经网络专门回答一个问题这段音频里到底有没有人在说话它的推理成本远低于 Whisper 本身却能拦下 99% 的无中生有。相关封装代码在 Whis.swift 中MyWhisperVadContext负责加载 Silero 模型WhisperVadSegment则以**百分之一秒centisecond**为精度描述每段语音的起止位置。三步拆解一条录音如何被净化OpenSuperWhisper 的 VAD 门控流程在 WhisperEngine.swift 中实现共三步第 1 步统一转为 16 kHz 单声道 PCM无论你的录音是 AAC、FLAC 还是 m4aconvertAudioToPCM都会先统一解码成 16 kHz 浮点采样流——这正是 Whisper 与 Silero VAD 的原生输入格式长音频还会自动多核并行转换。第 2 步VAD 扫描没有语音直接返回空字符串detectSpeech(in:)调用 Silero 模型得到语音片段列表。如果列表为空函数直接返回——解码器一个字都不用算零幻觉、零等待。这正是按了快捷键却没说话时不再出现乱码的关键。第 3 步拼接只含语音的音频这是最巧妙的部分见 speechOnlySamples。它并不是简单地把语音段粗暴剪接而是模拟了上游 whisper.cpp 官方 VAD 路径的缝合策略拼接参数取值作用采样精度160 样本 / 百毫秒16 kHz与 VAD 片段精度对齐段尾重叠0.1 秒避免切断词尾发音段间间隙0.1 秒静默让解码器仍感知到自然停顿保留 0.1 秒的呼吸间隙很重要纯硬拼接会让两个词黏连在一起反而制造新的识别错误。另外有一个细节值得注意当用户开启时间戳显示时不裁剪原始音频因为裁剪后的时间轴会和原文件对不上号见 WhisperEngine.swift 的注释——VAD 扫描依然执行只是静音段由 Whisper 自身的no_speech_threshold兜底。双保险空转录用丢弃兜底即便 VAD 判定有语音Whisper 仍可能因噪声输出空串或乱码。OpenSuperWhisper 在 TranscriptionQueue.swift 加了一道保险shouldDiscardEmptyDictation会识别来源是临时录音目录 转录结果为空的组合直接把这条记录丢弃不入库、不写入剪贴板。对应的行为契约由单元测试固定见 EmptyDictationDiscardTests.swift语音输入产生的空文本 → 丢弃导入文件产生的空文本 → 保留用户明确想转的文件空也是结果非空文本 → 一律保留进阶设置手动微调静音容忍度除了自动门控Settings.swift 还暴露了两个与静音直接相关的参数默认值定义在 AppPreferences.swiftSuppress blank audio抑制空白音频默认开启让 Whisper 解码器主动压低空气声的权重No-speech threshold无语音阈值默认 0.6取值 0.01.0可在设置页用滑块调节——阈值越高模型越激进地判定这里没说话小结为什么这套方案值得借鉴OpenSuperWhisper 的处理可以概括为一句话把幻觉挡在解码器门口而不是清理它的产物。✅ 静音不再产出乱码VAD 空判直接短路还省了计算时间✅ 0.1 秒重叠 0.1 秒间隙的缝合策略保住了自然停顿✅ 空转录用丢弃临时录音兜底语音输入体验干净无副作用✅ 时间戳模式自动降级为参数兜底功能间不打架如果你也在用 Whisper 做语音输入或会议转录遇到静音变乱码时不妨检查一下自己的流程里是否缺了这道 VAD 门控。【免费下载链接】OpenSuperWhispermacOS dictation app项目地址: https://gitcode.com/gh_mirrors/op/OpenSuperWhisper创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表