【Microsoft BotFramework X LUIS X Pepper】LUISとBOTとPepperを繋いでみよう!〜その2:実現編〜


前回の記事:
「その1:土台作り編」

「このペンを俺に売ってみろ

数年前に日本で公開されてから観よう観ようと思っていた映画「ウルフ・オブ・ウォールストリート」を先日DVDでようやく観ました。いやー180分の映画って、想像以上に長いですね・・・
それにしても冒頭の言葉、結構考えさせられます。模範解答的には、「必要性を作れ。需要と供給の関係を発生させれば良い」ということみたいなんですが、いきなりこんな事言われてもパッとその答えは出てこないですよね(笑)


さて、前回の記事ではPepperとBotを接続すべく、まずはMicrosoft Bot Frameworkの設定を行いました。

今回はついに、Microsoft Bot Frameworkと人工知能LUISを繋ぎ、さらにそこにPepperを繋げてみます!

まずはじめにLUISの設定です。
ちょっともろもろ手順が必要なのですが・・・参考となるのは下記URLでしょうか。

https://blogs.msdn.microsoft.com/bluesky/2016/04/05/build2016-luis-natural-language-understanding/

LUISとBotの接続は、基本的には上記URLのうち、上側のリンクと同じなので、そこを参照頂ければと思うのですが、せっかくのBotなので挨拶くらいはできるように設定していきます。

「こんにちは」に対応できるようにしていきましょう。
上記のURLでも言及している通り、LUISの対応言語は「中国語」、「英語」、「フランス語」、「スペイン語」、「イタリア語」であり、日本語はありません。ただ、Bot Frameworkの「Bot Connector」が上手い事英語に訳してLUISと連携してくれるようです。

luis_lang

なので、日本語で「こんにちは」に該当する英語を登録していきます。

「greet_hello」というintentsを作成し、そこに「こんにちは」にあたる英語をどんどん入れていきます。bing翻訳に「こんにちは」、「こんにちわ」、「オイッス」、「ウイッス」とかを入力して、そこで得られる英語を登録していけばいいかなと思います。

greet_hello

入力したらその他、「おはよう」、「こんばんは」、「おやすみなさい」等の挨拶をそれぞれのintentsとして作成します。

ちなみに、intentsで登録された言葉に対し、識別する要素を決める「Entities」もありますが、ちょっとすみません、今回は割愛します。

作成したら、一番大切な部分である「学習」をしてもらいます。
方法は簡単。画面左下の「Train」をクリックするだけです。

学習をしたら、画面左上、「Publish」をクリックして公開しましょう。

ここで大事な事を一つ。LUISに新しいintentsやEntitiesを登録したら、必ず「Train」をした後に、「Publish」から「Update published application」をしてください。
そうでないと、いざテストをする段階で登録した語句にLUISが反応せず、「なぜ反応しない・・・なぜ反応しない」と、頭を抱える事になります。
そう、数日前の私のように・・・

「Publish」を終えたら、まずはBotへの接続です。LUISを公開すると「ID」と「Subscription-key」を取得できるので、その値をメモっておきます。
ちなみに、私の場合はAzureの設定項目に「LuisAppId」と「LuisSubscriptionKey」という名前で入れておいてます。

まずは、Node.js側のコードを変えていきましょう。
前回は「Builder.BotConnectorBot」にウォーターフォール型のBotを入れていきましたが、今回は「Builder.LuisDialog」に入れていきます。
(すみません、正直面倒だったから今回はウォーターフォール型にはしてません・・・)

luisNode

こんな感じでコードを書いて、Azureにデプロイします。

次にBot Framework側の調整です。
現状だと、普通に指定したURL上でチャットができるだけですが、このやりとりをJSON形式で取得できるようにします。

やり方はすごく簡単で、下の画像にある「Direct Line」の「Add」を選択して、「Channels」に追加してあげるだけです。

これで、Botの反応をJSON形式で取得することができるようになります。

最後にようやくPepper側の処理です。
DirectLineに接続し、Pepperが聞いた言葉をDirectLineに送信、DirectLineから受信した言葉をPepperが喋るという流れのアプリを作ってみます。

ボックスのつながり的にはこんな感じになりますかね。
「getBot」ボックスでBotと接続し、そこで取得できた言葉を「Say Text」で発話。ユーザの声のヒアリングはダイアログで行います。

luisBox

「getBot」ボックスのコードはこんな感じです。(一部抜粋)
DirectLineに「{“text”: ユーザの発話した言葉, “from”: ユーザID}」を渡してあげます。
ここでのキモは「watermark」ですかね。
「watermark」は、「メッセージをここまで取りましたよ」という目印で、「watermark」をつけてリクエストすると、新着メッセージだけを取得できるようになるようです。
ちなみにですが、Bot側をそのままにして始めてしまうと、英語バージョンで動いてしまうので、初回のみBotに対して「I’ d like to speak Japanese」と入力し、日本語モードに設定しています。

luisPython

というわけで、もろもろの設定ができました!いざ、PepperくんとMicrosoft Bot Framework(と、LUIS)を繋げてみたいと思います!

luisPepper

luisDialog

「こんにちは」
「 LUISのgreet_helloに対応:どうもー!こんにちは!」

「おはよう」
LUISのgreet_morningに対応:あ、おはようございます!」

「おいっす」
LUISのgreet_helloに登録した言葉に対応:どうもー!こんにちは!」

「昨日は何曜日だっけ?」
「LUISのwhat_dayに登録した言葉に対応:その日は「月曜日」です!」

というわけで、うまいこと接続できました!
だいぶ駆け足気味に色んな所を省略したりしてみたのですが、いかがでしたでしょうか?
Pepper君も人工知能はあるのですが、別の人工知能を繋げてトライしてみるのもちょっと趣向がかわるので面白いかもしれませんね!

それではまた、次の機会に!fujiでした〜。

 


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です