Pepper SDK入門(22) Chatbotで実時間コミュ!


Chatbotの正体に這い寄ろう!👽🐾

Chatbotはユーザの発話に対して何かしらPepperを反応させることが出来る機能で、リアルタイムのやり取りを可能にします。空中浮遊はできませんが、Pepperの首や手に動きをつけたり移動させたりすることもできます。
$\tiny{これはむり。}$
今回はChatを使用するので、Chatの回も読み返してみてください。

Chatbotマイスターになるために

使い方に応じていくつかのChatbotを統合することが出来ます。
例えば、次のような3つのChatbotを組み合わせて会話することも可能です。

  • 小売の質問を管理するためのQiChatbot。店内のことなら庭レベルに把握している。
  • 一般的な短いやりとりを管理するためのMicrosoft、IBM、GoogleなどWebベースのChatbot。挨拶上手。
  • Wikipediaを管理するChatbot。Wikiが知ってることで知らないことはない。

Chatbotのキメラです🦁🐐🐍

👉QiChatbot👉BaseChatbot

QiChat1を利用したい場合はQiChatbotクラスを使い、外部のツールを利用したい場合はBaseChatbotクラスを拡張して独自のChatbotクラスを作成してください。

詳しくは双方ともに、今後の記事で説明します。

空耳アワーへの先手⛅️👂

この章では、setMaxHypothesesPerUtteranceという少しマニアックなメソッドの使い方を見ていきたいと思います。

例えば「Hello Pepper」と言ったのを、Pepperが「Hello paper」と聞き取る可能性がありますね。真実はいつも一つですが間違いは無限の可能性を秘めています。
そこでChatbotは、そんな聞き取りミスをカバー出来るようになっているのです。音声認識の成功時にはいくつかの候補を取得できます。「こんばんは」の場合であれば、「こんばんわ」、「こんばんは」、「今晩は」などです。

Chatを実行中にPepperが音声認識すると、Chatbot.replyTo()が呼ばれ引数で音声認識の候補が渡されます。上記のように候補が複数の場合は、信頼度が高い2つの候補に絞ってChatbot.replyTo()が2回呼ばれることになります。(ChatbotがReplyPriority.NOMALの応答を返した場合、それ以降は呼ばれないと思われます。)

そしてここからが、setMaxHypothesesPerUtteranceメソッドの話です。基本的には使用されないのですが、このメソッドに値を設定するとChatbot.replyTo()の呼び出し回数を変更することが出来ます。
1にした場合は1つの候補に絞ってChatbot.replyTo()が1回呼ばれ、3にした場合は信頼度が高い3つの候補に絞ってChatbot.replyTo()が3回呼ばれるのです。

Chatbot chatbot = new MyChatbot(qiContext);

//アクションをビルド
Chat chat = ChatBuilder.with(qiContext)
                       .withChatbot(qiChatbot, chatbot)
                       .build();

// アクションを非同期に実行
chat.async().run();
chatbot.setMaxHypothesesPerUtterance(3);

先出の例で言えば、数値を10にした時には「mallow vapor」や「allow neighbor」のように韻を踏んでも、Pepperにとっては「Hello Pepper」と挨拶されたことになるかもしれません。
以下の画面はこれの"Mastering Chat locale"でsetMaxHypothesesPerUtteranceメソッドの値を変更し、台詞を変えてみたものです。
ここでは遠い恒星にいらっしゃる旧支配者クトゥグアを、ハム語の挨拶を引き金に召喚するようにしました。

setMaxHypothesesPerUtteranceメソッドに10を設定した時には、あうはーとかかるはーなどと言っても「はむはー」と言ったことになる、かなり緩い判定をします。
逆にsetMaxHypothesesPerUtteranceメソッドに1を設定した時には、明確に「はむはー」と発音しないと呪文を唱えてくれません。
よってジェットエンジンの傍らのように賑やかな場所では、1を設定することで多少誤認識が減る可能性があります。逆に、真夜中の郊外のように静かな場所ではデフォルトの2以上が推奨です。  

あとがき

今回も例によってPepperSDKforAndroidを参考に書かせていただきました。
さらに言羊しくはChatbotのAPIリファレンスを参照してください🐏

次回はQiChatbotです。ワイヤレス充電の国際標準規格Qi(チー)の登場はありません。それでは〜


  1. QiSDKにあるスクリプト言語で、会話の内容を簡単に定義できます。