Share via


会話言語理解モデルの評価メトリック

データセットは 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 スコアは、次のように計算されます。

  • エンティティごとに個別 (エンティティ レベルの評価)
  • 意図ごとに個別 (意図レベルの評価)
  • モデル全体 (モデル レベルの評価)。

精度、リコール、評価の定義は、エンティティ レベル、意図レベル、モデル レベルのどの評価でも同じです。 ただし、"真陽性"、"擬陽性"、"擬陰性" の数は異なる場合があります。 たとえば、次のようなテキストがあるとします。

  • Make a response with thank you very much.
  • reply with saying yes.
  • Check my email please.
  • email to cynthia that dinner last week was splendid.
  • send email to mike

使われる意図は、ReplysendEmailreadEmail です。 エンティティは、contactNamemessage です。

このモデルでは、次のように予測されます。

発話 予測された意図 実際の意図 予測されたエンティティ 実際のエンティティ
Make a response with thank you very much 返信 返信 thank you very much as message thank you very much as message
reply with saying yes sendEmail 返信 -- yes as message
Check my email please readEmail readEmail -- --
email to cynthia that dinner last week was splendid 返信 sendEmail dinner last week was splendid as message contactName として cynthiamessage として dinner last week was splendid
send email to mike sendEmail sendEmail mike as message mike as contactName

Reply 意図についての意図レベルの評価

Key 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 意図についての意図レベルの評価

Key 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 意図についての意図レベルの評価

Key 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 エンティティについてのエンティティ レベルの評価

Key Count 説明
真陽性 1 発話 4 では、cynthiacontactName として正しく予測されました
偽陽性 0 --
偽陰性 1 発話 5 では、mikemessage として誤って予測されました

精度 = #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 エンティティについてのエンティティ レベルの評価

Key Count 説明
真陽性 2 発話 1 では thank you very muchmessage として正しく予測され、発話 4 では dinner last week was splendidmessage として正しく予測されました
偽陽性 1 発話 5 では、mikemessage として誤って予測されました
偽陰性 1 発話 2 では yesmessage として予測されませんでした

精度 = #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 すべての意図とエンティティの TP の合計
偽陽性 3 すべての意図とエンティティの FP の合計
偽陰性 4 すべての意図とエンティティの FN の合計

精度 = #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 つのエンティティがいつも予測されている場合は、各エンティティに学習済みコンポーネントを追加し、それを必須にしてください。 詳細については、「エンティティ コンポーネント」を参照してください。

次のステップ

Language Studio でモデルをトレーニングする