# 影片筆記:05VoiceAgent理论基础-实时语音识别ASR原理 ## ⚠️ 可先使用,仍有待修正項目 本筆記已完成可閱讀的逐字稿與時間跳轉;下列為待處理問題,建議播放原片確認。 - 待修正:逐字稿全文快速校讀未完成(已保留自動字幕/原始逐字稿並繼續生成筆記。;未完成的全文速讀項目可在精進模式回聽確認。) ## 一句話總結 本段內容深入解析 Voice Agent 中即時語音識別(ASR)的技術原理,強調為何必須採用「流式/適時」轉錄而非整段轉錄。核心機制包含將聲音波形數位化、切分為 20 毫秒幀並計算頻譜特徵,以及模型透過引入「空白符號(Blank)」來處理音素跨幀問題。筆記詳細說明了流式模型因無法預知未來內容而產生的「邊說邊改(In-term)」現象,並介紹了利用空白符號判斷語音結束(VED)與定稿(Final)的邏輯,最後針對中文同音字多的特性,建議根據業務場景選擇合適的供應商(如阿里云、火山、騰訊等)。 ## 核心重點 1. **流式 ASR 的必要性**:Voice Agent 需要處理即時打斷(Interruption),整段轉錄無法滿足此需求,必須採用逐幀拆解音素並串接成字的即時轉錄方式。 2. **ASR 三步驟原理**: * **聲音數位化**:將聲波轉為每秒 16,000 個點的數字序列。 * **特徵提取**:將音頻切分為 20 毫秒的幀,計算頻譜(Spectrum)而非波形,以確保識別穩定性。 * **模型猜測與解碼**:模型逐幀猜測音素,利用「空白符號(Blank)」解決一個音素跨越多幀的問題,並合併重複音素。 3. **定稿與斷句機制**: * 流式 ASR 可透過檢測連續的「空白符號」來判斷用戶是否停止說話(類似 VED 功能)。 * 若空白時間超過 300 毫秒,系統判定為語音結束並進行定稿(Final);否則視為話未說完,繼續接收輸入。 4. **流式與非流式的差異**: * **非流式(如 Whisper)**:擁有完整上下文,可前後印證並修正結果。 * **流式(Real-time ASR)**:僅能看到過去,無法預知未來,因此會處於「邊說邊改(In-term)」的狀態,確定部分顯示為 Final,不確定部分逐字顯示。 5. **中文識別挑戰與供應商選擇**: * 中文缺乏空格且同音字眾多,高度依賴上下文,這對缺乏完整上下文的流式模型構成挑戰。 * 建議根據語言場景選擇供應商:英文場景可考慮 Deepgram 等;中文場景建議使用阿里云、火山、騰訊等對中文優化較好的服務;方言項目需特別評估模型能力。 6. **模型訓練與組成**: * 模型由「聲學模型」(識別音素)與「語言模型」(區分同音字)組成。 * 透過大量標註數據進行反向傳播訓練,模型自行總結規律。 * 專業術語、人名或方言因訓練數據不足易出錯,可透過供應商提供的「熱詞表(Hotword List)」進行優化。 ## 詳細大綱 ### 一、 為何 Voice Agent 需要適時 ASR * **整段轉錄的局限性**:無法處理用戶打斷(Interruption),對 Voice Agent 的互動意義有限。 * **適時轉錄的必要性**:必須將音頻切成幀,逐幀拆解音素並串接成字,才能實現即時互動與反饋。 ### 二、 ASR 技術實現的三個步驟 1. **聲音數位化**: * 將聲波(氣壓變化)轉為數字。 * 採樣率為每秒 16,000 個點,形成一串整數。 2. **幀切分與頻譜特徵提取**: * 每幀長度設定為 20 毫秒(20ms)。 * 短時間內聲音特徵基本不變。 * **計算頻譜(Spectrum)**:人耳聽的是頻率成分。 * **原因**:大聲與小聲的波形不同,但頻譜成分分布相似;使用頻譜能讓模型識別更穩定。 3. **模型逐幀猜測與解碼**: * **逐幀猜測**:模型對每一幀獨立給出猜測(例如猜測是某個音素或空白)。 * **空白符號(Blank)的作用**: * 表示該幀沒有內容輸出。 * 解決一個音素跨越多個幀的問題(模型不需糾結一個字佔幾幀)。 * **解碼與合併**: * 合併重複音素,去掉空白符號。 * 範例:「理理理好好好」-> 合併為「你好」。 ### 三、 流式 ASR 的斷句與定稿機制 * **利用空白符號判斷語音活動(VED)**: * 流式 ASR 無需單獨運行 VED 模型。 * 若連續出現大量空白符號,代表用戶未說話。 * **定稿(Final)邏輯**: * 若空白時間超過 300 毫秒,認為這句話說完,進行定稿。 * 若未超過 300 毫秒,則認為話未說完,繼續接收後續輸入。 ### 四、 流式與非流式模型的差異 * **非流式模型(如 Whisper)**: * 拿到整段音頻,可以前後互相印證。 * 已知完整語境,可修正識別結果。 * **流式模型(Real-time ASR)**: * 只看過去,看不到未來。 * 必須邊說邊改(In-term 階段)。 * 無法確定後續內容(例如:聽到「乒乓」,後續可能是「球」、「球拍」、「桌」、「技術」)。 * 確定部分顯示為 Final,不確定部分逐字顯示在螢幕上供用戶查看。 ### 五、 中文識別挑戰與供應商選擇 * **中文識別難點**: * 中文缺乏空格,同音字扎堆。 * 高度依賴上下文區分同音字。 * 流式模型缺乏完整上下文,導致識別困難。 * **供應商選擇建議**: * **英文場景**:Deepgram、Yenion Live 等對英文效果較好。 * **中文場景**:建議使用阿里云、火山、騰訊等對中文製作較好的服務。 * **方言與特定語言**:需根據業務場景選擇模型(如粵語項目需評估模型對粵語的識別能力)。 * **本地部署**:理解原理有助於挑選本地模型(如提及的「歐拉瑪」接本地模型)。 ### 六、 ASR 的訓練與學習原理 * **訓練數據**: * 需要大量標註數據(Training Data)。 * 包含各種方言(東北話、天津話、上海話等)和普通話。 * **學習機制**: * **反向傳播**:反覆對照數據,調整參數。 * **無監督規律總結**:沒有人告訴模型音長什麼樣,規律是模型自己從數據中總結出來的。 * **模型組成的兩部分**: 1. **聲學模型(Acoustic Model)**:負責認這一幀是什麼音。 2. **語言模型(Language Model)**:負責在同音字中挑選更符合上下文的一個。 * **參數與準確性**: * 數據越多、參數越多,識別可能越準確。 * 模型學的是「見得多」,而非死記規則。 * 專業術語、人名、方言因訓練數據少,容易出錯。 * **熱詞表(Hotword List)**: * 供應商提供熱詞表以解決特定領域術語識別問題。 ## 工具 / 模型 / 名詞整理 * **技術/概念縮寫**: * **ASR** (Automatic Speech Recognition):自動語音識別。 * **Voice Agent**:語音代理/助手。 * **VED** (Voice Activity Detection):語音活動檢測(註:逐字稿提及此縮寫,通常業界慣例為 VAD,請見疑點)。 * **In-term**:逐字稿用詞,指即時/中間狀態(Intermediate)。 * **Final**:逐字稿用詞,指定稿狀態。 * **Blank**:空白符號,用於處理音素跨幀及作為靜音判斷依據。 * **Spectrum**:頻譜,聲音的頻率成分特徵。 * **Acoustic Model**:聲學模型,負責識別音素。 * **Language Model**:語言模型,負責上下文與同音字選擇。 * **Hotword List**:熱詞表,用於優化特定領域術語識別。 * **提及的模型/產品/供應商**: * **Whisper**:作為非流式模型的對比範例。 * **Deepgram**:提及對英文效果較好的供應商。 * **Yenion Live**:逐字稿原文,提及對英文效果較好的供應商(需查證正確名稱)。 * **阿里云**:建議用於中文場景的供應商。 * **火山**:指火山引擎,建議用於中文場景的供應商。 * **騰訊**:建議用於中文場景的供應商。 * **豆包**:提及用戶使用場景。 * **歐拉瑪**:逐字稿原文,疑為某本地模型或框架名稱(需查證)。 ## 操作流程整理 1. **輸入端處理**: * 捕捉聲波(氣壓變化)。 * 數位化:每秒採集 16,000 個點,轉為整數序列。 * 分幀:將音頻切分為 20 毫秒的幀。 * 特徵計算:計算每幀的頻譜(Spectrum),而非直接使用波形。 2. **模型推理與解碼**: * 模型逐幀獨立猜測音素或空白符號(Blank)。 * 引入 Blank 符號以處理音素跨幀情況。 * 解碼器合併重複音素,移除 Blank 符號,生成初步文本。 3. **流式狀態管理**: * **In-term 狀態**:顯示不確定部分,邊說邊改。 * **Final 狀態**:當檢測到連續空白符號超過 300 毫秒(判定為語音結束 VED),將當前結果定稿。 * 若未超過 300 毫秒,保持 In-term 狀態並繼續接收輸入。 4. **優化與部署**: * 根據業務場景(中文、英文、方言)選擇合適的供應商或本地模型(如歐拉瑪)。 * 針對特定領域術語,使用供應商提供的熱詞表(Hotword List)進行優化。 ## 值得注意的限制或風險 * **流式模型的上下文缺失**:由於流式模型無法預知未來內容,僅能基於過去資訊進行猜測,導致在中文同音字眾多且缺乏完整上下文的情況下,識別準確率可能下降。 * **定稿延遲與打斷處理**:300 毫秒的靜音閾值是用於定稿的依據,這可能影響對快速連續語句的處理靈敏度,或導致用戶在短暫停頓後被錯誤定稿。 * **特定領域識別風險**:專業術語、人名、方言因訓練數據相對較少,模型容易出錯,需依賴熱詞表或特定供應商優化。 * **供應商選擇偏差**:不同供應商對不同語言(如英文 vs. 中文)的優化程度不同,錯誤選擇供應商可能導致識別效果不佳。 ## 逐字稿辨識疑點 * **ICTT**:逐字稿中說「一般會說 ICTT」,通常語音轉文字縮寫為 STT 或 ASR,ICTT 可能為口誤或特定領域縮寫,需查證。 * **平譜 / 頻譜**:逐字稿多次出現「平譜」,結合上下文「不看波形,看頻率成分」,應指「頻譜」(Spectrum),但依規則保留原文或標註疑點。 * **升線模型 / 聲學模型**:逐字稿中交替使用「升線模型」和後文的「聲學模型」,前者可能為聽寫錯誤。 * **逐針 / 逐幀**:逐字稿中出現「逐針猜」,結合上下文「每一幀」,應指「逐幀」。 * **牛市的識別 / 流式識別**:逐字稿中出現「牛市的識別會邊縮邊改」,結合上下文對比 Whisper,應指「流式識別」。 * **VED**:逐字稿提到「不用單獨跑一個 VED」,通常語音活動檢測縮寫為 VAD (Voice Activity Detection),VED 可能為口誤。 * **歐拉瑪**:逐字稿提到「比如我們有歐拉瑪去接本地的模型」,此名稱較生僻,可能為特定本地模型名稱或聽寫錯誤(如 Ollama?),需查證。 * **Yenion Live**:逐字稿提及「包括 Yenion Live 這些」,可能指某特定產品或服務,需查證正確名稱。 * **真智**:逐字稿提到「就像教小孩真智」,語意不通,可能為「識字」或「知識」之聽寫錯誤。 ## 可延伸追問 1. 300 毫秒的靜音閾值(Blank 時間)是否為固定標準?在不同語速或語言場景下是否需要動態調整? 2. 對於「歐拉瑪」或「Yenion Live」等未明確指代的供應商或模型,其具體技術架構與優缺點為何? 3. 在中文同音字極多的情況下,除了依賴語言模型,是否有其他技術手段(如詞向量、特定預訓練)能提升流式 ASR 的準確率? 4. 熱詞表(Hotword List)的更新機制為何?是靜態配置還是支持動態學習? 5. 流式模型在處理長句時,如何平衡「即時反饋」與「最終準確性」之間的矛盾?