Share via


測試自定義語音模型的精確度

在本文中,您會了解如何以量化方式測量並改善基礎語音轉換文字模型或您自己的自訂模型的正確性。 需要音訊 + 人工標記的轉錄資料,才能測試正確性。 您應該提供 30 分鐘到 5 小時的代表性音訊。

重要

進行測試時,系統會執行轉錄。 因為每個服務供應項目和訂用帳戶層級的定價有所不同,所以請務必牢記這一點。 請一律參閱官方的 Azure AI 服務價格,以取得最新的詳細資料

建立測試

您可以藉由建立測試來測試自訂模型的正確性。 測試需要音訊檔案的集合及其對應的轉錄。 您可以比較語音轉換文字基礎模型與自訂模型或其他自訂模型的正確性。 取得測試結果之後,請評估相較於語音辨識結果的字組錯誤率 (WER)。

遵循下列步驟來建立測試:

  1. 登入 Speech Studio

  2. 選取 [自定義語音> 您的專案名稱 >測試模型]。

  3. 選取 [建立新的測試]

  4. 選取 [評估正確性]> [下一步]

  5. 選取一個音訊 + 人工標記的轉錄資料集,然後選取 [下一步]。 如果沒有可用的資料集,請取消設定,然後前往 [語音資料集] 功能表以上傳資料集

    注意

    請務必選取與您用於模型不同的原音資料集。 此方法可以提供更實際的方式來了解模型的效能。

  6. 選取最多兩個要評估的模型,然後選取 [下一步]

  7. 輸入測試名稱和描述,然後選取 [下一步]

  8. 檢閱測試詳細資料,然後選取 [儲存並關閉]

若要建立測試,請使用 spx csr evaluation create 命令。 根據下列指示來建構要求參數:

  • project 參數設定為現有專案的識別碼。 建議使用此參數,以便您也可以在Speech Studio中檢視測試。 您可以執行 spx csr project list 命令來取得可用的專案。
  • 將必要的 model1 參數設定為您想要測試之模型的識別碼。
  • 將必要的 model2 參數設定為您想要測試之另一個模型的識別碼。 如果您不想比較兩個模型,請針對 model1model2 使用相同的模型。
  • 將必要的 dataset 參數設定為您想要用於測試之資料集的識別碼。
  • language設定 參數,否則語音 CLI 預設會設定 「en-US」。。 此參數應該是數據集內容的地區設定。 稍後無法變更此地區設定。 語音 CLI language 參數會對應至 JSON 要求和回應中的 locale 屬性。
  • 設定必要的 name 參數。 此參數是Speech Studio中顯示的名稱。 語音 CLI name 參數會對應至 JSON 要求和回應中的 displayName 屬性。

以下是建立測試的範例語音 CLI 命令:

spx csr evaluation create --api-version v3.1 --project 9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226 --dataset be378d9d-a9d7-4d4a-820a-e0432e8678c7 --model1 ff43e922-e3e6-4bf0-8473-55c08fd68048 --model2 1aae1070-7972-47e9-a977-87e3b05c457d --name "My Evaluation" --description "My Evaluation Description"

您應該會收到下列格式的回應本文:

{
  "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca",
  "model1": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/ff43e922-e3e6-4bf0-8473-55c08fd68048"
  },
  "model2": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
  },
  "dataset": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/datasets/be378d9d-a9d7-4d4a-820a-e0432e8678c7"
  },
  "transcription2": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/transcriptions/6eaf6a15-6076-466a-83d4-a30dba78ca63"
  },
  "transcription1": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/transcriptions/0c5b1630-fadf-444d-827f-d6da9c0cf0c3"
  },
  "project": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/projects/9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226"
  },
  "links": {
    "files": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca/files"
  },
  "properties": {
    "wordErrorRate2": -1.0,
    "wordErrorRate1": -1.0,
    "sentenceErrorRate2": -1.0,
    "sentenceCount2": -1,
    "wordCount2": -1,
    "correctWordCount2": -1,
    "wordSubstitutionCount2": -1,
    "wordDeletionCount2": -1,
    "wordInsertionCount2": -1,
    "sentenceErrorRate1": -1.0,
    "sentenceCount1": -1,
    "wordCount1": -1,
    "correctWordCount1": -1,
    "wordSubstitutionCount1": -1,
    "wordDeletionCount1": -1,
    "wordInsertionCount1": -1
  },
  "lastActionDateTime": "2022-05-20T16:42:43Z",
  "status": "NotStarted",
  "createdDateTime": "2022-05-20T16:42:43Z",
  "locale": "en-US",
  "displayName": "My Evaluation",
  "description": "My Evaluation Description"
}

回應本文中最上層 self 屬性是評估的 URI。 使用此 URI 來取得專案和測試結果的詳細資料。 您也可以使用此 URI 來更新或刪除評估。

如需使用評估的語音 CLI 說明,請執行下列命令:

spx help csr evaluation

若要建立測試,請使用語音轉換文字 REST APIEvaluations_Create 作業。 根據下列指示來建構要求本文:

  • project 屬性設定為現有專案的 URI。 建議使用這個屬性,以便您也可以在Speech Studio中檢視測試。 您可以提出 Projects_List 要求以取得可用的專案。
  • customProperties 內將 testingKind 屬性設定為 Evaluation。 如果您未指定 Evaluation,則會將測試視為品質檢查測試。 不論 testingKind 屬性是設定為 EvaluationInspection,還是未設定,您都可以透過 API 存取正確性分數,但無法在 Speech Studio 中存取。
  • 將必要的 model1 屬性設定為您想要測試的模型的 URI。
  • 將必要的 model2 屬性設定為您想要測試的另一個模型的 URI。 如果您不想比較兩個模型,請針對 model1model2 使用相同的模型。
  • 將必要的 dataset 屬性設定為您想要用於測試的資料集的 URI。
  • 設定必要的 locale 屬性。 此屬性應該是數據集內容的地區設定。 稍後無法變更此地區設定。
  • 設定必要的 displayName 屬性。 此屬性是Speech Studio中顯示的名稱。

使用 URI 提出 HTTP POST 要求,如下列範例所示。 以您的語音資源金鑰取代 YourSubscriptionKey、以您的語音資源區域取代 YourServiceRegion,並設定要求本文屬性,如前所述。

curl -v -X POST -H "Ocp-Apim-Subscription-Key: YourSubscriptionKey" -H "Content-Type: application/json" -d '{
  "model1": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/ff43e922-e3e6-4bf0-8473-55c08fd68048"
  },
  "model2": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
  },
  "dataset": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/datasets/be378d9d-a9d7-4d4a-820a-e0432e8678c7"
  },
  "project": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/projects/9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226"
  },
  "displayName": "My Evaluation",
  "description": "My Evaluation Description",
  "customProperties": {
    "testingKind": "Evaluation"
  },
  "locale": "en-US"
}'  "https://YourServiceRegion.api.cognitive.microsoft.com/speechtotext/v3.1/evaluations"

您應該會收到下列格式的回應本文:

{
  "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca",
  "model1": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/ff43e922-e3e6-4bf0-8473-55c08fd68048"
  },
  "model2": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
  },
  "dataset": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/datasets/be378d9d-a9d7-4d4a-820a-e0432e8678c7"
  },
  "transcription2": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/transcriptions/6eaf6a15-6076-466a-83d4-a30dba78ca63"
  },
  "transcription1": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/transcriptions/0c5b1630-fadf-444d-827f-d6da9c0cf0c3"
  },
  "project": {
    "self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/projects/9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226"
  },
  "links": {
    "files": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca/files"
  },
  "properties": {
    "wordErrorRate2": -1.0,
    "wordErrorRate1": -1.0,
    "sentenceErrorRate2": -1.0,
    "sentenceCount2": -1,
    "wordCount2": -1,
    "correctWordCount2": -1,
    "wordSubstitutionCount2": -1,
    "wordDeletionCount2": -1,
    "wordInsertionCount2": -1,
    "sentenceErrorRate1": -1.0,
    "sentenceCount1": -1,
    "wordCount1": -1,
    "correctWordCount1": -1,
    "wordSubstitutionCount1": -1,
    "wordDeletionCount1": -1,
    "wordInsertionCount1": -1
  },
  "lastActionDateTime": "2022-05-20T16:42:43Z",
  "status": "NotStarted",
  "createdDateTime": "2022-05-20T16:42:43Z",
  "locale": "en-US",
  "displayName": "My Evaluation",
  "description": "My Evaluation Description",
  "customProperties": {
    "testingKind": "Evaluation"
  }
}

回應本文中最上層 self 屬性是評估的 URI。 使用此 URI 來取得評估專案和測試結果的詳細資料。 您也可以使用此 URI 來更新刪除評估。

取得測試結果

您應該取得測試結果,並評估相較於語音辨識結果的字組錯誤率 (WER)。

遵循下列步驟來取得測試結果:

  1. 登入 Speech Studio
  2. 選取 [自定義語音> 您的專案名稱 >測試模型]。
  3. 依測試名稱選取連結。
  4. 測試完成之後,如設定為 [成功] 的狀態所指出,您應該會看到結果,其中包含每個測試模型的 WER 數字。

此頁面會列出資料集中的所有語句和辨識結果,以及來自所提交資料集的轉錄。 您可以切換各種錯誤類型,包括插入、刪除和替代。 藉由聆聽音訊並比較每個數據行中的辨識結果,您可以決定哪一個模型符合您的需求,並判斷需要更多訓練和改進。

若要取得測試結果,請使用 spx csr evaluation status 命令。 根據下列指示來建構要求參數:

  • 將必要的 evaluation 參數設定為您要取得測試結果之評估的識別碼。

以下是取得測試結果的範例語音 CLI 命令:

spx csr evaluation status --api-version v3.1 --evaluation 8bfe6b05-f093-4ab4-be7d-180374b751ca

回應本文中會傳回字組錯誤率和更多詳細資料。

您應該會收到下列格式的回應本文:

{
	"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca",
	"model1": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/ff43e922-e3e6-4bf0-8473-55c08fd68048"
	},
	"model2": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
	},
	"dataset": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/datasets/be378d9d-a9d7-4d4a-820a-e0432e8678c7"
	},
	"transcription2": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/transcriptions/6eaf6a15-6076-466a-83d4-a30dba78ca63"
	},
	"transcription1": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/transcriptions/0c5b1630-fadf-444d-827f-d6da9c0cf0c3"
	},
	"project": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/projects/9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226"
	},
	"links": {
		"files": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca/files"
	},
	"properties": {
		"wordErrorRate2": 4.62,
		"wordErrorRate1": 4.6,
		"sentenceErrorRate2": 66.7,
		"sentenceCount2": 3,
		"wordCount2": 173,
		"correctWordCount2": 166,
		"wordSubstitutionCount2": 7,
		"wordDeletionCount2": 0,
		"wordInsertionCount2": 1,
		"sentenceErrorRate1": 66.7,
		"sentenceCount1": 3,
		"wordCount1": 174,
		"correctWordCount1": 166,
		"wordSubstitutionCount1": 7,
		"wordDeletionCount1": 1,
		"wordInsertionCount1": 0
	},
	"lastActionDateTime": "2022-05-20T16:42:56Z",
	"status": "Succeeded",
	"createdDateTime": "2022-05-20T16:42:43Z",
	"locale": "en-US",
	"displayName": "My Evaluation",
	"description": "My Evaluation Description",
	"customProperties": {
		"testingKind": "Evaluation"
	}
}

如需使用評估的語音 CLI 說明,請執行下列命令:

spx help csr evaluation

若要取得測試結果,請從使用語音轉換文字 REST APIEvaluations_Get 作業開始。

使用 URI 提出 HTTP GET 要求,如下列範例所示。 以您的評估識別碼取代 YourEvaluationId、以您的語音資源金鑰取代 YourSubscriptionKey,並以您的語音資源區域取代 YourServiceRegion

curl -v -X GET "https://YourServiceRegion.api.cognitive.microsoft.com/speechtotext/v3.1/evaluations/YourEvaluationId" -H "Ocp-Apim-Subscription-Key: YourSubscriptionKey"

回應本文中會傳回字組錯誤率和更多詳細資料。

您應該會收到下列格式的回應本文:

{
	"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca",
	"model1": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/ff43e922-e3e6-4bf0-8473-55c08fd68048"
	},
	"model2": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/models/base/1aae1070-7972-47e9-a977-87e3b05c457d"
	},
	"dataset": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/datasets/be378d9d-a9d7-4d4a-820a-e0432e8678c7"
	},
	"transcription2": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/transcriptions/6eaf6a15-6076-466a-83d4-a30dba78ca63"
	},
	"transcription1": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/transcriptions/0c5b1630-fadf-444d-827f-d6da9c0cf0c3"
	},
	"project": {
		"self": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/projects/9f8c4cbb-f9a5-4ec1-8bb0-53cfa9221226"
	},
	"links": {
		"files": "https://eastus.api.cognitive.microsoft.com/speechtotext/v3.1/evaluations/8bfe6b05-f093-4ab4-be7d-180374b751ca/files"
	},
	"properties": {
		"wordErrorRate2": 4.62,
		"wordErrorRate1": 4.6,
		"sentenceErrorRate2": 66.7,
		"sentenceCount2": 3,
		"wordCount2": 173,
		"correctWordCount2": 166,
		"wordSubstitutionCount2": 7,
		"wordDeletionCount2": 0,
		"wordInsertionCount2": 1,
		"sentenceErrorRate1": 66.7,
		"sentenceCount1": 3,
		"wordCount1": 174,
		"correctWordCount1": 166,
		"wordSubstitutionCount1": 7,
		"wordDeletionCount1": 1,
		"wordInsertionCount1": 0
	},
	"lastActionDateTime": "2022-05-20T16:42:56Z",
	"status": "Succeeded",
	"createdDateTime": "2022-05-20T16:42:43Z",
	"locale": "en-US",
	"displayName": "My Evaluation",
	"description": "My Evaluation Description",
	"customProperties": {
		"testingKind": "Evaluation"
	}
}

評估文字錯誤率 (WER)

測量模型正確性的產業標準是字組錯誤率 (WER)。 WER 會計算辨識期間所識別的錯誤字組數目,並將總和除以人工標記的轉錄 (N) 中提供的字組總數。

未正確識別的字組分為三種類別:

  • 插入 (I):未在假設轉錄內容中正確新增的字組
  • 刪除 (D):未在假設轉錄內容中偵測到的字組
  • 替代 (S):已在參考和假設之間替代的字組

在 Speech Studio 中,商數會乘以 100,並顯示為百分比。 語音 CLI 和 REST API 結果不會乘以 100。

$$ WER = {{I+D+S}\over N} \times 100 $$

以下範例顯示相較於與人工標記的轉錄,未正確識別的字組:

顯示未正確識別字組範例的螢幕快照。

語音辨識結果可能發生如下錯誤:

  • 插入 (I):已新增字組 "a"
  • 刪除 (D):已刪除字組 "are"
  • 替代 (S):已將 "Jones" 字組替代為 "John"

前述範例的字組錯誤率是 60%。

如果您想要在本機複寫 WER 測量,您可以使用 NIST 評分工具組 (SCTK) 提供的 sclite 工具。

解決錯誤並改善 WER

您可以使用機器辨識結果中的 WER 計算,來評估與應用程式、工具或產品搭配使用的模型品質。 5-10% 的 WER 被視為品質良好,並可立即使用。 20% 的 WER 是可接受的,但您可能想要考慮更多訓練。 30% 以上的 WER 表示品質不佳,需要自訂和定型。

錯誤的分佈方式很重要。 遇到許多刪除錯誤時,通常是由於弱式音訊信號強度所致。 若要解決此問題,您必須收集接近來源的音訊資料。 插入錯誤表示音訊是在嘈雜的環境中錄製,並且可能存在串音,從而導致辨識問題。 當提供網域特定字詞的樣本不足時,通常會發生替代錯誤,做為人為標記的轉譯或相關文字。

藉由分析個別檔案,您可以判斷哪種類型的錯誤存在,以及哪些錯誤是特定檔案特有的。 瞭解檔案層級的問題可協助您以改進為目標。

評估權杖錯誤率 (TER)

除了文字錯誤率之外,您也可以使用令牌錯誤率 (TER)延伸測量來評估最終端對端顯示格式的品質。 除了語彙格式(That will cost $900. 而非 that will cost nine hundred dollars),TER 還考慮到標點符號、大寫和 ITN 等顯示格式層面。 深入瞭解使用 語音轉換文字顯示輸出格式設定。

TER 會計算辨識期間識別的不正確令牌數目,並將總和除以人為標記文字記錄中提供的令牌總數(N)。

$$ TER = {{I+D+S} N}\over\times 100 $$

TER 計算的公式也類似於 WER。 唯一的差別在於 TER 是根據令牌層級而不是文字層級來計算。

  • 插入 (I):假設文字記錄中未正確新增的標記
  • 刪除 (D):假設文字記錄中未偵測到的標記
  • 替代 (S):參考與假設之間替代的令牌

在真實案例中,您可以分析 WER 和 TER 結果,以取得所需的改善。

注意

若要測量 TER,您必須確定 音訊 + 文字記錄測試數據 包含顯示格式的文字記錄,例如標點符號、大寫和 ITN。

範例案例結果

語音辨識案例會依音訊品質和語言 (詞彙和說話風格) 而有所不同。 下表將檢查四個常見的案例:

案例 音訊品質 詞彙 說話風格
話務中心 低,8 kHz,可能是 1 個音訊通道上有 2 個人,可以壓縮 狹隘,網域和產品特有的 對話,結構鬆散
語音助理,例如 Cortana 或快速視窗 高,16 kHz 大量實體 (歌曲名稱、產品、位置) 清楚陳述的字組和片語
聽寫 (即時訊息、筆記、搜尋) 高,16 kHz 各式各樣 做筆記
影片隱藏式輔助字幕 各式各樣,包括不同的麥克風使用、添加的的音樂 各式各樣,來自會議、朗誦演講、音樂歌詞 閱讀、準備或結構鬆散

不同的案例會產生不同的品質結果。 下表會檢查這四個案例中的內容如何以 WER 進行評估。 此表格顯示每個案例中最常見的錯誤類型。 插入、替代和刪除錯誤率可協助您判斷要新增哪些資料類型來改善模型。

案例 語音辨識品質 插入錯誤 刪除錯誤 替代錯誤
話務中心
(< 30% WER)
低,但其他人在背景中交談時除外 可以很高。 話務中心可能嘈雜,而且重疊的喇叭可能會使模型混淆 一般。 產品和人名可能會導致這些錯誤
語音助理
(可以是 < 10% WER)
中,因為歌名、產品名稱或位置
聽寫
(可以是 < 10% WER)
影片隱藏式輔助字幕 取決於影片類型 (可以是 < 50% WER) 由於音樂、噪音、麥克風品質,因此可能很高 Jargon 可能會導致這些錯誤

下一步