- Whisperモデルに完全に無音のwavファイルを入力すると、常にアラビア語の "ترجمة نانسي قنقر"(Translation by Nancy Qunqar)という同一テキストを幻覚(hallucination)して出力する現象がある
- ffmpegで無音オーディオを生成し、Whisperでアラビア語と言語指定しlarge-v3モデルを指定して実行すると、常に同じ結果を出力する
- この問題は、Whisperモデルが無音オーディオを特定のテキストとして解釈するよう学習されているように見える
- 過去のモデル(smallなど)では、suppress_tokens、initial prompt、logprob_threshold などのパラメータ調整である程度抑制できたが、v3(特に large-v3)では効果が薄い
- 「VAD(Voice Activity Detection)を使う方法」や、オーディオの無音区間を事前に除外する方式が回避策として提案されている
問題の現象
- Whisper large-v3で無音オーディオに対して、常に "ترجمة نانسي قنقر" というアラビア語の文を幻覚して出力する問題が報告されている
- ffmpegで以下のように30秒の無音wavファイルを生成
ffmpeg -f lavfi -i anullsrc=r=44100\:cl=stereo -t 30 silence.wav
- Whisperコマンド実行例
whisper ./silence.wav --language Arabic --model large-v3
- 結果:
\[00:00.000 --> 00:29.980] ترجمة نانسي قنقر
原因と分析
- large-v3 などの新しいWhisperモデルは、音声の説明など従来の挙動の代わりに、無音に対して任意の幻覚出力を生成する傾向がある
- 以前のモデル(smallなど)も無音で雑多なランダム出力を生成するが、suppress_tokens、initial prompt、logprob_threshold などさまざまなオプションで一部制御できる
- v3では上記の方法があまり効かず、固定された幻覚結果が現れる
回避策と解決案
- VAD(Voice Activity Detection)の適用: オーディオ内で実際に音声がある区間だけをWhisperにかけ、無音はそもそも入力しない方法
- suppress_tokens、initial prompt、logprob_threshold などのパラメータ調整: 一部モデルでは効果があるが、large-v3では限定的
- 完全に無音、または信号が弱いオーディオは、Whisperではなく別の方法で後処理する必要がある
その他の議論
- アラビア語で large-v3 より良いモデルがあるかについて追加の議論もあったが、明確な代替モデルは示されなかった
1件のコメント
Hacker Newsのコメント
whisper-large-v3で中国語音声を書き起こすと、無音区間が「いいね、共有、お気に入り登録お願いします」のような見当違いの文で出力されるのを何度も経験した。モデル学習時にYouTube動画からデータを無作為に集め、有用な資料として選別していないのではないかという疑いがあるwhisperを試したとき、YouTubeやスマホで撮った動画では性能があまり良くないという印象を受けた。おそらく学習資料の大半が字幕か台本なのだろうと推測している。自分が試した動画は中国語(北京語)で、whisper-large-v3を使ったところ典型的な誤解や意味のない結果は出たものの、それでも他のソフトウェアと比べれば性能はかなり優秀だった。ただし、話者名を勝手に作り出してセリフの前に付けたり、簡体字と繁体字を断続的に切り替えたりした。無音区間では最後の文を繰り返し出力したり、ときどき英語で演出指示のように見えるテキストを挿入したりもした。字幕やエンディングクレジットのようなものは見なかったが、ある動画では話者が風邪で鼻をすすっていると、whisperが泣いていると判断して「* crying 」と書き起こし、咳は「 door closing *」と訳した。その次の行はかなり不親切な内容に書き起こされることもあった。鼻をすすっている部分を切り取ると妙な書き起こしは消えたが、今度はまた繁体字に切り替わったLLMでも同様で、明確でないデータに偏った「オーバーフィッティング」の古典的な例だ。外出中の自動返信をそのまま翻訳結果として出してしまうのに似ている。関連記事: https://www.theguardian.com/theguardian/2008/nov/01/5
検索時間を減らすために案内すると、アラビア語の「ترجمة نانسي قنقر」の意味は「Nancy Qanqarによる翻訳」または「Nancy Qanqarが翻訳」だ。「ترجمة」は翻訳、「نانسي قنقر」は名前だ
whisperは無音時にしばしば「Titulky vytvořil JohnyX」(字幕制作: JohnyX)と書き起こすことが多い。理由は似ているWhisperは幻覚(hallucination)が多すぎて使い物にならないレベルだ。こうした現象は何度も十分に文書化されている。音声から無音を除去すると多少減るが、文法の自動補正(たとえばバイリンガル音声翻訳など)の問題もある。最新の音声モデルでは改善されたが完全には解決していない https://news.ycombinator.com/item?id=43427376
Whisper英語版でも、無音を再生すると「[ sub by sk cn2 ]」、「とにかくご視聴ありがとうございました!チャンネル登録と高評価をお願いします!それでは!」、または「この動画は終了しました。ご視聴ありがとうございました。有益だったらチャンネル登録をお願いします。」などがよく現れる
ロシア語では、最後に「Субтитры сделал DimaTorzok」(字幕制作: DimaTorzok)という幻覚が入ることがよくある。実際にそう入力された字幕が多いのか気になってYouTubeで探したが、あまり多くないようだ
opensubtitles.orgのように公開字幕を配布している誰かがいるのかもしれない録音通話の最初の30秒が呼び出し音やDTMFの場合(企業に電話するとほぼ毎回起こる)、Whisperはしばしば言語をニーノシュク語やウェールズ語に誤選択する。どんなテキストが書き起こされるかまでは確認していないが、おそらく同じように見当違いの内容だろう。自分には実用上の問題はないが、バイリンガルのコールセンターなどではかなり不便かもしれない
「Nicolai Wintherとは誰か?」という質問について https://medium.com/@lehandreassen/who-is-nicolai-winther-985409568201
タイトルは「OpenAI、違法映画で学習した証拠が公開」に変えるべきだと主張している
「Nancy Qunqarが機械的に一つひとつ書き起こしたのではないか」という冗談もある。「Nancy、頑張れ! その調子で!」のような励ましも添えられている