幻觉
更新于
定义
在语音识别中,幻觉是指模型生成了没有人说过的文字:从静音、噪音或短到无法转写的片段中,编造出看似合理的短语。它是插入错误的极端形式。
每个语音模型都被训练成要生成文字,所以给它没有语音的音频时,它仍会尝试。像Whisper这样的批量模型就是众所周知的例子:给它几秒钟的环境底噪,它有时会输出“Thank you for watching”或另一种语言的一整句话,因为这些字符串在训练数据中常出现在录音结尾。输出很流畅,却错得信心十足。
同一个词也用来形容编造事实的语言模型,两者的机制也相关:一个被优化为生成可能输出的系统,无论输入是否支持,都会生成那样的输出。在听写工具中,幻觉意味着你从没说过的文字出现在你的文稿中。
什么时候会发生
录音开头或结尾的静音,这也是松开按键时的录音截取和语音活动检测之所以重要的原因。非常短的话语,比如一个词或一声咳嗽,模型几乎没有可依据的内容。来自视频或同事的背景语音,那是真实的语音,但不是你的。长录音,有些模型会在其中迷失位置,重复一段内容。每一种都有已知的缓解办法,而没有采用这些办法的工具,迟早会让你吃惊。
好的工具如何防止幻觉
先运行语音活动检测器,绝不把非语音内容发送给识别器。裁掉两端的静音。丢弃短于最小长度的片段的结果。留意模型在没有对应音频能量时输出的文字,并将其丢弃。在格式化这一侧,拒绝任何加入了转写文本中没有的实词的改写,这样格式化模型也无法产生幻觉。做到了所有这些的工具,偶尔仍会听错你的话,但它绝不应该编造出一句话。
如何在命令行中减少Whisper的幻觉
如果你用开源的Whisper命令行工具处理录音时,它编造或重复文字,这个工具有专门针对这种情况的文档化选项。它们不能消除问题,但能应对两种常见形式:在静音中编造的文字,以及循环重复的段落。
Whisper的作者把这些检查描述为针对噪声预测的权宜之计,而不是根治办法,所以更改之后,请对照音频检查结果。
- 打开“终端”,先用默认设置运行一次文件,例如:whisper recording.wav --model turbo。记下编造或重复的文字出现在哪里。
- 如果某个段落重复出现,请加上--condition_on_previous_text False再运行一次。文档称,这可能让各窗口之间的文字连贯性变差,但模型不太容易陷入失败循环。
- 如果文字出现在静音处,请加上--word_timestamps True --hallucination_silence_threshold 2。开启词级时间戳后,当检测到可能的幻觉时,这会跳过长于给定秒数的静音段。
- 除非你有理由更改,否则请让--no_speech_threshold保持默认值0.6,让--logprob_threshold保持默认值-1.0。它们共同决定一个分段何时被视为静音。
- 在任意音频编辑器中剪掉录音开头和结尾的长时间静音,然后再运行一次,让模型要处理的非语音内容更少。
- 在第一步记下的位置,把新的转写文本与音频进行对照。
幻觉与听错:如何区分
听错是在你说了另一个词的位置出现了一个错误的词。它听起来像你说的话,你也能看出模型为什么选了它。幻觉在音频中完全没有来源。Whisper论文把极端情况描述为与实际音频完全无关的转写文本。
这个区别很重要,因为解决办法不同。听错可以通过更好的麦克风、更清晰的发音或一个词典条目来改善。幻觉则要通过让模型远离静音和噪声,或者拒绝模型自己也没把握的输出来预防。
- 在你沉默或已经停止说话的地方出现的文字,是幻觉。
- 同一个短语或句子连续重复好几次,是重复循环,Whisper论文把它列为与幻觉不同的另一种失败。
- 听起来像正确词的错误词,是听错。
- 录音开头或结尾的几个词丢失,是Whisper论文提到的第三种失败,它属于删除,而不是幻觉。
Whisper如何判断自己的输出失败了
开源的Whisper代码会在解码每个30秒窗口后进行检查。如果生成的词元的平均对数概率低于-1.0,或者文本的gzip压缩比高于2.4,该窗口就被视为失败,并以更高的温度重新解码。高度重复的文本很容易压缩,所以压缩比能发现循环。
对于静音,论文指出,仅靠无语音token的概率不足以检测出没有语音的窗口。把0.6的无语音阈值与-1的对数概率阈值结合起来,检测会更可靠。模型卡仍把幻觉和重复文本列为已知的局限。
大家常问的问题。
为什么我的听写App写出了我从没说过的话?
最可能的原因是,识别器收到了没有语音的音频,比如录音结尾的静音或一个非常短的片段,却仍然生成了一个看似合理的短语。这是批量模型的已知行为,可以通过语音活动检测和裁剪静音来避免。
格式化步骤也会产生幻觉吗?
会,如果它是一个随意改写你转写文本的语言模型。保护措施是一条规则:输出可以去掉语气词、修正标点,但绝不能加入你没说过的实词;违反这条规则的改写会被丢弃。
为什么Whisper会一遍又一遍地重复同一句话?
Whisper模型卡称,它的序列到序列架构使其容易生成重复的文本。在开源命令行工具中,设置--condition_on_previous_text False可以让模型不太容易陷入这样的循环。
更大的Whisper模型能杜绝幻觉吗?
不能可靠地杜绝。Whisper论文称,更大的模型在感知错误上稳步改善,例如混淆读音相似的词,但重复循环和幻觉更顽固,属于解码问题。
幻觉和转写错误是一回事吗?
幻觉是转写错误的一种。大多数错误是把你确实说过的话听错了,而幻觉是完全没有语音来源的文字,在计算词错误率时算作插入。