意図
重要
LUIS は 2025 年 10 月 1 日に廃止され、2023 年 4 月 1 日から新しい LUIS リソースを作成できなくなります。 継続的な製品サポートと多言語機能のベネフィットを得るために、LUIS アプリケーションを会話言語理解に移行することをお勧めします。
意図は、ユーザーが実行しようとしているタスクまたはアクションを表します。 ユーザーの発話で表明される目的や目標です。
ユーザーがアプリケーションで実行しようとしているアクションに対応する、意図のセットを定義します。 たとえば、旅行アプリには次のような意図が含まれています。
旅行アプリの意図 | 発話の例 |
---|---|
BookFlight | "来週のリオへの便を予約して" "24 日に飛行機でリオに行きたい" "次の日曜日、リオデジャネイロへの航空券が必要だ" |
Greeting | "やあ" "こんにちは" "おはようございます" |
CheckWeather | "ボストンの天気はどうですか" "今週末の天気予報を教えてください" |
なし | "クッキーのレシピが知りたい" "レイカーズは勝った?" |
すべてのアプリケーションに事前定義済みの意図 "None" が付属します。これは、代替として使用できる意図です。
事前構築済み意図
LUIS では、事前構築済みの各ドメインからの事前構築済み意図とその発話が提供されています。 ドメイン全体を追加することなく、意図を追加できます。 意図の追加は、意図とその発話をご利用のアプリに追加するプロセスです。 意図名と発話リストの両方を変更できます。
すべての意図のスコアを返す
発話は 1 つの意図に割り当てます。 LUIS が発話を受信すると、既定で、その発話の最上位の意図を返します。
その発話のすべての意図にスコアを付ける場合、予測 API のクエリ文字列でフラグを指定できます。
予測 API のバージョン | フラグ |
---|---|
V2 | verbose=true |
V3 | show-all-intents=true |
意図とエンティティの比較
意図は、発話全体に基づいて、アプリケーションがユーザーに対して実行する必要のあるアクションを表します。 発話が持つことのできる意図は最高スコアのもの 1 つだけですが、エンティティは多数持つことができます。
ユーザーの意図によって、上記表からの checkweather() 関数の呼び出しなど、クライアント アプリケーションでアクションをトリガーする場合に、意図が作成されます。 次に、アクションの実行に必要なパラメーターを表すエンティティを作成します。
Intent | Entity | 発話の例 |
---|---|---|
CheckWeather | { "型": "場所", "エンティティ": "シアトル" } { "型": "builtin.datetimeV2.date","エンティティ": "明日","解像度":"2018-05-23" } |
Seattle の tomorrow の天気はどうですか |
CheckWeather | { "型": "日付の範囲", "エンティティ": "今週末" } | this weekend の天気予報を教えてください |
None 意図
None 意図は作成されますが、故意に空のままにされます。 None 意図は、必須の意図であり、削除したり名前を変更したりすることはできません。 ご自分のドメイン外の発話をこれに追加してください。
None 意図はフォールバック インテントであり、発話全体の 10% を占める必要があります。 この意図は、アプリ ドメイン (サブジェクト領域) 内で重要ではない発話を LUIS に学習させるときに使用されるため、すべてのアプリで重要です。 None 意図に対して発話を追加しない場合は、LUIS によってドメイン外の発話が、強制的にドメインの意図の 1 つに追加されます。 これによって、発話に対して間違った意図を LUIS に教えることになるため、予測スコアがゆがめられることになります。
発話が None 意図として予測されると、クライアント アプリケーションはさらに質問を重ねたり、有意義な選択ができるようにユーザーを方向付けるメニューを提供したりすることができます。
負の意図
"自動車がほしい" と "自動車がほしくない" など、負と正の意図を判断する必要がある場合、2 つの意図 (正と負を 1 つずつ) を作成し、それぞれに適した発話を追加できます。 または、1 つの意図を作成して、正と負の 2 つの異なる用語をエンティティとしてマークすることもできます。
意図とパターン
発話の例があり、その一部または全体を正規表現として定義できる場合は、正規表現エンティティをパターンと組み合わせて使用することを検討してください。
正規表現エンティティを使用すると、パターンと一致するデータ抽出が保証されます。 パターン マッチングでは、正確な意図が返されることが保証されます。
意図のバランス
アプリ ドメインの意図は、各意図の間で発話のバランスが取れている必要があります。 たとえば、10 の発話を含む意図が大部分で、残りが 500 の発話を含む意図という使い方はしないでください。 これではバランスが崩れています。 この状況では、500 の発話を含む意図を見直して、意図の多くを 1 つのパターンに再構成できるかどうかを確認する必要があります。
None 意図は、そのバランスには含まれません。 この意図には、アプリの発話合計の 10% が含まれる必要があります。
意図の制限
制限を確認して、モデルに追加可能な意図の数を把握してください。
ヒント
意図の最大数を超える必要がある場合は、システムで使用されている意図が多すぎるかどうかを検討し、複数の意図をエンティティを含む単一の意図に結合すべきかどうかを判断します。 意図が類似していると、LUIS による区別が困難になる可能性があります。 各意図はユーザーが求めている主となるタスクを把握できるくらい十分に異なっている必要がありますが、コードで取得するすべてのパスまで把握する必要はありません。 たとえば、2 つの意図の BookFlight() と FlightCustomerService() は旅行アプリでは別の意図である可能性がありますが、BookInternationalFlight() と BookDomesticFlight() は非常に似ています。 システムでこれらを区別する必要がある場合は、意図ではなく、エンティティまたはその他のロジックを使用します。
非常に多くの意図を持つアプリに関するヘルプの要求
意図の数を減らしたり、意図を複数のアプリに分割できない場合は、サポートにお問い合わせください。 Azure サブスクリプションにサポート サービスが含まれている場合は、Azure のテクニカル サポートにお問い合わせください。
意図に関するベスト プラクティス:
意図を個別に定義する
各意図のボキャブラリがその意図のみを対象としていること、また、別の意図と重複していないことを確認します。 たとえば、飛行機のフライトやホテルなど、旅行の手配を処理するアプリが必要な場合は、これらの主題領域を、それぞれ個別の意図として定義するか、発話内に特定のデータのエンティティを含む 1 つの意図として定義するかを選択できます。
2 つの意図のボキャブラリが同じ場合は、意図を結合し、エンティティを使用します。
たとえば、次の発話の例について考えます。
- Book a flight
- Book a hotel
この "book a flight" と "book a hotel" で使用されている共通のボキャブラリが "book a <noun>" です。 この形式は同じであるため、flight (フライト) および hotel (ホテル) という異なる単語を抽出されたエンティティとして含む同じ意図として定義する必要があります。
意図に特徴を追加する
特徴は、意図の概念を説明するものです。 意図には、その意図にとって重要な語句リストや、その意図にとって重要なエンティティを指定できます。
すべきこと: 意図のスイート スポットを見つける
LUIS の予測データを使用して、意図が重複していないかどうかを判断します。 意図が重複していると LUIS が混乱します。 その結果、上位スコアの意図と他の意図が非常に近くなります。 LUIS では、トレーニング用のデータから毎回同じパスを使用するわけではないため、重複している意図は、トレーニングで 1 位または 2 位になる可能性があります。 各意図の発話のスコアは、このような矛盾が生じないように、差をつける必要があります。 意図が適切に区別されていれば、最上位の意図は毎回最上位にくるはずです。
意図間で発話のバランスを取る
正確な LUIS 予測を行うには、各意図 (None 意図を除く) の発話の例の量が同程度である必要があります。
発話の例が 500 個の意図と発話の例が 10 個の意図がある場合、発話が 500 個の意図の方が予測率が高くなります。
発話の例を None 意図に追加する
この意図は代替用の意図で、お使いのアプリケーション外のものすべてを示しています。 ご自身の残りの LUIS アプリでは、発話の例 10 個それぞれに 1 つの発話の例を None 意図に追加してください。
やってはいけないこと: 多数の発話の例を意図に追加する
アプリの公開後は、開発ライフサイクルのプロセスでアクティブ ラーニングから発話を追加するだけにします。 発話が似ている場合は、パターンを追加します。
やってはいけないこと: 意図とエンティティの定義を一緒にする
お使いのボットで取得されるすべてのアクションに対して意図を作成します。 そのアクションを可能にするためのエンティティをパラメーターとして使用します。
たとえば、飛行機のフライトを予約するボットのために、BookFlight 意図を作成します。 すべての航空会社、またはすべての目的地に対して、意図を作成しないでください。 これらのデータ部分をエンティティとして使用し、発話の例でマークします。