Custom Speech モデルの正確性をテストする

この記事では、ベースの音声テキスト変換モデルまたは独自のカスタム モデルの精度を定量的に測定し、向上させる方法について説明します。 精度をテストするには、オーディオと人間によってラベル付けされた文字起こしデータが必要です。 30 分から 5 時間の典型的な音声を用意する必要があります。

重要

テスト時には、システムによって文字起こしが行われます。 価格はサービス オファリングやサブスクリプション レベルによって異なるため、この点に留意することが重要です。 最新の詳細情報については、Azure AI サービスの価格に関する公式ページを常に参照してください。

テストを作成する

テストを作成することで、カスタム モデルの精度をテストできます。 テストには、オーディオ ファイルとそれに対応する文字起こしのコレクションが必要です。 カスタム モデルの精度は、音声テキスト変換ベース モデルまたは別のカスタム モデルと比較できます。 テスト結果を取得したら、音声認識結果と比較してワード エラー率 (WER) を評価します。

次の手順に従ってテストを作成します。

  1. Speech Studio にサインインします。

  2. [Custom Speech]> プロジェクト名 >[モデルをテストする] を選択します。

  3. [新しいテストを作成する] を選択します。

  4. [Evaluate accuracy](精度の評価)>[次へ] を選択します。

  5. オーディオと人間によってラベル付けされた文字起こしデータセットを 1 つ選択し、[次へ] を選択します。 使用可能なデータセットがない場合は、セットアップをキャンセルし、[Speech datasets](音声データセット) メニューに移動して、データセットをアップロードします。

    注意

    モデルで使用したものとは異なる音響データセットを選択することが重要です。 この方法を使用すると、モデルのパフォーマンスをより現実的に判断できます。

  6. 評価するモデルを最大で 2 つ選択し、[次へ] を選択します。

  7. テストの名前と説明を入力し、[次へ] を選択します。

  8. テストの詳細を確認し、[保存して閉じる] を選択します。

テストを作成するには、spx csr evaluation create コマンドを使用します。 次の手順に従って要求パラメーターを作成します。

  • project パラメーターを既存のプロジェクトの ID に設定します。 このパラメーターは、Speech Studio でテストを表示できるようにするためにも推奨されます。 spx csr project list コマンドを実行すると、使用できるプロジェクトを取得できます。
  • 必須の model1 パラメーターを、テストするモデルの ID に設定します。
  • 必須の model2 パラメーターを、テストする別のモデルの ID に設定します。 2 つのモデルを比較しない場合は、model1model2 の両方に同じモデルを使用します。
  • 必須の dataset パラメーターを、テストに使用するデータセットの ID に設定します。
  • language パラメーターを設定しない場合、Speech CLI では既定で "en-US" が設定されます。 このパラメーターは、データセットのコンテンツのロケールである必要があります。 ロケールを後から変更することはできません。 Speech CLI language パラメーターは、JSON 要求と応答の locale プロパティに対応します。
  • 必須の name パラメーターを設定します。 このパラメーターは、Speech Studio に表示される名前です。 Speech 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

テストを作成するには、Speech to text REST APIEvaluations_Create 操作を使用します。 次の手順に従って要求本文を作成します。

  • project プロパティを既存のプロジェクトの URI に設定します。 このプロパティは、Speech Studio でテストを表示できるようにするためにも推奨されます。 Projects_List 要求を行うと、使用できるプロジェクトを取得できます。
  • customProperties 内で testingKind プロパティを Evaluation に設定します。 Evaluation を指定しない場合、テストは品質検査テストとして扱われます。 testingKind プロパティが EvaluationInspection のどちらに設定されている場合でも、精度スコアには API を使用してアクセスできます (Speech Studio ではできません)。
  • 必須の model1 プロパティを、テストするモデルの URI に設定します。
  • 必須の model2 プロパティを、テストする別のモデルの URI にセットします。 2 つのモデルを比較しない場合は、model1model2 の両方に同じモデルを使用します。
  • 必須の dataset プロパティを、テストに使用するデータセットの URI にセットします。
  • 必須の locale プロパティを設定します。 このプロパティは、データセットのコンテンツのロケールである必要があります。 ロケールを後から変更することはできません。
  • 必須の displayName プロパティを設定します。 このプロパティは、Speech Studio に表示される名前です。

HTTP POST 要求は、次の例に示すように URI を使用して行います。 YourSubscriptionKey は実際の Speech リソース キーに、YourServiceRegion は実際の Speech リソース リージョンに置き換えたうえで、前述のように要求本文のプロパティを設定してください。

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. [Custom Speech]> プロジェクト名 >[モデルをテストする] を選択します。
  3. テスト名でリンクを選択します。
  4. テストが完了したら、状態が [成功] にセットされていれば、テスト対象の各モデルの WER の数値を含む結果が表示されます。

このページには、データセット内のすべての発話と、送信されたデータセットからの文字起こしと共に、認識結果が一覧表示されます。 挿入、削除、置換を含むさまざまなエラーの種類を切り替えることができます。 音声を聞きながら各列の認識結果を比較すると、どちらのモデルがニーズに合うか決定し、どのような追加のトレーニングと改善が必要かを判断できます。

テスト結果を取得するには、spx csr evaluation status コマンドを使用します。 次の手順に従って要求パラメーターを作成します。

  • 必須の evaluation パラメーターを、テスト結果を取得する評価の ID にセットします。

テスト結果を取得する Speech 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

テスト結果を取得するには、まず Speech to text REST APIEvaluations_Get 操作を使用します。

HTTP GET 要求は、次の例に示すように URI を使用して行います。 YourEvaluationId を評価 ID に置き換え、YourSubscriptionKey を Speech リソース キーに置き換えて、YourServiceRegion を Speech リソース リージョンに置き換えます。

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) で除算します。

誤りと識別された単語は、次の 3 つのカテゴリに分類されます。

  • 挿入 (I): 仮説トランスクリプトに誤って追加された単語
  • 削除 (D): 仮説トランスクリプトで検出されなかった単語
  • 置換 (S): 参照と仮説の間で置き換えられた単語

Speech Studio では、商に 100 が乗算され、パーセンテージとして表示されます。 Speech CLI と REST API の結果に 100 が乗算されることはありません。

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

人間によってラベル付けされた文字起こしと比較したときの、誤って識別された単語を示す例を次に示します。

誤って識別された単語の例を示しているスクリーンショット。

音声認識の結果は次のように誤っています。

  • 挿入 (I): "a" という単語が追加されました
  • 削除 (D): "are" という単語が削除されました
  • 置換 (S): "John" が 単語 "Jones" に置き換えられました

前の例のワード エラー率は 60% です。

WER 測定をローカルでレプリケートする場合、NIST スコアリング ツールキット (SCTK) の sclite ツールを使用できます。

エラーの解決と WER の向上

アプリ、ツール、または製品で使用しているモデルの品質を評価するために、機械認識結果の WER 計算を使用できます。 WER が 5 から 10% であれば、良質であると見なして、使用できます。 WER が 20% であれば許容範囲内ですが、追加のトレーニングを検討することをお勧めします。 WER が 30% 以上であれば、低品質であることを示しており、カスタマイズとトレーニングが必要です。

エラーがどのような分布になっているかが重要です。 多くの削除エラーが発生する場合は、通常、音声信号の強度が弱いことが原因です。 この問題を解決するには、ソースに近い場所で音声データを収集する必要があります。 挿入エラーは、音声が雑音の多い環境で録音され、クロストークが存在するために認識の問題が発生している可能性があることを意味します。 置換エラーは多くの場合、ドメイン固有の用語のサンプルが、人間によってラベル付けされた文字起こしまたは関連テキストとして十分に提供されていない場合に発生します。

個々のファイルを分析することで、どの種類のエラーが存在し、どのエラーが特定のファイルに固有であるかを判断できます。 ファイル レベルで問題を理解すると、改善の対象の特定に役立ちます。

トークン エラー率 (TER) を評価する

単語エラー率に加えて、トークン エラー率 (TER) という発展的な測定を使用して、最終的なエンドツーエンドの表示形式での品質を評価することもできます。 TER は語彙形式 (that will cost nine hundred dollars ではなく That will cost $900.) に加え、句読点、大文字小文字の区別、ITN などの表示形式の側面も考慮に入れます。 音声テキスト変換での表示出力フォーマットの詳細を学習します。

TER は、認識中に特定された誤ったトークンの数を数え、その合計を、人間によってラベル付けされた音声テキスト内に存在するトークンの総数 (N) で除算します。

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

TER 計算の数式も WER に似ています。 唯一の違いは、TER は単語レベルではなくトークン レベルに基づいて計算されるということです。

  • 挿入 (I): 仮音声テキストに誤って追加されたトークンの数
  • 削除 (D): 仮音声テキストで検出されなかったトークンの数
  • 置き換え (S): 参照と仮音声テキストの間で置き換えられたトークンの数

実際のケースでは、目的とする改善を行うために WER と TER の両方の結果を分析できます。

Note

TER を測定するには、音声と音声テキストのテスト データに、句読点、大文字小文字の区別、ITN などの表示フォーマットを持つ音声テキストが含まれていることを確認する必要があります。

シナリオの結果の例

音声認識のシナリオは、オーディオの品質と言語 (ボキャブラリと話し方) によって異なります。 次の表は、4 つの一般的なシナリオを示しています。

シナリオ 音質 ボキャブラリ 話し方
コール センター 低、8 kHz は、1 つのオーディオ チャネルに 2 人の人がいる可能性があり、圧縮できます。 狭い。ドメインと製品に固有 会話形式。ゆるい構成
音声アシスタント (Cortana、ドライブスルー ウィンドウなど) 高 (16 kHz) エンティティ ヘビー (曲のタイトル、製品、場所) 明確に述べられる単語と語句
音声入力 (インスタント メッセージ、メモ、検索) 高 (16 kHz) 多様 メモ取り
動画の字幕 多様 (さまざまなマイクの使用、音楽の追加など) 多様 (会議、朗読、音楽の歌詞など) 読み上げ、事前に準備、またはゆるい構成

さまざまなシナリオでさまざまな品質の結果が生成されます。 次の表では、これら 4 つのシナリオのコンテンツが WER でどのように評価されるかを調べます。 この表は、各シナリオで最も一般的なエラーの種類を示しています。 挿入、置換、および削除のエラー率は、モデルを改善するためにどのような種類のデータを追加すればよいかを判断するのに役立ちます。

シナリオ 音声認識の品質 挿入エラー 削除エラー 置換エラー
コール センター Medium
(< 30% WER)
低 (バックグラウンドで他の人間が話している場合を除く) 高くなる可能性あり。 コール センターは雑音を伴う場合があり、話者がオーバーラップしてモデルが混同される可能性がある 中。 これらのエラーは、製品や人々の名前によって生じる可能性がある
音声アシスタント
(< 10% WER の可能性あり)
中 (曲のタイトル、製品名、または場所による)
ディクテーション
(< 10% WER の可能性あり)
動画の字幕 動画の種類によって異なる (< WER 50% の可能性あり) 音楽、ノイズ、マイクの品質によって高くなる可能性がある 専門用語で、これらのエラーが引き起こされる可能性がある

次の手順