複合エンティティを使用すると、ユーザーの発言中に複数のエンティティ値をキャプチャすることができます。これらの複数のエンティティ値はオプションであり、ユーザーの発言の中で任意の順序で使用することができます。
例:自動車販売ボット車の販売に関する問い合わせを考えてみましょう。通常の問い合わせは次のような形式になります。「興味があるのはテスラ Model S2018年モデルです」または「赤のTesla 2010年モデルの価格はどのくらいですか」または「テスラ Model Sについて教えてください」などです。ご覧のように、ボットは通常、これらのクエリに応答するためにメーカー、モデル、年型、色などの詳細を組み合わせて処理する必要があります。
これらの複数の値や詳細は、それぞれ異なる独立したエンティティから取得することができます。複合エンティティを使用すると、それぞれ独立したエンティティやサブエンティティを組み合わせることができます。
複合エンティティ パターン は、サブエンティティ間の関係を確立するために使用しなければなりません。サブエンティティは、複合エンティティパターンにおいて@subentity
のように@タグを使用して複合エンティティに含まれます。これらのサブエンティティは事前に定義されている必要があり、現在のダイアログフローの一部であってはなりません。また、サブエンティティは他のダイアログタスクからも使用できます。
AND や OR などのさまざまなパターンを構築することができます。これは、エンティティパターンの定義づけに使用されているのと同じです。 (詳細はこちらを参照)
複合エンティティの値は JSON オブジェクトの形をしており、サブエンティティはそのオブジェクトのプロパティとして参照することができます。これは、使用できるサブエンティティにアクセスするためです。
{{{context.entities.<>.<> }}
各サブエンティティは、複合エンティティから独立して使用された場合にアクセスされるための、定義された構造を使用してアクセスすることができます。たとえば、サブエンティティが空港タイプである場合、空港名には次のようにアクセスできます:{{context.entities.<<composite_entity>>.<<sub_entity>>.AirportName }}
複合エンティティの作成
複合エンティティの構築には、サブエンティティの作成と、サブエンティティ間の関係の確立という以下の手順を実行します。
サブエンティティの作成
複合エンティティは他のエンティティとの組み合わせであるため、ダイアログタスクで個々のエンティティを構築する必要があります。上記の例から車種をキャプチャするには、まず必要な詳細をキャプチャすることのできるサブエンティティを作成する必要があります。車エンティティの、サブエンティティのマッピングサンプルを以下に例示します。
関連エンティティ | エンティティタイプ |
---|---|
メーカー | 項目のリスト:ユーザーの発言から車のブランド名をキャプチャします。開発者は、このリストをエンティティ内に構築しておく必要があります。 |
モデル | 価格リスト:ユーザーの発言から車のモデル名をキャプチャします。 |
製造年 | 数字:ユーザーの発言から製造年をキャプチャします。ボットは自動的に数字を認識します。 |
色 | 色:ユーザーの発言から色をキャプチャします。ボットは自動的に色を認識します。 |
注意:サブエンティティは複合エンティティのみに結合することができ、他の目的には使用できません。現在のダイアログタスクでサブエンティティを作成している場合は、これらのサブエンティティへの遷移をすべて削除して、ダイアログタスクのフローの一部にならないようにしてください。
複合エンティティの定義
ダイアログタスクの関連ノードの後に 複合エンティティを追加します。このエンティティが複数のエンティティ値を取り込むようにするには、複合パターンを作成する必要があります。これを行うには、プロパティパネルを開き、複合パターンセクションで、関連するパターンを追加します。作成できるさまざまなパターンは、エンティティパターンの定義に使用されるものと似ています。 (詳細はこちらを参照してください。)
上記の複合エンティティパターンについて、以下にサンプル音声と出力を示します。
サンプル発言 | 対応パターン | 出力 |
---|---|---|
2018 Tesla Model Sを購入したい | @year @make @model |
""車"":{ ""年式"": 2018年、 ""メーカー"": ""テスラ"", ""モデル"": ""Model S"" } |
できれば赤色の 2018 Tesla Model S の見積もりを送ってもらえますか? | @year @make @model preferably @color |
""車"": { ""年式"": 2018年、 ""メーカー"": ""テスラ""、 ""モデル"": ""ModelS"" ""色"": ""赤"" } |
Tesla Model S の評価は? | @Make @Model |
""車"": { ""メーカー"": ""テスラ"", ""モデル"": ""Model S"" } |
また、他のエンティティと同様に同義語やパターンを定義することもできます。
制限事項
- 文字列、説明、場所、日付のサブエンティティ タイプを複合エンティティに含むことはできません。
- 複合エンティティを使用しているタスクでは、サブエンティティがダイアログ フローに含まれていないことを確認してください。
- サブエンティティが複数の項目を許可している場合、親の複合エンティティはサブエンティティに 1 つの値を受け入れるだけで、リストは受け入れません。
渡し値
エンティティの事前割り当てを使用して、元のダイアログ タスクから値を複合エンティティに渡すことができます。エンティティの事前割り当てについてはこちらをご覧ください。
複合エンティティに関しては、次のようなシナリオを想定できます。
- 複合エンティティから標準エンティティへ: 対象が元の複合エンティティで使用されているものと同じエンティティ タイプであれば、機能します。
例:context.entities.targetMyCity
=context.entities.sourceComposite.sourceTravelCity
- 複合エンティティから複合エンティティへ: 対象が元の複合エンティティで使用されているものと同じエンティティタイプであれば、機能します。
例:context.entities.sourceComposite.destinationCity
=context.entities.targetCompsite.myCity
- 標準エンティティから複合エンティティへ: 対象が元の複合エンティティで使用されているものと同じエンティティタイプであれば、機能します。
例:context.entities.targetCompsite.myCity
=context.entities.sourceCity
複合エンティティの JSON オブジェクト
プラットフォームの v8.0 では複合エンティティが強化され、JSON オブジェクトを入力として扱うようになりました。有効なチャネルがデータを JSON オブジェクトとして送信するシナリオの処理に役立ちます。例: MS Teams や CISCO Spark チャネルこれらのチャネルから受け取ったユーザー入力は、それぞれの複合エンティティ名の下のコンテキスト オブジェクトに JSON オブジェクトとして格納されます。
JSON オブジェクトを扱う複合エンティティを有効にする場合は、 [NLP プロパティ] タブから [パターン] を追加しないでください。
使い方
複合エンティティがダイアログ フローに到達したとき
- 入力を JSON オブジェクトとして受け取った場合、入力の JSON オブジェクトは解析されることなく対応するエンティティ以下のコンテキスト オブジェクトに追加されます。
- If the input is received as a text input
- 定義済み複合エンティティ パターンから、可能性のあるすべてのサブエンティティが特定されます。
- それらのサブエンティティの可能性のあるすべてのインスタンスはユーザーの発話内に配置され、その位置が記録されます。
- そして複合エンティティ パターンを評価して、キャプチャされたサブエンティティインスタンスのセットに一致する特定のパターンを識別します。
例: 複合エンティティ パターンはサブエンティティの特定には使用されませんが、パターン全体を照合するのに使用されます。