前のステップ では正規表現を利用してユーザー入力の意図を理解しました。
このステップでは、Language Understanding (LUIS) を利用して、より柔軟で強力にユーザーの意図を予測するように変更します。
(Bot Framework Composer の基礎 - 2 では、正規表現 でユーザーの意図を認識しました)
1. Recognizer Type の変更
2. Language Understanding の設定
3. Help トリガーのフレーズの入力
4. Web Chat で動作確認
Language Understanding (LUIS) とは、自然言語による入力に対して、
- 全体の意味を予測
- 関連性のある詳細な情報を引き出す
サービスです。
"Language Understanding" はプレビューでは "LUIS" と呼ばれていました。
GA して Language Understanding と名称が変わりましたが、ドキュメントやライブラリにも LUIS という表記が残っていたり、GA 後も LUIS と呼ばれることが多くあります。
このハンズオンでは、ヘルプを呼び出す範囲でのみ Language Understanding を使用するので機能が実感しづらいですが、実装手順を理解することを目的とします。
"MyQnaBot" の Recognizer Type (=ユーザー意図の識別方法) は、Bot Framework Composer の基礎 - 2 では "Regular expression recognizer" にしました。
ここで "Default recognizer" (= Language Understanding 利用) に変更して、もう少し柔軟な自然言語処理でユーザー意図を予測するように変更します。
Bot Framework Composer の設定画面で Language Understanding のセットアップを行います。
-
Azure の認証を求められたらサインインします。
-
Language Understanding のリソースを作成する Azure アカウントとサブスクリプションとを選択します。
-
リソースグループ、リージョン、価格プランを入力・選択します。続いて [Next] をクリックします。
項目名 値 Azure resource group ドロップダウンを開いて [+ Create new] を選択 Resource group name 任意の名前で新規作成 (上で "Create new" するまでは非表示) Region West US Language Understanding resouce name 任意の名前で新規作成
-
しばらく待つと Language Understanding のリソースが作成されます。
リソース作成に成功するとキーが取得されて [Create Language Understanding resources] が表示されます。
ポップアップは [Done] で閉じます。
Help ダイアログにコンテキストを切り替える契機となるフレーズを入力します。
-
"MyQnaBot" の "Help" トリガーを選択します。
選択するのは "Help" ダイアログではありません。
-
Property の [Trigger phrases] に以下の入力をします。
- Help - ヘルプ - ボットの使い方 - Botの機能 - このボットで何が出来るの - あなたの機能について教えて
"Trigger phrases" では、類義語を使用した別のフレーズを登録したり、英語と日本語とを組み合わせるなどをすると認識精度が上がることがあります。
例えば- "使い方" と "機能"
- "help" と "ヘルプ"
- "Bot" と "ボット"
などを使います。
こうすると "このボットの使い方" や "Botの機能を教えて" などの日本語(自然言語)の表現の揺らぎを吸収してくれます。
-
認識の精度をより上げるために エンティティ も合わせて設定します。
[Trigger phrases] の [Add entity] - [Machine learning entity] を選択します。
-
ヘルプの例文にエンティティを設定します。
1行目の "Help" を選択すると [labe entity] が表示されます。ここで "Action" を選択します。
この操作で 1行目が以下のように変更されます。- {Action = Help}
-
ほかの例文にも同様の操作でエンティティを設定します。 以下はエンティティも含めた Trigger phrases 全体です。
- {Action = Help}
- {Action = ヘルプ}
- {Bot = ボット}の{Action = 使い方}
- {Bot = Bot}の{Action = 機能}
- この{Bot = ボット}で何が{Action = 出来る}の
- {Bot = あなた}の{Action = 機能}について教えて@ ml Action
@ ml Bot
-
[Condition] に以下の入力をします。
前の操作で [Condition] には "=" が設定されているので、それも利用して以下のとおり指定します。=#Help.Score > 0.94
Language Understanding での推論の結果、ユーザーの入力が "Help" である可能性が 94% より高い場合に Help ダイアログにコンテキストを切り替えることを意味します。
それ以下の場合は、ユーザーの入力は "Help" 以外で処理されます。(現在は "Unknown intent" のみ)上で指定した 94% という数値は中途半端な値に思えるかもしれません。
この後の方法で動作確認をしたところ、子のハンズオンを作成時には閾値として適切な値になったために今回は 94% にしました。
Language Understanding のスコアは随時変更される可能性があるので、その場合はより適切な予測ができる値に変更してください。
-
組み込みの Web Chat で何か入力してみます。
- ヘルプ
- ボットの機能
- こんにちは
- ランチのおすすめは
などを入力します。
ヘルプに関係する入力の場合はヘルプメッセージが返ってくること、それ以外の入力にはオウム返しすることが確認できます。
-
"ヘルプ" などと入力した際には Language Understanding で入力の意図を類推していることを確認します。
ボットの応答の内容だけ見ると、正規表現を使っていた時と同じように見えるかもしれません。
Web Chat のトレースを見ると、今回は確かに "Language Understanding" への問い合わせが実行されていることがわかります。
以上で Language Understanding を利用してユーザーの意図を予測できるようになりました。
次のステップでは QnA Maker と連携して、FAQ ボットの機能を追加します。