# 影片筆記:Can Whisper be used for real-time streaming ASR? ## ⚠️ 可先使用,仍有待修正項目 本筆記已完成可閱讀的逐字稿與時間跳轉;下列為待處理問題,建議播放原片確認。 - 待修正:逐字稿全文快速校讀未完成(已保留自動字幕/原始逐字稿並繼續生成筆記。;未完成的全文速讀項目可在精進模式回聽確認。) ## 一句話總結 影片由機器學習工程師 Bai 講解如何透過開源專案 **WhisperStreaming**,利用緩衝區機制與「局部一致性」演算法,將原生設計為非串流、30秒長度的 OpenAI Whisper 模型,轉化為具備低延遲特性的串流語音辨識(Streaming ASR)系統。 ## 核心重點 1. **Whisper 的原生限制**:OpenAI Whisper 是針對 30 秒長度的非串流(Batch)語音設計,若直接用於串流,會面臨切分點導致單字辨識錯誤以及高延遲的問題。 2. **WhisperStreaming 解決方案**:透過動態增加音訊緩衝區長度(從 1 秒開始逐步增加),直到遇到句子結束標記(如句號、問號),將 Whisper 轉化為串流系統。 3. **局部一致性演算法(Local Agreement, n=2)**:為了確保文字輸出的穩定性,只有當某個 Token 在連續兩個音訊緩衝區迭代中都被生成時,該 Token 才會被確認為最終結果(黑色文字),否則維持為未完成結果(灰色文字)。 4. **提示詞優化**:在生成新句子時,將前一句子作為 Prompt Tokens 輸入模型,以提升準確率。 5. **架構差異對比**:針對串流設計的模型(如 2021 年提出的架構)採用固定視窗與掩碼訓練,無需像 Whisper 這樣重複處理句子開頭,因此在效率上更具優勢。 ## 詳細大綱 ### 一、背景與定義 * **講者背景**:Bai,機器學習工程師,自然語言處理博士。 * **Whisper 模型特性**: * 類型:Speech-to-text 模型。 * 訓練數據:涵蓋約 100 種語言,總計 680,000 小時數據。 * 架構:Encoder-decoder Transformer。 * 特點:具備五種不同大小,對噪音和口音具有魯棒性(Robust)。 * **ASR 兩種形式比較**: * **Batch ASR**:模型需接收大量音訊後,一次性產出大量文字。 * **Streaming ASR**:在說話者發聲的同時即時產出輸出,延遲不超過幾秒。 * **準確率差異**:串流 ASR 的準確率通常比批量 ASR 低幾個百分點,因為模型僅能存取到目前為止的上下文,無法預知未來內容。 ### 二、應用場景與動機 * **Voice Writer 應用**: * 這是一個 AI 寫作助手,分為兩步驟: 1. 用戶口述想法(不擔心語法)。 2. AI 修正語法。 * 用途:用於電子郵件、部落格文章、Slack 訊息等場景。 * **問題起源**:在開發 Voice Writer 時,面臨如何進行高效且準確的串流 ASR 的技術挑戰。 ### 三、Whisper 用於串流 ASR 的挑戰 * **原生限制**:Whisper 訓練用於處理長度為 30 秒的輸入音訊。 * 若音訊少於 30 秒:可填充(Pad)至更長。 * 若音訊多於 30 秒:無法直接輸入 Whisper。 * **直接分塊處理的問題**: 1. **切分點問題**:可能在單字中間切分音訊,導致該單字無法被正確辨識。 2. **高延遲(Latency)**:若等待 30 秒填滿緩衝區才處理,第一個字的延遲可達 30 秒。 ### 四、解決方案:WhisperStreaming * **專案介紹**:開源報告/專案 **WhisperStreaming**,旨在將 Whisper 轉為串流 ASR 系統。 * **操作演示**: * 使用 `whisper small` 模型。 * 透過命令啟動模型並輸入音訊。 * 特點:快速、具回應性,並提供時間戳記(Timestamps)。 * **核心演算法原理**: 1. **緩衝區機制**: * 初始最小緩衝區大小(Minimum chunk size)預設為 1 秒。 * 每次迭代增加緩衝區大小 1 秒,並將所有內容輸入 Whisper。 * 持續此過程直到遇到「句號」或「問號」等句子結束標記。 * 遇到句子結束標記後,緩衝區向前移動並重新開始。 2. **為何需要多次處理**: * Whisper 是在句子層級訓練的。 * 當音訊起點與句子起點對齊時,結果最佳。 * 確保 Whisper 不需要從句子中間開始轉錄,以避免次優結果。 3. **結果顯示策略(Voice Writer 應用)**: * **灰色部分**:未完成結果(Unconfirmed),可能隨新資訊改變。 * **黑色部分**:已確認結果(Confirmed),永久不變。 4. **確認演算法:局部一致性(Local Agreement with n=2)**: * 規則:Token 需在連續兩個音訊緩衝區中生成,才能被確認。 * **範例**: * 第一步:模型輸出 token "if", "you", "like",無確認。 * 第二步:模型輸出更多 token,但僅前兩個 token 與上一步一致,因此這兩個被確認。 * 後續步驟:持續生成,直到 token 在至少兩個連續區塊中生成才確認。 * **例子**:單字 "view" 可能因後續資訊變更為 "video"(灰色部分),但黑色部分一旦確認即永久固定。 5. **提示詞優化**: * 當生成新句子時,將前一句子作為 **Prompt Tokens** 輸入模型。 * 目的:提供更多上下文,略微提升準確率。 ### 五、總結與限制 * **演算法三要素總結**: 1. 將越來越長的連續音訊緩衝區輸入 Whisper。 2. 一旦 token 被兩次迭代確認,即發出該 token。 3. 句子完成時,將音訊緩衝區向前滾動。 * **適用性**:此簡單演算法可應用於任何不支援串流的 Speech-to-text 模型,將其轉為串流模型。 * **Whisper 的局限性**: * Whisper 非為串流設計,假設每個音訊緩衝區必須從句子開頭開始。 * 長句子開頭需被多次輸入並處理,效率低下。 * 若模型從訓練開始就設計為串流 ASR,則無需此步驟。 * **對比:針對串流設計的模型架構(2021 年提出)**: * **預測機制**:每步預測一個 token,存取固定量的過去與未來上下文。 * **訓練規則**:透過掩碼(Mask)強制執行,掩碼主要為零,表示模型不能使用固定視窗外的資訊。 * **推論機制**:基於有限固定上下文預測 token。 * **視窗移動**:整個接收場(Receptive field)向前移動一個區塊,但大小固定。 * **優勢**:句子開頭不會被多次處理。 * **Whisper 無法實現的原因**:需要修改架構並重新訓練模型,且無法取得 Whisper 的訓練數據。 ## 工具 / 模型 / 名詞整理 * **OpenAI Whisper**:OpenAI 推出的 Speech-to-text 模型,支援多種語言與口音。 * **WhisperStreaming**:開源專案/報告,提供將 Whisper 轉為串流 ASR 的演算法實現。 * **Voice Writer**:講者開發的 AI 寫作助手應用。 * **Encoder-decoder Transformer**:Whisper 模型所使用的神經網路架構。 * **Whisper small**:演示中使用的 Whisper 模型大小版本。 * **Local Agreement (n=2)**:用於確認 Token 的演算法名稱,指 Token 需在連續兩個緩衝區迭代中出現才被確認。 * **Prompt Tokens**:用於提升準確率的提示詞機制,將前一句子作為上下文輸入。 * **Batch ASR**:批量語音辨識,需接收完整音訊後輸出。 * **Streaming ASR**:串流語音辨識,即時輸出文字,低延遲。 * **Receptive field**:接收場,指模型在推論時所能夠存取到的上下文範圍。 ## 操作流程整理 1. **初始化**:設定最小緩衝區大小為 1 秒。 2. **緩衝區累積**: * 每次迭代將緩衝區大小增加 1 秒。 * 將累積的音訊輸入 Whisper 模型進行辨識。 3. **檢查句子結束標記**: * 若未遇到句號或問號,重複步驟 2。 * 若遇到句子結束標記,執行步驟 4。 4. **局部一致性確認**: * 比較當前迭代與前一次迭代的輸出。 * 若 Token 在連續兩個緩衝區中一致,則將其標記為「已確認」(黑色)。 * 未確認的 Token 標記為「未完成」(灰色),可能隨後續資訊變更。 5. **滾動緩衝區**: * 句子完成後,將音訊緩衝區向前滾動,清除已確認部分。 * 將前一句子作為 Prompt Tokens 輸入,以優化下一句子的辨識準確率。 * 重新開始累積新的緩衝區。 ## 值得注意的限制或風險 1. **效率問題**:由於 Whisper 非為串流設計,長句子的開頭部分需要被多次輸入並處理,導致計算資源浪費與效率低下。 2. **準確率折損**:串流 ASR 因無法預知未來內容,準確率通常低於批量 ASR。 3. **架構限制**:無法直接將 Whisper 改為類似 2021 年提出的串流模型架構(固定視窗、掩碼訓練),因為這需要修改架構並重新訓練,且無法取得 Whisper 的原始訓練數據。 4. **延遲與切分風險**:若未採用適當的緩衝區演算法,直接分塊處理會導致單字被切分而辨識錯誤,或產生高達 30 秒的延遲。 ## 逐字稿辨識疑點 * **dostreaming**:逐字稿中出現 "Can the open AI whisper model dostreaming ASR?",疑為口誤或聽寫錯誤,實際語意應為 "do streaming ASR" 或 "support streaming ASR"。 * **chine learning**:逐字稿中出現 "I'm a chine learning engineer",疑為 "machine learning" 的聽寫錯誤。 * **inatural**:逐字稿中出現 "PhD inatural language processing",疑為 "in natural language processing" 的聽寫錯誤。 * **Iwill**:逐字稿中出現 "today Iwill answer",疑為 "I will" 的連寫。 * **aspeechtoext**:逐字稿中出現 "it is aspeechtoext model",疑為 "a speech-to-text model" 的聽寫錯誤。 * **ntire**:逐字稿中出現 "record the ntire broadcast",疑為 "the entire broadcast" 的聽寫錯誤。 * **ep**:逐字稿中出現 "Let's say in the firstep",疑為 "first step" 的聽寫錯誤。 * **worst per**:逐字稿中出現 "the worst per model outputs",疑為 "whisper model" 的聽寫錯誤。 * **e previous**:逐字稿中出現 "agree with e previous step",疑為 "the previous step" 的聽寫錯誤。 * **intention mask**:逐字稿中出現 "having an intention mask",疑點,通常語音模型中稱為 "attention mask"(注意力遮罩),此處聽寫為 "intention",需查證是否為講者口誤或特定術語。 * **ceptive field**:逐字稿中出現 "the entireceptive field moves forward",疑為 "receptive field"(接收場)的聽寫錯誤。 ## 可延伸追問 1. WhisperStreaming 的 `n=2` 局部一致性參數是否可調整?調整為 `n=3` 或更高會對延遲和準確率產生什麼影響? 2. 對於極長句子(超過 Whisper 30 秒限制),WhisperStreaming 的緩衝區滾動機制是否會導致上下文丟失,進而影響長距離依賴的辨識準確率? 3. 除了 Whisper,其他非串流設計的 Speech-to-text 模型(如 wav2vec 2.0)是否也能套用此 WhisperStreaming 的演算法邏輯? 4. 講者提到的 2021 年針對串流設計的模型架構,具體是指哪篇論文或哪個專案?其掩碼訓練細節為何? 5. 在 Voice Writer 應用中,若用戶說話速度極快或極慢,WhisperStreaming 的 1 秒緩衝區增量是否仍為最佳設定?