那個年代,是技術欠我的
90 年代末到 2000 年代初,語音辨識軟體開始進入消費市場。IBM ViaVoice、Dragon NaturallySpeaking 是當時的代表。我還記得那個「Speaker Adaptation」的過程——打開軟體,然後被要求朗讀一篇又一篇的制式文章,持續一個小時甚至更久,只為了讓系統「學會」我的聲音。
對一般人來說,這可能只是枯燥。對我來說,這是折磨。
我天生肌肉張力的問題,發音跟「標準」有落差。那些制式文章要求的是標準發音,而我念出來的,系統學到的就是錯的。惡性循環。念得越多,錯得越離譜。
那時候我以為是自己的問題很嚴重。
現在回頭看,不是的。是那個年代的技術根本不是為我們設計的。
舊系統為什麼注定失敗
ViaVoice 用的是 HMM(Hidden Markov Model)聲學模型,搭配 trigram 語言模型。這種架構有幾個致命限制:
- 幾乎從零學習:沒有預訓練,每個使用者都要從頭訓練
- 只看前後 2-3 個詞:語言模型太短視,無法從上下文消歧義
- 假設使用者會配合機器:念標準文章、發標準音
這套邏輯的前提是「使用者會配合機器」。我不符合這個前提,所以我被系統判定為「有問題」。
2003 年,IBM 把 ViaVoice 桌面版授權給 ScanSoft(後來的 Nuance),自己只留嵌入式版本。2021 年,Microsoft 以 197 億美元收購 Nuance。這條技術線繞了一大圈,最後被併入巨頭,然後基本上被放棄了。
諷刺的是,現在 Windows 11 內建的語音辨識其實還不錯,我用起來大概有 70% 的準確率。但 70% 不夠。每 10 個字錯 3 個,修正成本太高。
現代系統好在哪裡,又差在哪裡
Whisper 這類基於 Transformer 的模型,跟舊時代完全不同:
- 預訓練資料是數十萬小時的多語者語音
- 有 attention 機制,能回頭看前面講了什麼
- 不需要針對個人做長時間的 enrollment
理論上,我的聲音只是它「見過的變異之一」,不需要特別學。
但實際用起來,還是有問題。
**幻覺(Hallucination)**是最大的痛點。Whisper 遇到不確定的音訊片段時,不會留白,而是傾向生成「流暢但錯誤」的文字。我看過它輸出「字幕組提供」「感謝收看」這種完全不存在的內容——因為它的訓練資料包含大量 YouTube 字幕,這些 pattern 出現頻率很高,所以它「覺得」這樣輸出是安全的。
對模型來說,loss 低、機率高,是「安全」的。對我來說,這是災難。
我在 ChatGPT 網頁介面上也用過 Whisper,幻覺一樣嚴重。這代表不是我的實作有問題,是模型本身的特性。OpenAI 沒有修,可能也不會修——訓練資料污染太深,他們的重心也已經轉向 GPT 系列。
xvoice:讓機器配合我
既然上游不會修,我自己來。
我開發了 xvoice,一個跨平台的語音輸入系統。架構很簡單:
Silero VAD(語音活動偵測)
↓
faster-whisper(語音轉文字)
↓
LLM 校正層(用大語言模型修正錯誤)
↓
OpenCC(簡繁轉換)
核心邏輯是:Whisper 負責「聽」,LLM 負責「想」。
Whisper 對我的發音會有固定的錯誤 pattern——「我常講 A,它常聽成 B」。LLM 校正層的工作就是學會這些 pattern,然後補回來。
我還寫了幻覺過濾程式,專門攔截那些「字幕組提供」之類的輸出。
現在這個系統已經是我日常使用的工具。我打這篇文章的時候,也是用它。一開電腦就開啟,每一句話都是在幫它累積訓練資料。
發現:整段話一起講,效果更好
有一個有趣的發現:我原本習慣一句一句講,後來試著整段話一起講,辨識效果反而更好。
原因是兩層都受益於更長的上下文:
- Whisper:聽到前面的詞,可以回頭確認後面沒聽錯
- LLM 校正層:看到整段,更容易判斷哪裡是筆誤、哪裡該斷句
一句一句講是 hard mode,每句都是孤立的,模型只能瞎猜。
這改變了我的使用習慣——不用一口氣講五分鐘,但至少一個完整的意思講完再送出。
關於構音障礙的分級
在研究這個領域的過程中,我查了一些醫學文獻。構音障礙(dysarthria)在臨床上通常分成五級:
| 等級 | 描述 | 語音可懂度 |
|---|---|---|
| Normal | 正常 | 接近 100% |
| Mild | 輕度 | 大部分可懂,偶爾需要重複 |
| Moderate | 中度 | 需要聽者努力,部分可懂 |
| Severe | 重度 | 大部分難以理解 |
| Profound | 極重度 | 幾乎無法理解 |
以我的情況來說,ASR 能抓到 70% 左右,大概落在 mild 到 moderate 之間。這個區間正好是「機器聽不準但人能懂」的灰色地帶。
我有一個朋友,他的情況比我嚴重很多,可能接近 severe 或 profound。他的家人聽得懂他說話,但外人(包括我)很難理解。他跟我抱怨過 Siri 都聽不懂他,我說:「連我都聽不懂了,你說呢?」
很直接,但也是事實。
這讓我意識到 xvoice 的極限。我的系統依賴一個前提:ASR 輸出的錯誤是「有規律可循」的。如果 ASR 準確率掉到 30% 以下,錯誤開始變得隨機、無規律,LLM 拿到的輸入接近亂碼,就沒有足夠的「骨架」可以修正了。
xvoice 的天花板大概在 moderate。再往下的群體,需要的是完全不同的技術路線——可能是專屬聲學模型,或者非語音輸入(眼控、腦機介面等)。
目標:讓更多人不用受這種苦
我的目標是有一天達到 100% 的辨識準確率。
這聽起來很狂妄,但我覺得是可行的。現在每一句話都在累積資料,每一次錯誤都是 correction pair。等資料量夠了,可以整理成 few-shot example,強化校正層的 prompt,甚至做更進一步的微調。
xvoice 目前還是私人專案,放在 GitHub 上但還沒公開。等核心穩定、自己用得順了再開放原始碼,比丟出半成品讓人踩雷好。
當年沒有人幫我鋪路。我現在在幫未來的人鋪。
下一個遇到同樣問題的人,不用再從零開始。