Whisper 幻覺:為什麼 Whisper 會打出沒人說過的字,以及怎麼避免
作者 Ryleigh Newman · 發佈於
Whisper 幻覺,指的是逐字稿裡沒有人說過的字:一個片語反覆出現、在靜音處冒出「Thank you for watching」這類結尾語,或是整個憑空編出來的句子。它們會發生,是因為 Whisper 寫出文字的方式很像語言模型,當聲音是靜音、有雜訊或不清楚時,它對「接下來通常是什麼」的判斷,可能比它實際聽到的內容更有分量。
OpenAI 自己的模型卡就提出了這個警告,2024 年的一項研究也發現,在它測試的轉錄中,大約 1% 出現了憑空編造的片語。我做了 YapToText,一款在你的 Mac 上執行 Whisper 的免費聽寫 App,因為我用手打字有困難,每天都在聽寫,而圍繞模型做的工作,有很大一部分就是用來攔截這種問題。下面依序說明:幻覺是什麼樣子、為什麼會發生、研究發現了什麼、YapToText 怎麼處理,以及不管用哪種 Whisper 設定都能做的事,包括 whisper.cpp。
免費下載。不需要帳號,沒有鎖住的功能。需要搭載 Apple 晶片的 Mac 和 macOS 14 或以上版本。 原始碼在 GitHub 上。
用其他語言閱讀: English, Čeština, Deutsch, Español, Français, Magyar, Bahasa Indonesia, Italiano, 日本語, 한국어, Nederlands, Polski, Português, Русский, ไทย, Türkçe, Tiếng Việt, 简体中文
步驟
- 一說完話就停止錄音,或是在 Dictation 頁面開啟 Auto-stop after silence。
- 要想很久的時候,按 Space 暫停,不要讓靜音被錄進去。
- 在 AI Models 頁面的 Language 選擇器,選你說的語言。
- 轉錄檔案之前,先修剪長時間的靜音和音樂。如果你用 whisper-cli,也要把它轉換成 16 位元的 WAV。
- 在 History 按一下 Show pipeline details,讀原始逐字稿,或是說話時按 2,使用 Raw Transcription。
Whisper 幻覺是什麼樣子
OpenAI 的 Whisper 論文用淺白的話列出了幾種失敗模式:卡在重複的迴圈裡、沒有轉錄出一段音訊最前面或最後面的幾個字,以及完全的幻覺,也就是模型輸出的逐字稿和實際音訊完全無關。實際上,它們以四種形式出現。幻覺不是聽錯的字。它是背後完全沒有聲音的字。
- 重複迴圈。 同一個句子、片語或字一再重複,常常出現在逐漸沉默下來的錄音尾端。OpenAI 的模型卡說,序列到序列的架構讓模型容易產生重複的文字,波束搜尋和溫度排程可以在某種程度上減輕,但不能完全避免。
- 靜音時冒出的文字。 在 Whisper 儲存庫自己的討論串「Share your hallucinations here」裡,使用者回報說,在沒有人說話的靜音、音樂或音效處,出現了像「Thank you for watching」和字幕製作名單這樣的句子。
- 憑空編出的句子。 從來沒有人說過的整個片語。康乃爾大學對 Careless Whisper 研究的報導說,Whisper 偶爾會編出整個片語和句子,有時帶有暴力的語言、虛構的個人資訊和假網站。
- 標籤和舞台指示。 讀起來像劇本而不是口說的文字。YapToText 1.4 的版本說明記錄了一項修正,針對逐字稿裡出現的「Male speaker:」這類憑空產生的說話者標籤。
相反的問題,也就是開頭或結尾漏字,與此相關,這也是為什麼同一段錄音可能既少了第一個字,又多了一句憑空的結尾。一般聽錯的字是另一種問題,解法也不同,Mac 的 Whisper 指南有說明。
Whisper 為什麼會產生幻覺
OpenAI 在它的模型卡裡解釋了原因。因為這些模型是用大規模、有雜訊的資料以弱監督方式訓練的,它們的預測可能包含音訊裡實際上沒有說的文字。模型卡認為,這是因為模型同時在嘗試預測下一個字,以及嘗試轉錄音訊本身,它也說在資源較少或較不容易被找到的語言裡,這種行為可能更嚴重。可以依據的聲音很少時,模型裡負責猜測的那一半就做了更多的工作。
這指向了容易引發它的情況:
- 靜音和長時間停頓。 Careless Whisper 研究發現,幻覺不成比例地出現在無聲時間占比比較長的人身上,也就是停頓比較長的人。
- 音樂和音效。 Whisper 儲存庫裡的回報,集中在沒有人說話的片段。
- 有雜訊或很微弱的訊號。 語音越不清楚,模型就越沒有東西可以把每個字固定住。
- 語言。 OpenAI 說,表現依語言有很大的差異,模型卡也說,在資源較少的語言裡,幻覺可能更嚴重。
還有一個細節,對發現它很重要。這項研究發現,OpenAI 的 Whisper API 產生的幻覺是非確定性的,每次執行都會得到不同的隨機文字,研究者就用同一段音訊兩次執行之間的差異把它們找出來。如果你的工具對同一段音訊兩次執行給出不同的文字,那段有變的部分就值得再看一眼。
Careless Whisper 研究發現了什麼
這項研究是「Careless Whisper: Speech-to-Text Hallucination Harms」,作者是 Allison Koenecke、Anna Seo Gyeong Choi、Katelyn X. Mei、Hilke Schellmann 和 Mona Sloane,發表於 ACM 公平、問責與透明度研討會 FAccT 2024。比例很小。但單一一句憑空編造的句子,造成的傷害可能很大。
2026年10月5日查閱,來源是 arXiv 和 ACM Digital Library 上的論文,以及康乃爾大學的新聞報導。
- 他們測試了什麼。 來自 AphasiaBank 的近 40 小時音訊,共 13,140 個片段,說話者有失語症患者,也有對照組,在 2023 年送進 OpenAI 的 Whisper API。
- 多常發生。 大約 1% 的轉錄含有整個憑空出現的片語或句子,這些內容在底層音訊裡以任何形式都不存在。
- 有多嚴重。 38% 的幻覺含有明確的傷害,例如助長暴力、編造不正確的關聯,或暗示不實的權威。
- 對誰。 失語症患者的幻覺比對照組多,無聲時間比較多的片段也比較容易產生幻覺。
- 隨時間的變化。 作者在 2023 年12月重新處理這些音訊時,許多例子已經解決,但 187 個音訊片段中仍有 12 個產生了幻覺。
讀這些數字時,有兩件事要分清楚。它們描述的是 2023 年那個樣本上 OpenAI 的雲端 API,不是 whisper.cpp,不是 Whisper Large v3 Turbo,也不是 YapToText,所以不能拿來預測你自己的聽寫。它們也不是要你驚慌的理由,而是要你讀一下自己聽寫內容的理由,這本來就是好習慣。如果長時間停頓是你說話方式的一部分,依狀況選擇聽寫老實說明了 YapToText 可能不足的地方。
YapToText 怎麼防範
YapToText 透過 whisper.cpp 執行原版的 Whisper Large v3 Turbo (Q5) 檔案。我沒有重新訓練過這個模型。我做的是圍繞它的一整條處理流程,而這條流程有一部分,就是為了不讓沒有人說過的字進到你的文件。模型是原版的。心力花在它周圍的防護上。
在 Whisper 聽到任何東西之前
- 長時間的靜音會被壓縮,在轉錄之前就處理,所以模型不會漂移。
- 每次聽寫都會測量雜訊,只有比例需要時,才會減去穩定的雜訊。小聲說話的聲音會相對於房間被提升。
- 有雜訊的片段會搜尋得更深。 片段測得有雜訊時,解碼會從貪婪搜尋改成波束搜尋。
- 按下按鍵前的半秒會保留下來,所以第一個字不會被切掉。

逐字稿回來之後
- 重複迴圈會被攔截並移除。 有一道防護會收合 Whisper 在靜音尾端陷入的迴圈,從 1.4 開始,以靜音結尾的長篇聽寫,不會再一遍又一遍重複最後一句。
- 憑空產生的說話者標籤會被移除,舞台指示也一樣。在 1.4 的修正之前,像「Male speaker:」這樣的標籤甚至可能被當成詞彙學起來。
- 從靜音中幻覺出來的客套話會被攔截並移除。
- 靜音不會輸入任何東西。 如果一次聽寫只有靜音,YapToText 會說「Didn't catch that」,也不會轉錄任何內容。
- 很短的逐字稿會再跑一次。 如果文字回來時比輸入的語音還短,就會執行一次補救。
當整理模型出錯時
除了 Raw Transcription 以外,每個模式都會把逐字稿交給你 Mac 上的一個小型整理模型,而語言模型也可能憑空編造。App 會檢查它的成果:如果結果讀起來像助理的回覆、長度遠遠超過你說的內容、重複了參考文字,或憑空多了省略號,就會丟掉,改為輸入原始的逐字稿。整理也被告知,絕對不要刪掉任何一句話,也不要加上你沒說過的內容。AI 聽寫頁面說明了這些規則。
每一項這樣的改動,在發布之前,都會用我自己真實的聽寫組成的測試環境來衡量。那是一個人的錄音,不是基準測試,而且攔截並移除不等於從不發生:新的幻覺類型仍然可能漏過去。
看看 Whisper 實際聽到了什麼
要分辨是幻覺還是整理的失誤,最快的方法,是看 Whisper 在任何其他步驟動手之前產生了什麼。如果憑空多出來的文字在原始逐字稿裡,就是 Whisper 寫的。如果不在,就是整理造成的。
步驟 1:在 History 打開該則聽寫
- 你: 打開 History,找到那則聽寫,按一下 Show pipeline details。
- YapToText: 在最終文字上方顯示原始逐字稿,下方則是模式、語言和時間。
- 確認: 把原始逐字稿和你記得自己說過的內容對照著看。

步驟 2:下一次聽寫用原始模式
- 你: 說話的時候,按 2,這在 Auto mode 開啟的預設順序中是 Raw Transcription。
- YapToText: 這一次聽寫,只輸入 Whisper 的字和基本的標點,不經過任何 AI 模型。
- 確認: 輸入進去的,就是 Whisper 聽到的。想讓每一次聽寫都維持原始,請在 Home 頁面關閉 Post-transcription analysis。
每則 History 項目的輸出選單裡,Copy Raw Transcript 會把整理之前的版本放到剪貼板。如果你想在長篇聽寫輸入之前先讀過一遍,請在 Settings、Advanced、Text output 開啟 Review before inserting。模式指南說明了每個模式可以改動什麼。
在任何 Whisper App 裡預防幻覺
大多數幻覺都是從靜音長出來的,所以最好的預防,就是讓 Whisper 少遇到靜音。這些做法適用於任何 Whisper App,適用時也會指出 YapToText 的設定名稱。送進去的靜音越少,冒出來的憑空文字就越少。
- 說完就停。 一說完就輕按按鍵,不要讓錄音一直跑。在 YapToText 裡,Auto-stop after silence 預設是關閉的,位於 Dictation 頁面的 Recording 卡片,可以在安靜 0.5 到 5 秒後結束聽寫。
- 刻意暫停。 中間要想很久的時候,按 Space 暫停聽寫,再按一次繼續。空白鍵不會被輸入成文字。
- 設定語言。 在 AI Models 頁面的 Language 選擇器選你說的語言,不要讓 Whisper 自己判斷。語言頁面列出全部 29 種。
- 給它乾淨的訊號。 麥克風靠近、房間安靜、關掉音樂。YapToText 的 Pause music and video while dictating 預設是開啟的,會在你說話時暫停播放。
- 先修剪錄音。 轉錄檔案之前,先用任何音訊編輯軟體,把開頭和結尾長時間的靜音和音樂剪掉。
- 在重要之前先讀。 只要是要寄出、歸檔或引用的內容,就先讀一遍原始逐字稿。

按鍵與快速鍵頁面介紹了 Space、Esc 和其他按鍵。
給 whisper.cpp 使用者的建議
如果你自己透過 whisper.cpp 執行 Whisper,送進去的音訊由你控制,而大部分的預防就在這裡。乾淨又修剪過的音訊,是最便宜的幻覺解法。
- 正確轉換。 whisper.cpp 的 README 說,whisper-cli 目前只能處理 16 位元的 WAV 檔案,並提供了轉換其他檔案的 ffmpeg 指令。
- 先修剪。 在轉換之前,剪掉長時間的靜音和音樂,這樣模型就看不到它們。
- 能設定語言就設定。 請查看 whisper-cli 的說明輸出有沒有語言選項,不要依賴自動偵測。
- 試試別的模型大小。 如果你只說英文,記憶體又吃緊,OpenAI 說只支援英文的 .en 模型在英文上通常表現比較好,尤其是 tiny 和 base。
- 了解即時模式是什麼。 whisper-stream 每半秒對麥克風取樣一次,並持續轉錄,README 把它稱為一個簡單的範例。
終端機: 用 README 自己的指令,把修剪好的錄音轉換成 whisper-cli 讀得懂的 WAV 格式。
ffmpeg -i input.mp3 -ar 16000 -ac 1 -c:a pcm_s16le output.wav結果: ffmpeg 會把 output.wav 寫成 16 kHz、單聲道、16 位元的音訊,接著你把它放在 -f 後面交給 whisper-cli。
你為 whisper.cpp 下載的模型檔案,在 YapToText 裡也能使用:在 AI Models 頁面的 Your own models 底下,Add Model 可以接受任何 whisper.cpp 的 GGML .bin 檔案。本機 Whisper 指南有完整的設定、模型大小和記憶體數字。
沒有任何防護能保證的事
- 每一種幻覺。 這些防護能攔截我看過、也測試過的模式。新的模式可能漏過去,這就是為什麼原始逐字稿永遠只差一次點擊。
- 從沒聽到的字。 沒有任何防護能找回麥克風沒收到的語音,而移除憑空多出的文字,留下的是空缺,不是真正說過的字。
- 我自己的比率。 我沒有量過 YapToText 或任何模型的幻覺比率,所以這一頁只引用已發表的研究,並說明它的限制。
- 檔案轉錄的進階功能。 檔案轉出來是純文字,沒有時間戳記,所以無法從一行可疑的文字跳到它在音訊裡的位置。音訊檔案頁面介紹了這項功能。
- 把長時間停頓當作說話風格。 Whisper 是通用模型,除了壓縮靜音,YapToText 裡沒有任何東西改變它處理有長時間停頓的語音的方式。
- Intel 的 Mac。 YapToText 需要 macOS 14 或以上版本、Apple 晶片的 Mac。
防護能降低機率。讀一遍你聽寫的內容,仍然是最後一道檢查。
重點整理
- 它是什麼。 是背後沒有語音的文字:迴圈、靜音時冒出的結尾語、憑空編出的句子和標籤。
- 為什麼。 Whisper 既轉錄也預測,而靜音、停頓、音樂和雜訊讓預測有了發揮的空間。
- 在 YapToText 裡。 長時間的靜音會被壓縮。重複迴圈、說話者標籤和從靜音中冒出的客套話會被移除。過度膨脹的整理結果會被丟掉。
- 對任何人。 說完就停、修剪靜音、設定語言,並讀一遍原始逐字稿。
YapToText 在 Mac App Store 免費下載,而 Whisper 在你的 Mac 上執行。
讓 Whisper 少遇到靜音,並檢查它寫了什麼。如果 YapToText 曾經打出你沒說過的內容,請在 GitHub 上提交 issue,並附上 History 裡的原始逐字稿。每一則我都會看。
免費下載。不需要帳號,沒有鎖住的功能。需要搭載 Apple 晶片的 Mac 和 macOS 14 或以上版本。 原始碼在 GitHub 上。
指南
更多指南(英文)
資料來源
- https://arxiv.org/abs/2402.08021 (查閱於 2026年10月5日)
- https://dl.acm.org/doi/10.1145/3630106.3658996 (查閱於 2026年10月5日)
- https://news.cornell.edu/stories/2024/06/ai-speech-text-can-hallucinate-violent-language (查閱於 2026年10月5日)
- https://github.com/openai/whisper/blob/main/model-card.md (查閱於 2026年10月5日)
- https://cdn.openai.com/papers/whisper.pdf (查閱於 2026年10月5日)
- https://github.com/openai/whisper/discussions/1873 (查閱於 2026年10月5日)
- https://github.com/openai/whisper (查閱於 2026年10月3日)
- https://github.com/ggml-org/whisper.cpp (查閱於 2026年10月3日)
- https://github.com/ryleighnewman/YapToText (查閱於 2026年10月3日)
- https://apps.apple.com/us/app/yaptotext/id6786382289 (查閱於 2026年10月3日)
常見問題
Whisper 為什麼會產生幻覺?
OpenAI 的模型卡說,Whisper 是用大規模、有雜訊的資料訓練的,可能輸出沒有人說過的文字,很可能是因為它既要預測下一個字,也要轉錄。靜音、長時間停頓、音樂和雜訊讓這種預測有更多發揮的空間。
Whisper 為什麼會寫出「thank you for watching」?
這是在靜音或音樂處已知的一種幻覺。Whisper 儲存庫「Share your hallucinations here」討論串裡的使用者回報了它,還有字幕製作名單。說完話就停止錄音,並修剪靜音,可以減少它發揮的空間。
Whisper 為什麼一直重複同樣的文字?
OpenAI 的論文把卡在重複迴圈列為一種失敗模式,它的模型卡也說,這種架構容易產生重複的文字。迴圈常常出現在靜音的尾端,YapToText 的防護會把它收合。
Whisper 幻覺有多常見?
Careless Whisper 研究發現,在它 2023 年的樣本中,OpenAI 的 Whisper API 產生的轉錄,大約有 1% 含有憑空編造的片語或句子。你自己的比率取決於你的音訊、你的模型和你的 App。
怎麼解決 Whisper 幻覺?
讓它少遇到靜音:說完就停、刻意暫停,並修剪錄音。設定語言、給麥克風乾淨的訊號,並讀原始逐字稿,這樣就能看到 Whisper 實際寫了什麼。
YapToText 會產生幻覺嗎?
它執行的是 Whisper,所以可能會。它會壓縮長時間的靜音,移除重複迴圈、憑空產生的說話者標籤和從靜音中冒出的客套話,並丟掉長度遠超過你所說內容的整理結果。History 會顯示原始逐字稿。