会話言語理解モデルの評価メトリック
データセットは 2 つに分割されています (トレーニング用セットとテスト用セット)。 トレーニング セットはモデルのトレーニングに使用され、テスト セットはトレーニング後のモデルのテストとして使用され、モデルのパフォーマンスと評価が計算されます。 テスト セットは、トレーニング プロセスを通じてモデルに導入されることはなく、新しいデータでモデルがテストされることを確認します。
モデルの評価は、トレーニングが正常に完了した後に自動的にトリガーされます。 評価プロセスでは、トレーニング済みモデルを使って、テスト セット内の発話でユーザー定義の意図とエンティティを予測することから始まります。 次に、プロセスではそれらを提供されたタグと比較して、真実のベースラインを確立します。 その結果が返されるので、モデルのパフォーマンスを確認することができます。 会話言語理解の評価には、次のメトリックが使われます。
精度: モデルの精密さまたは正確さを測定します。 これは、正しく識別された陽性 (真陽性) と識別されたすべての陽性との比率です。 精度メトリックによって、予測クラスのうち、正しくラベル付けされている数が明らかになります。
Precision = #True_Positive / (#True_Positive + #False_Positive)
リコール: 実際の陽性クラスを予測するモデルの能力を測定します。 これは、予測された真陽性とタグ付けされたものとの比率です。 リコール メトリックによって、予測クラスのうち、正しいものの数が明らかになります。
Recall = #True_Positive / (#True_Positive + #False_Negatives)
F1 スコア: F1 スコアは、精度とリコールの関数です。 精度とリコールのバランスを取るときに必要です。
F1 Score = 2 * Precision * Recall / (Precision + Recall)
精度、リコール、F1 スコアは、次のように計算されます。
- エンティティごとに個別 (エンティティ レベルの評価)。
- 意図ごとに個別 (意図レベルの評価)。
- モデル全体 (モデル レベルの評価)。
精度、リコール、評価の定義は、エンティティ レベル、意図レベル、モデル レベルのどの評価でも同じです。 ただし、真陽性、擬陽性、擬陰性 の数は異なる場合があります。 たとえば、次のようなテキストがあるとします。
例
- "ありがとうございます" と返事をしてください。
- "はい" と答えてください。
- Check my email please.
- Cynthia に先週のディナーが素晴らしかったとメールしてください。
- Mike にメールを送信してください。
使用される意図は、Reply
、sendEmail
、readEmail
です。 エンティティは contactName
と message
です。
このモデルでは、次のように予測されます。
発話 | 予測された意図 | 実際の意図 | 予測されたエンティティ | 実際のエンティティ |
---|---|---|---|---|
"ありがとうございます" と返事をしてください | 返信 | 返信 | thank you very much as message |
thank you very much as message |
"はい" と答えてください | sendEmail | 返信 | -- | yes as message |
Check my email please | readEmail | readEmail | -- | -- |
Cynthia に先週のディナーが素晴らしかったとメールしてください | 返信 | sendEmail | dinner last week was splendid as message |
contactName として cynthia 、message として dinner last week was splendid |
Mike にメールを送信してください | sendEmail | sendEmail | mike as message |
mike as contactName |
Reply 意図についての意図レベルの評価
キー | Count | 説明 |
---|---|---|
真陽性 | 1 | 発話 1 は、Reply として正しく予測されました。 |
偽陽性 | 1 | 発話 4 は、Reply として誤って予測されました。 |
検知漏れ | 1 | 発話 2 は、sendEmail として誤って予測されました。 |
[精度] = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 1) = 0.5
リコール = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 1) = 0.5
F1 スコア = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.5 * 0.5) / (0.5 + 0.5) = 0.5
sendEmail 意図についての意図レベルの評価
キー | Count | 説明 |
---|---|---|
真陽性 | 1 | 発話 5 は、sendEmail として正しく予測されました。 |
偽陽性 | 1 | 発話 2 は、sendEmail として誤って予測されました。 |
検知漏れ | 1 | 発話 4 は、Reply として誤って予測されました。 |
[精度] = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 1) = 0.5
リコール = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 1) = 0.5
F1 スコア = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.5 * 0.5) / (0.5 + 0.5) = 0.5
readEmail 意図についての意図レベルの評価
キー | Count | 説明 |
---|---|---|
真陽性 | 1 | 発話 3 は、readEmail として正しく予測されました。 |
偽陽性 | 0 | -- |
検知漏れ | 0 | -- |
精度 = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 0) = 1
リコール = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 0) = 1
F1 スコア = 2 * Precision * Recall / (Precision + Recall) = (2 * 1 * 1) / (1 + 1) = 1
contactName エンティティについてのエンティティ レベルの評価
キー | Count | 説明 |
---|---|---|
真陽性 | 1 | 発話 4 では、cynthia が contactName として正しく予測されました。 |
偽陽性 | 0 | -- |
検知漏れ | 1 | 発話 5 では、mike が message として誤って予測されました。 |
[精度] = #True_Positive / (#True_Positive + #False_Positive) = 1 / (1 + 0) = 1
リコール = #True_Positive / (#True_Positive + #False_Negatives) = 1 / (1 + 1) = 0.5
F1 スコア = 2 * Precision * Recall / (Precision + Recall) = (2 * 1 * 0.5) / (1 + 0.5) = 0.67
message エンティティについてのエンティティ レベルの評価
キー | Count | 説明 |
---|---|---|
真陽性 | 2 | 発話 1 では thank you very much が message として正しく予測され、発話 4 では dinner last week was splendid が message として正しく予測されました。 |
偽陽性 | 1 | 発話 5 では、mike が message として誤って予測されました。 |
検知漏れ | 1 | 発話 2 では yes が message として予測されませんでした。 |
[精度] = #True_Positive / (#True_Positive + #False_Positive) = 2 / (2 + 1) = 0.67
リコール = #True_Positive / (#True_Positive + #False_Negatives) = 2 / (2 + 1) = 0.67
F1 スコア = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.67 * 0.67) / (0.67 + 0.67) = 0.67
集合モデルのモデル レベルの評価
Key | Count | 説明 |
---|---|---|
真陽性 | 6 | すべての意図とエンティティの真陽性の合計。 |
偽陽性 | 3 | すべての意図とエンティティの擬陽性の合計。 |
検知漏れ | 4 | すべての意図とエンティティの擬陰性の合計。 |
[精度] = #True_Positive / (#True_Positive + #False_Positive) = 6 / (6 + 3) = 0.67
リコール = #True_Positive / (#True_Positive + #False_Negatives) = 6 / (6 + 4) = 0.60
F1 スコア = 2 * Precision * Recall / (Precision + Recall) = (2 * 0.67 * 0.60) / (0.67 + 0.60) = 0.63
混同行列
混同行列は、モデルのパフォーマンスの評価に使われる N x N 行列であり、N はエンティティまたは意図の数です。 この行列によって、予測されるラベルとモデルによって予測されたものが比較されます。 この行列より、モデルのパフォーマンスと、発生しているエラーの種類を、全体的に把握できます。
混同行列を使うと、互いに近すぎて、誤りが発生しやすい (あいまいな) 意図またはエンティティを識別できます。 この場合は、これらの意図またはエンティティをまとめて結合することを検討します。 結合できない場合は、モデルで両者を区別できるよう、両方の意図またはエンティティのタグ付けされた例を追加することを検討します。
次の図で強調されている対角線は、正しく予測されたエンティティであり、予測されたタグは実際のタグと同じです。
混同行列から意図レベルまたはエンティティ レベルとモデル レベルの評価メトリックを計算できます。
- 斜線の付いている値は、各意図またはエンティティの真陽性の値です。
- 意図またはエンティティの行の値の合計は (斜線を除く)、モデルの "擬陽性" です。
- 意図またはエンティティの列の値の合計は (斜線を除く)、モデルの擬陰性です。
同様に:
- モデルの真陽性は、すべての意図またはエンティティの真陽性の合計です。
- モデルの "擬陽性" は、すべての意図またはエンティティの "擬陽性" の合計です。
- モデルの擬陰性は、すべての意図またはエンティティの擬陰性の合計です。
ガイダンス
モデルをトレーニングした後、モデルを改善する方法に関するいくつかのガイダンスと推奨事項が表示されます。 ガイダンス セクションのすべてのポイントをカバーするモデルを作成することをおすすめします。
- トレーニング セットには十分なデータがある: 意図またはエンティティのラベル付きインスタンスがトレーニング データ内に 15 個未満の場合、その意図でモデルが適切にトレーニングされていないため、精度が低下する可能性があります。 この場合は、トレーニング セットにラベル付きデータを追加することを検討してください。 エンティティに学習済みコンポーネントがある場合のみ、エンティティにラベル付けされたデータを追加することを検討してください。 エンティティがリスト コンポーネント、事前構築済みコンポーネント、正規表現コンポーネントによってのみ定義されている場合、この推奨事項は適用されません。
- すべての意図またはエンティティがテスト セットに存在する: テスト データに意図またはエンティティのラベル付きインスタンスがない場合、テストされていないシナリオにより、モデル評価の包括性が低下する可能性があります。 すべてがテストされるように、モデル内のすべての意図とエンティティのテスト データを用意することを検討してください。
- 意図とエンティティの区別が明確でない: データが異なる意図またはエンティティに似ている場合、データが相互に誤って分類される頻度が上がるため、精度が低下する可能性があります。 次の意図またはエンティティを確認し、似ている場合は合成することを検討してください。 それ以外の場合は、互いをより適切に区別するために、さらに例を追加します。 [混同行列] タブで詳細なガイダンスを確認できます。 同じリスト コンポーネント、事前構築済みコンポーネント、または正規表現コンポーネントを共有しているために、同じスパンで 2 つのエンティティがいつも予測されている場合は、各エンティティに学習済みコンポーネントを追加し、それを必須にしてください。 詳細については、「エンティティ コンポーネント」を参照してください。