Pepper for Biz3.0のAI会話のカスタマイズ (2)


はじめに

前回は、pepper for Biz 3.0 の AI会話のカスタマイズ機能を使用して、Pepper チャットボックス コンバーターのサンプルシナリオ(空のテンプレート)を、単純にPepperで動かすということを行いました。
 今回は、Dialogflow側の設定内容について細かく確認していこうと思います。

前回の記事は、こちらになります。
Pepper for Biz3.0のAI会話のカスタマイズ (1)

環境について

  • pepper for Biz3.0
  • お仕事かんたん生成3.0
  • Dialogflow
  • Microsoft Excel

Dialogflow - Agent

 前回使用したDialogflowのAgentを参照してください。
 テンプレートによって、次の5つのIntentが作成、Default Fall Intentが更新されていると思います。
 
 Excelのテンプレートには、たくさんのIntentXXX行が用意されていますが、実際に使用されるのは「アクションタイプ」列に「-」が設定されてる行の手前までとなります。

 また、2019/5段階のテンプレートでは、Agentに作成されるのはIntentのみで、Entityは作成されません。

サンプルIntentの関係

サンプルのインテントの関係は、次の通りです。大きく2つのシナリオに分かれています。「名前についてのシナリオ」と、「好きな食べ物についてのシナリオ」(Intent2~Intent5_fellback)です。「好きな食べ物についてのシナリオ」は、会話を継続させる仕組みとして、Contextを使用しています。このサンプルでは、「food」というContextをIntent2が設定し、Intent3~Intent5_fellbackは、その「food」Contextが有効な間だけ、受け付けるようになっています。

このContextの有効期間は、Contextに設定した回数分、対応するIntentを消費した場合か、Intentの一致から20分後になくなります。
テンプレートのサンプルでは、「food」Contextの回数は3になっていました。つまり3回Intent3~Intent5_fellbackが実行されると、「food」Contextはなくなります。新たに設定するには、Intent2が実行されなければなりません。

 また、余談ですが、サンプルではIntent2で好きな食べ物の質問をして、Intent3に該当する答え「焼肉」と回答をしたとします。これで会話は終了ではなく、まだ「Food」Contextのカウンタは、3->2になっただけですので、まだ有効です。続いて、Intent4に該当する答え「お寿司」と答えることができてしまいます。これは時と場合によりますが、食べ物の回答後にContextをクリアしたい場合は、Intent3とIntent4のoutput contextに次のように指定します。

指定の方法は、output context欄に「food」と入力し、設定された数字を5から0にします。こうすることでContextがクリアされます。

IntentとEvent名について

Intentには、それぞれ固有のEvent名が設定されています。

Intentは音声テキスト(音声認識後の文字列)をもとに、Dialogflowの機械学習によって選ばれたIntentが実行されますが、直接Intentを指定して実行したい場合があります。そのときにこのEvent名を使用します。
Event名による実行そのものは、「お仕事かんたん生成」側が行うのですが、テンプレート上ではボタンに対応するインテントのEvent名、連続してPepperに発話させる場合の次のインテントのEvent名などで使用します。
 また、「AI会話」ボックス実行時に最初に起動するインテントのEvent名を指定することで、Pepperから話しかけることができます。例えばサンプルのIntent2のEvent名「event2」を指定しておくと、「AI会話」ボックス実行時に「食事についてのシナリオ」からスタートすることができます。

テンプレートとIntentの関係

 次にExcelテンプレートに設定した内容が、どのようにIntentに設定されているのかを確認していこうと思います。

Intent1

 Intent1は、ユーザが名前について話しかけると、Pepperが発話とディスプレイ(テキスト)で答えるシナリオです。

 Excelのテンプレートの「インテント名」「イベント名」「ユーザー発話」は、dialogflowの「Intent」「Events」「Training phrases」にそれぞれ設定されます。
 Excelテンプレートの「アクションタイプ」以降は、「Custom payload」に独自のJsonデータとして設定されます。
 この「アクションタイプ」は、「テキスト」「画像」「動画」「ボタン」の4種類あり、このIntent1は、「アクションタイプ」-「テキスト」のサンプルです。
 また、「テキスト」にはタブレットに表示する文字列、「スピーチ」には、Pepperの発話文字列を指定します。発話文字列は、発話タグを入れて発話を調整することが可能です。テンプレートに設定されている「テキスト」には、発話タグが指定されていませんが、コンバーター側でPepperの標準の音声となる¥rspd=110¥¥vct=135¥が設定されるようです。

CustomPayload
{
  "list": [
    {
      "speechText": "\\rspd=110\\\\vct=135\\ボクの名前はペッパーです",
      "action": {
        "actionType": "showText",
        "content": {
          "displayText": "ボクの名前はPepperです!"
        }
      },
      "issueEvent": "",
      "endConversation": false,
      "animation": ""
    }
  ]
}

Intent2

Intent2は、好きな食べ物の質問シナリオで、「好きな食べ物について」の最初のIntentです。
AI会話のユーザの回答として、音声による回答と、タブレットのボタンによる回答が可能となっており、このIntent2はそのタブレットにボタンを表示する例となります。「アクションタイプ」は「ボタン」です。
このIntent2が実行されたあと、Context「food」を有効にするため、「output context」に「food」を設定します。
 Excelテンプレートでは「コンテキスト」-「出力」に指定します。

また、ボタンそれぞれには対応するインテントのEvent名が指定されており、「焼肉」ボタンではevent3(Intent3)を、「お寿司」ボタンではevent4(Intent4)を実行するように指定されています。

CustomPayload
{
  "list": [
    {
      "speechText": "\\rspd=110\\\\vct=135\\ボクは電気が好きです。ところでお客様は、焼肉とお寿司ならどっちが好きですか",
      "action": {
        "actionType": "showButtons",
        "content": {
          "title": "焼肉とお寿司どっちが好き?",
          "buttons": [
            {
              "label": "焼肉",
              "event": "event3"
            },
            {
              "label": "お寿司",
              "event": "event4"
            }
          ]
        }
      },
      "issueEvent": "",
      "endConversation": false,
      "animation": ""
    }
  ]
}

Intent3

Intent3は、Intent2の質問の回答の1つの「焼肉」を選んだ場合のシナリオです。
「アクションタイプ」は「テキスト」でIntent1と同じです。Intent1と異なるのは、「コンテキスト」が指定されている点です。
Context「food」が有効な間だけ、このIntentを有効とするために、「input context」に「food」を設定します。
 Excelテンプレートでは「コンテキスト」-「入力」に指定します。

CustomPayload
{
  "list": [
    {
      "speechText": "\\rspd=110\\\\vct=135\\やっぱり焼肉美味しいですよね",
      "action": {
        "actionType": "showText",
        "content": {
          "displayText": "やっぱり焼肉美味しいですよね!"
        }
      },
      "issueEvent": "",
      "endConversation": false,
      "animation": ""
    }
  ]
}

Intent4

Intent4は、Intent2の質問の回答の1つの「お寿司」を選んだ場合のシナリオです。
Intent3とほぼ同様ですので、説明を省略します。

Intent5_fallback

Intent5_fallbackは、好きな食べ物のシナリオで、どのIntentにも該当しない発話だった場合に、実行されるIntentです。
Excelテンプレートの「インテント名」に_fallbackを付けるとFallback Intentとして作成されます。
Context「food」が有効な間だけ、このFallback Intentを有効とするために、「input context」に「food」を設定します。

Default Fallback Intent

Default Fallback Intentは、ユーザの発話が、どのインテントにも該当しなかった場合に、実行されるIntentです。テンプレートインポート時に自動でCustom payloadが追加されます。

CustomPayload
{
  "speechText": "\\rspd=110\\\\vct=135\\すみません。別の言い方でお願いします",
  "action": {
     "actionType": "fallback"
  }
}

 Pepperの発話を変更したい場合は、このCustom payloadを修正する必要があります。
 サンプルでは1つだけの回答になっていますが、複数回答も可能なようです。
複数の回答にするには、"list:[]" 内に記入します。
 次のように書き換えてみました。該当しない場合でもちょっと聞いてくれる?感がでるんじゃないでしょうか。

CustomPayload(修正後)
{
  "list": [
    {
      "speechText": "\\rspd=110\\\\vct=135\\なるほど、なるほど",
      "action": {
        "actionType": "fallback"
      }
    },
    {
      "speechText": "\\rspd=110\\\\vct=135\\うん|うん。",
      "action": {
        "actionType": "fallback"
      }
    },
    {
      "speechText": "\\rspd=110\\\\vct=135\\ですよねー",
      "action": {
        "actionType": "fallback"
      }
    }
  ]
}

ちなみに「AI会話」ボックスで「想定外のユーザ発話」を「対応する」に設定していると、会話リストで選択した標準の会話(この例では「日常会話」)に発話が渡されますので、このDefault Fallback Intentで定義した発話は行われません。試す場合は、「対応しない」に設定し、お仕事を再配信した後でご確認ください。

Intentのテスト

IntentをDialogflowのコンソール上で確認できます。
Dialogflowのコンソールの左側の「Try it now!」欄に想定するユーザ発話を入力します。

実行すると機械学習によってどのINTENTが実行されたのか、またContextの状態も表示されます。ただ、CustomPayloadの値はここでは確認できません。「DIAGNOSTIC INFO」をクリックすることで、RESPONSEの内容を確認することができます。

次回について

今回も解説だけで終わってしましました。
次回は、会話でちょっとした遊びをしてみたいと思います。


前の記事:Pepper for Biz3.0のAI会話のカスタマイズ (1)
次の記事(作成中):Pepper for Biz3.0のAI会話のカスタマイズ (3)