BotFrameworkにLUISを組み込んで自然言語を認識させる

対話ができるシステムを作るうえで、「コーヒーを注文する」というタスクに対し、「コーヒーをください」という発話は認識するが「コーヒーをちょうだい」という言葉は認識できないような対話システムはあまり賢いとは言えません。

そのようなユーザーの発話のブレに対応するために、BotFrameworkではLUISというサービスを利用して機械学習を用いた自然言語認識をすることができます。

今回はLUISを用いて自然言語を認識するBOTを作りましょう。

LUISのモデルを作成する

https://www.luis.aiのアカウントを作成します。

NewAppから新しくモデルを作成します。

Intentをいくつかつくります。

このIntentとは認識してほしいカテゴリごとに作成します。

今回は発話をNoneとgreetingとpredictの3つに分類することにします。

各Intentには発話候補を書いておきます。

これらの発話に近い発話が来るとそのカテゴリに分類されます。

IntentができたらTrain&TestからLUISを学習させます。この画面でテストをすることもできます。

学習がうまくいったらPublishしましょう。キーは必要に応じて作ってください

 

BOTを作成する

今回はVisualStudioを用いてC#でBotを作成します。

まずこのリンクからBotのテンプレートをダウンロードします。

VisualStudioのテンプレートのディレクトリに配置し、新規作成からBotのプロジェクトを作成します。

デフォルトではMessagesControllerのPostメソッドからRootDialogが呼ばれていると思います。

なのでRootDialogからLUISを呼び出すDialogを作りましょう。

Dialogフォルダの中にLuisDialogを継承するクラスをつくります。

このクラス内には作成したIntentごとにメソッドを作り、属性を加えます。

クラスに紐づけているLuisModel属性にはLuisのAppIdとLuis のEndpointKey(上記publish時に設定したキー)を貼り付けます。

あとはRootDialogからよんでやります。

これでこんな感じでLUISとつなげることができます。