# 影片筆記:ASR模型如何计算字错率和词错率 | 语音识别模型如何判断准不准确 | 英语词错率计算 | 中文字错率计算 ## ⚠️ 可先使用,仍有待修正項目 本筆記已完成可閱讀的逐字稿與時間跳轉;下列為待處理問題,建議播放原片確認。 - 待修正:逐字稿全文快速校讀未完成(已保留自動字幕/原始逐字稿並繼續生成筆記。;未完成的全文速讀項目可在精進模式回聽確認。) - 待修正:部分時間軸可能不精確(unit 146: 10 chars owns 10.120s (max 8.333s)) ## 一句話總結 影片講解如何使用 Python 開源庫 `jiwer` 計算自動語音識別(ASR)的「字錯率」(CER)與「詞錯率」(WER),並強調針對不同語言特性(如中文無空格、數字格式差異)進行數據正規化處理的重要性。 ## 核心重點 * **評估指標選擇**: * **詞錯率(WER)**:適用於字詞間有明確空格分隔的語言,如英文、藏語。 * **字錯率(CER)**:適用於字詞間緊密相連、無空格分隔的語言,如中文。 * **數據預處理與正規化**: * 在計算錯誤率前,必須對預測文本與標註文本進行正規化。 * **英文處理**:統一轉為小寫,並使用正則表達式將多個連續空格合併為單一空格。 * **中文處理**:無需轉小寫,但需處理數字格式統一問題。 * **數字格式統一**: * ASR 模型可能將數字轉寫為中文(如「六十一」),而標註為阿拉伯數字(如「61」),導致計算錯誤。 * 使用 `cn2an` 庫將中文數字與阿拉伯數字進行統一轉換,確保預測與標註格式一致。 * **標點符號處理**: * 若模型不輸出標點符號(如 `Qwen2-Audio`),則無需處理。 * 若模型輸出標點符號(如 `Whisper` 或 `SenseVoiceSmall`),需在計算前去除標點符號。 * **指標定義區分**: * **平均字錯率**:計算每一句話的字錯率,求和後除以總句數。 * **整體字錯率**:直接調用函數,將所有預測與標註文本作為整體進行計算。 ## 詳細大綱 ### I. 前言與評估工具介紹 * 歡迎觀眾,說明本期主題:ASR 中的字錯率(CER)與詞錯率(WER)計算方法及適用場景。 * 介紹評估工具:Python 依賴庫 `jiwer`。 ### II. 詞錯率(WER)的計算流程 * **模型推理**: * 加載模型 checkpoint(範例為 `Qwen2-Audio`)。 * 調用 `transcribe` 函數對音頻進行推理,獲取轉寫結果。 * **數據結構**: * 讀取 JSON 格式文件(訓練集/驗證集/測試集)。 * 數據格式為列表,元素為字典,包含 `audio`(音頻路徑)與 `text`(標註文本)。 * **計算步驟**: * 遍歷數據,對音頻進行推理。 * 將推理結果與標註文本傳入 `jiwer` 的 WER 計算函數。 * **正規化處理**: * 英文字母統一轉為小寫。 * 使用正則表達式將多個連續空格合併為單一空格。 * 輸出保留四位小數的詞錯率。 ### III. 字錯率(CER)的計算與適用場景 * **適用場景判斷**: * **詞錯率(WER)**:適用於字詞間有空格間隔的語言(如英文、藏語)。 * **字錯率(CER)**:適用於字詞間緊密相連、無空格的語言(如中文)。 * **中文數據的特殊處理**: * **數字統一化問題**:ASR 輸出可能將數字轉寫為中文(如「六十一」),而標註為阿拉伯數字(如「61」),導致計算錯誤。 * **解決方案**:使用 `cn2an` 庫進行統一轉換。 * 將中文數字轉為阿拉伯數字。 * 或將阿拉伯數字轉為中文數字表示。 * 目標是確保標註與預測的數字格式一致。 * **大小寫處理**:中文無大小寫區分,無需執行 `lower()` 操作。 ### IV. 其他注意事項與評估指標定義 * **編碼格式**:讀取 JSON/TXT 文件時,建議使用 `UTF-8` 編碼。 * **標點符號處理**: * 若模型(如 `Qwen2-Audio`)不輸出標點符號,則無需特別處理。 * 若模型(如 `Whisper` 或 `SenseVoiceSmall`)輸出標點符號,需在計算前去除標點符號,再進行評估。 * **指標定義區分**: * **平均字錯率(Average CER)**:計算每一句話的字錯率,求和後除以總句數。 * **整體字錯率(Overall CER)**:直接調用 `jiwer` 的 CER 函數,將所有預測與標註文本作為整體進行計算。 ## 工具 / 模型 / 名詞整理 | 類別 | 名稱/版本 | 備註/原文聽寫 | | :--- | :--- | :--- | | **Python 庫** | `jiwer` | 用於計算 WER 和 CER 的開源依賴 | | **Python 庫** | `cn2an` | 用於中文數字與阿拉伯數字轉換的依賴 | | **AI 模型** | `Qwen2-Audio` | 原文聽寫為「簽問3A上」,用於語音轉文字推理 | | **AI 模型** | `Proformer` | 原文聽寫為「Prolformer」,用於計算字錯率 | | **AI 模型** | `Whisper` | 原文聽寫為「Valienfout」或「Valienfout Nonono2512」,指能輸出標點符號的模型 | | **AI 模型** | `SenseVoiceSmall` | 原文聽寫為「Sanswisemall」,指能輸出標點符號的模型 | | **文件格式** | JSON | 訓練/測試集數據格式 | | **編碼格式** | UTF-8 | 原文聽寫為「YouTube-8」,建議使用的文件編碼 | ## 操作流程整理 1. **準備數據**: * 讀取包含音頻路徑與標註文本的 JSON 文件(建議 UTF-8 編碼)。 * 數據結構為列表,元素為字典(原文聽寫為「design 格式」)。 2. **模型推理**: * 加載模型 checkpoint(如 `Qwen2-Audio`)。 * 調用 `transcribe` 函數對音頻進行推理,獲取轉寫結果。 3. **數據正規化**: * **英文**:統一轉為小寫,合併多餘空格。 * **中文**:使用 `cn2an` 庫統一數字格式(中文數字與阿拉伯數字互轉)。 * **標點處理**:若模型輸出標點,需先去除標點符號。 4. **計算錯誤率**: * 使用 `jiwer` 庫計算 WER 或 CER。 * 根據需求選擇計算「平均字錯率」(逐句計算後平均)或「整體字錯率」(整體計算)。 5. **輸出結果**: * 輸出保留四位小數的錯誤率數值。 ## 值得注意的限制或風險 * **數字格式不一致導致誤判**:若未使用 `cn2an` 等工具統一數字格式,ASR 將「六十一」轉為文字而標註為「61」,會被錯誤計為高錯誤率。 * **標點符號干擾**:若模型輸出標點而評估時未去除,會導致錯誤率計算偏高或不準確。 * **語言特性誤用指標**:對中文使用 WER(詞錯率)可能不適用,應使用 CER(字錯率)。 ## 逐字稿辨識疑點 * **簽問3A上**:聽寫為「簽問3A上」,推測可能指代 `Qwen2-Audio` 或類似模型,但需查證。 * **尺壽率 / 持錯率 / 磁數率 / 持續率 / 辭受率 / 自受率 / 自措率 / 自收率**:逐字稿中對 CER 和 WER 的稱呼極度混亂,出現多種聽寫變體(如「尺壽率」、「持錯率」、「磁數率」等),需根據上下文判斷是否均指「字錯率」或「詞錯率」。 * **Prolformer**:聽寫為「Prolformer」,通常語音模型為 `Conformer` 或 `Transformer` 變體,需查證具體模型名稱。 * **Valienfout / Valienfout Nonono2512**:聽寫為「Valienfout」,結合上下文「輸出這個Valienfout」及「不能輸出」,極大機率是指 `Whisper` 模型或其特定版本/變體,但需查證。 * **Sanswisemall**:聽寫為「Sanswisemall」,結合上下文指代另一款能輸出標點的模型,需查證是否為 `SenseVoiceSmall` 或其他模型。 * **YouTube-8**:聽寫為「YouTube-8」,在討論文件編碼時出現,極大機率是指 `UTF-8` 編碼,但需查證。 * **Jeternel 文件**:聽寫為「Jeternel文件」,指代 JSON 格式的文件。 * **design 格式**:聽寫為「design 格式」,指代字典(Dictionary)格式。 * **A3 模型**:聽寫為「A3 模型」,指代前述的推理模型。 * **小寫 / lower**:講者提到「不用加這個 lower 也是可以的」,指中文處理時無需轉小寫。 * **互相錄虎皮尾**:結尾口語,聽寫為「互相錄虎皮尾」,可能為「互相交流/關注」的誤聽。 ## 可延伸追問 * `jiwer` 庫在處理極端長文本或特殊字符時的表現如何? * 除了 `cn2an`,是否有其他更高效的方法處理中文數字與阿拉伯數字的轉換? * 對於混合語言(如中英混排)的語音識別,應如何平衡 WER 與 CER 的計算? * 不同模型(如 `Qwen2-Audio` 與 `Whisper`)在標點符號輸出上的具體差異對評估結果的影響有多大?