世界を動かす技術を、日本語で。

完全な静寂は常にアラビア語で「ترجمة نانسي قنقر」として幻覚される

概要

Whisperなどの音声認識モデルは、 無音の音声ファイル に対して特定のフレーズを 誤認識(幻覚) する現象が報告されています。 特に large-v3モデル では、 アラビア語やドイツ語 で著作権表示などが出力されやすい傾向。 これは、 YouTube字幕データ などを学習に利用したためと考えられます。 いくつかの 回避策や代替モデル も議論されています。 本稿では、現象の詳細・原因・回避方法・代替案を解説します。

Whisperモデルによる無音ファイルの誤認識現象

  • Whisper large-v3モデル で無音ファイルを解析すると、常に「 ترجمة نانسي قنقر」など同じフレーズが出力される現象
  • ffmpeg で無音ファイル(例:30秒)を生成し、Whisperで解析した際の挙動
  • アラビア語ドイツ語 では著作権表示や字幕制作者名など、特定のフレーズが頻出
  • 英語 では「applause」や「This is the end of the video, remember to like and subscribe」などの幻覚出力が多発
  • 音声がない場合動画の終端部 でこの現象が顕著

原因の考察

  • Whisperは YouTube音声+字幕データ で学習されており、動画終端の無音区間には 著作権表示や制作者クレジット が多く含まれていた
  • そのため、 無音=著作権表示 として学習してしまった可能性
  • 参考事例として ノルウェー語 でも同様の現象が観測されたとの研究報告(Medium記事

回避策・対処法

  • VAD(Voice Activity Detection) の活用
    • 音声がある部分のみを認識対象とし、無音部分を除外
  • 初期プロンプト の設定(例:「.」など)による出力誘導(v3では効果が薄い)
  • suppress_tokens トリックの利用(smallモデルでは有効、v3では効果が限定的)
  • logprob_threshold を調整(例:-0.4に設定、ただし一般用途には不向き)
  • 前処理 で無音区間をカットするフィルタリング

代替モデル・新モデルの紹介

  • Voxtral など新しいモデルの登場
    • Voxtralはリリース直後で今後の評価に期待
  • Whisper smallモデル では一部回避策が有効との報告
  • アラビア語向け に特化したモデルやサービスの情報共有(例:arabicworksheet.com)

まとめ・今後の展望

  • Whisper large-v3など大規模モデルは 無音区間の幻覚出力 が避けられない傾向
  • VADや前処理 による無音除去が実用的な対策
  • 新モデルや言語特化型モデル の活用も検討
  • 音声認識出力の 後処理で特定フレーズをフィルタリング する運用も有効

関連リンク

Hackerたちの意見

調べなくていいように言っとくけど、アラビア語の「رجمة نانسي قنقر」は英語で「Nancy Qanqarの翻訳」って意味だよ。「رجمة」は「翻訳」を指してて、「نانسي قنقر」は名前の「Nancy Qanqar」だね。

どうやら、トレーニングデータが主に映画の非公式な字幕から来てるからみたい。映画の最後には「Translated by X」みたいな文字列があって、クレジットが流れてる間はよく無音になってるんだよね。

チェコ語では、Whisperは音楽を「Titulky vytvořil JohnyX」(「JohnyXによって作成された字幕」)として書き起こすことが多いのも同じ理由だよ。

ちょっとタイプミスがあるよ。「رجمة」じゃなくて「ترجمة」が翻訳を意味するんだ。最初のتが抜けてるよ。

個人的にはWhisperは幻覚のせいで使えないと思う。これについては広く文書化されてるし。音声クリップから無音を取り除くと少しはマシになるけど、それでも自動的に文法を修正したり、バイリンガルのスピーチを翻訳したりするからね。最新の音声モデルでは改善されたけど、まだ解決はしてない。

大きなモデルの生データにはその問題がある。常に小さなサテライトモデルやロジックと組み合わせるべきだよ。伝統的な機械学習や深層学習モデルを使った方が、ミスマッチを検出するのは(合成データセットを作るのは簡単だから)多分簡単だし、無音を検出するための最もシンプルなコードでもテキストと一致しないことを確認できるからね。

クラシックなオーバーフィッティングだね。これはLLMの例えで言うと、オフィス不在の返信が翻訳だと思ってるようなもんだ。

これってオーバーフィッティングじゃなくて、データの質や分類の問題じゃないの?

みんな知らなかっただろうけど、これはNancy Qanqarによって機械的にやられてるだけだよ。やるじゃん、Nancy!その調子で頑張れ、クレイジーな野郎!

中国語のトランスクリプションでwhisper-large-v3も同じことが起こるよ。無音の部分が「この動画に投票して、シェアして、お気に入りにしてください」みたいな感じで書き起こされる。多分、役に立つデータをちゃんと選ばずに、適当なYouTube動画でモデルを訓練したんじゃないかな。

面白いね。私がwhisperを使ってみた時、YouTubeスタイルの動画や適当な携帯電話の動画は特に苦手だなって印象を受けた(映画と比べて)。当時の私の推測では、訓練素材の大半が字幕や生の脚本だったんじゃないかな。私がトランスクリプションを試した動画もマンダリン中国語で、whisper-large-v3を使ったんだけど、音声的に「聞き間違え」たり、意味不明なことを生成したりするいつもの不満はあったけど、他のソフトと比べると意外と良かったよ。ただ、スピーカーの名前を勝手に作ったり、セリフの前に名前を付けたり、簡体字と繁体字をランダムに切り替えたりしてた。テストした動画では、無音の部分があると、最後のセリフを何度も繰り返したり、時々方向指示(なぜか英語で)を挿入したりしてた。クレジットとかは一切見たことない。一つの動画では、誰かが風邪をひいて鼻をすする音が入ってて、Whisperはその人が泣いてるって判断した(「* crying 」って書き起こされたり、咳が「 door closing *」になったり)。その後のセリフはかなり不親切な内容になったけど、鼻をすする音をカットしたら、もうそういうことはなくなった(でもその後、出力がまた繁体字に戻った)。

確かに、別のモデルでは無音の部分が「Thanks for watching!」や「[MUSIC]」って繰り返し書き起こされることがあった。こういう失敗モードがQAプロセスで見つからなかったのはちょっとバカだよね。今は同じ問題を抱えてるトランスクリプションモデルがいくつもあるし、入力音声に無音部分があるのはかなり一般的なことだと思うんだけど…。

ニコライ・ウィンターって誰? https://medium.com/@lehandreassen/who-is-nicolai-winther-985...

英語のWhisperモデルでも、「[ sub by sk cn2 ]」とか「とにかく、見てくれてありがとう!チャンネル登録といいねお願いします!見てくれてありがとう!バイバイ!」とか、「これで動画は終わりです。見てくれてありがとう。この動画が気に入ったら、チャンネル登録お願いします。ありがとう。」みたいなフレーズが出てくるのを見たことある。

ロシア語では、よく「Субтитры сделал DimaTorzok」っていうのが最後に出てくるんだよね(「字幕はDimaTorzokが作成しました」)。面白いことに、その名前のYouTube動画を字幕で見つけられなかったから、あんまり訓練データには入ってないみたい。

誰かがオンラインで字幕を配布してる可能性もあるよね。例えば、opensubtitles.orgのデータセットに載ってるとか。

タイトルは「OpenAIが海賊版映画で訓練した証拠を公開」って変更すべきだね。

それがどういう証拠になるの?正直な質問なんだけど。オンラインの字幕コミュニティからの字幕が使われてるってことはわかるけど、例えばDVDからのオリジナル字幕が使われてる可能性もあるよね。でも、AIが著作権のある素材をいろいろ使ってモデルをトレーニングすることは、もう知られてるし認められてる(許可されてる?)んじゃないの?

うーん、LLMが悪いってのがよくわからないな。もしトレーニングデータのかなりの部分が一つのソースから来てるなら、その出力に対してそのソースをクレジットするのは正しいと思うんだけど。