意図解釈とは?

意図解釈とは、ユーザ発話からユーザが求めているタスクを判定し、そのタスクに必要な情報の抽出を行う技術です。

これらの判定や抽出は、すべて自然対話プラットフォームの意図解釈エンジンによって行われるため、xAIMLに大量の<pattern>を書く必要がなく、CGS連携処理など、タスク実行部分の記述に専念することができます。

意図解釈エンジンは、「しゃべってコンシェル」で培ってきた機械学習技術を組み込んでいます。
SUNABAでは、「基本タスク」と呼ばれるタスクへの分類のみを提供していますが、一覧に記載のないタスクを独自に追加することも可能です。独自タスクのご利用をご検討の場合は、お問い合わせください。

タスクとスロット

タスクとは、意図解釈エンジンがユーザ発話の内容を分析して得た「ユーザが求めている動作」です。
また、タスクごとに関連する情報を格納するスロットが存在し、タスクの実行に必ず必要なものを必須スロットと呼びます。

天気検索や乗換案内、そして知識検索など、デフォルトでいろいろなタスクを準備しています。
利用できる全てのタスクを確認するには、タスク一覧をご覧ください。

タスク判定の例

ユーザ発話 タスク、スロット
今日の東京の天気を教えて タスク 天気検索 エリア 東京 日時 今日
東京から横浜までの乗り換え方法を教えて タスク 乗換案内 到着駅 横浜   出発駅 東京   実行確認
ニュースを教えて タスク ニュース検索   ジャンル   日時

タスク状態

タスクは3つの状態に分けることができ、スロットの格納状況によって以下のとおり状態が遷移します。

天気検索などの必須スロットを持たないタスクは状態遷移しません。

タスクの状態遷移

状態が初期より後に遷移したタスクがある場合、意図解釈エンジンは新たなタスクを開始しません。
このような状態で新たなタスクを開始するには、遷移中のタスクを初期状態に戻す必要があります。
(ex. 乗換案内タスクの場合は、「キャンセル」で状態を初期に戻すことができます)

1 初期  →  2 スロットフィリング  →  3 実行可能

スロットの格納状況とタスク状態

スロット格納状況 タスク状態
全てのスロットに値なし 初期
必須スロットの一部に値あり スロットフィリング
必須スロット全てに値あり 実行可能

コマンドとスロットフィリング

1回のユーザ発話で必須スロットの全てを埋められなかった場合に、ユーザに不足している情報を要求することを、スロットフィルと呼びます。
スロットフィルは、必須スロットに対応するコマンドをxAIML上に記述しておくことで、意図解釈エンジンから自動的に実行されます。

これらの全ての必須スロットを埋める一連の流れを、スロットフィリングと呼びます。

意図解釈使用例

意図解釈の結果を使用した対話シナリオの例をご紹介します。

ご注意
AgentCraft、ドコモAIエージェントAPIで意図解釈URLを指定して意図解釈をご利用いただく場合は、こちらをご覧ください。

SUNABAでは、意図解釈URLの指定を行うことはできません。
指定の意図解釈URLにリクエストを送る場合は、汎用CGSを使用して意図解釈にリクエストを送るこちらの方法をご覧ください。
※汎用CGSを使用する方法でも、AgentCraft、ドコモAIエージェントAPIで意図解釈にリクエストを送ることができます。

天気検索

天気検索タスクを使用した例です。
このタスクは必須スロットを持たないため、状態遷移しません。

xAIML

実行結果

乗換検索

乗換検索タスクを使用する例です。
このタスクは必須スロットを持つため、状態遷移します。

xAIML

実行結果

意図解釈結果取得方法

意図解釈の結果をxAIMLで取得する方法をご紹介します。

意図解釈結果を取得するには、<get>タグなどで下表のPredicateを取得します。

Predicate一覧

対話ステータス

Predicate名 説明
_task_status 検索結果ステータス
true/false 
_task_error_code エラーコード
success/fail/timeout
_task_error_message エラーメッセージ
_task_commandId コマンドID(<pattern>のlabel属性に相当)
_task_id タスクID
_task_name タスク名
_task_loopCount 同じ対話状態が続いた回数
_task_slot_[スロット名] スロット名が存在する場合、slotValueに値を設定する。
スロット名が存在しない場合、リストに追加する。
_task_keep_dialog_status レスポンスに対話ステータスを反映させる場合は、”true”を設定する
対話ステータスを更新しない場合は、”stay”を設定する

抽出文字列

Predicate名 説明
_task_extractedWords_[wordsType値] 抽出文字列結果リストから、[wordsType]に該当するwordsValue値を取得する
抽出文字列結果リスト内に同じwordsTypeが存在する場合は、カンマで連結した値を取得する
例:_task_extractedWords_snounの場合、山田,電話
※利用できる全てのwordsTypeを確認するには、WordsType一覧をご覧ください。
_task_extractedWords_N_value 抽出文字列結果リストのN番目のwordsValue値
例: _task_extractedWords_1_valueの場合、山田
_task_extractedWords_N_type 抽出文字列結果リストのN番目のwordsTypeリストをカンマで連結した値
例: _task_extractedWords_1_typeの場、lastName,station,upoi,snoun
_task_extractedWords_N_type_J 抽出文字列結果リストのN番目のwordsType値のうち、J番目のtypeを取得する
例:_task_extractedWords_1_type_2の場合、station