LUISを使ってChatbotに日本語を理解させる
ここまで育ててきたChatbotは、プログラム通りに動くアプリケーションです。Chatbot=AIと思っている方もいらっしゃるかもしれませんが、今のままではプログラムされた以上のことは実行できません。そこで今回はChatbotにAIの機能を搭載して、より賢いChatbotに育てていきましょう。
今回の記事で使用するファイル一式は、以下のリンクからダウンロード可能です。
https://thinkit.co.jp/sites/default/files/file_attachement/Chatbot201707_06.zip
LUISを利用した言語解析
最初に必要となるのが、ユーザーの入力情報を日本語として識別して、キーワードとなる単語を抜き出すための言語解析AIです。Microsoftが提供している「Cognitive Services」では様々なAIが提供されています。「まずは使ってみよう」というレベルであれば、ほぼすべてが無料で利用できるようになっています。
「Cognitive Services」の「言語」カテゴリ内にある「Language Understanding Intelligent Service」通称LUIS(ルイス)は、Chatbotに最適な言語解析のAI機能を提供しています。現在プレビュー版ですが、機能としては実用に十分利用できるレベルのAIとなっています。
AIというと、何でも自分で考えて自動的に何かをしてくれるものと思いがちですが、AIといえどもできることできないこと、その特性は様々です。もちろんLUISも、何もしなくても言葉として理解してくれる、といったものではなく、与えられた文字列の中からあらかじめ分類されたカテゴリの中のキーワードを見つけ出すといった言語解析機能を提供します。入力された文字列によって様々なふるまいをするChatbotは、言語解析ととても相性がよく、あらかじめ想定されたキーワードを効率よく入力された文字列から抜き出して、それに従って処理を分岐するというような使い方には最適です。
LUISのセットアップ
LUISアプリケーションの作成
まずはLUISを使うための準備をしておきましょう。サイトの「Try Language Understanding Free」をクリックします。「Login/Sign up」をクリックしてMicrosoftアカウントでサインインして、LUISのアカウントを作成します。
LUISはアプリケーション単位で言語解析処理を分けることができます。例えば保険営業窓口用やホテル受付用など、用途が異なれば、解析するキーワードの種類も異なります。アプリケーションごとに切り分けることで、特定の分野にマッチした言語解析を行い、効率よくAIを学習させ育てられます。今回はこれまで作ってきた「Chatbot201707」用のLUISアプリケーションを作成します。
下記のページで、「Create LUIS app」をクリックします。
「Country」は「Japan」を選択して、チェックを入れて続けます。
「Create new app」をクリックします。
LUISアプリケーションのプロフィールを入力します。
これで、LUISアプリケーションが作成されました。
EntityとIntentの作成
LUISアプリケーションを作成して最初にすることは、「Entity」と「Intent」の作成です。なかなか日本語でぴったりの言葉を探すのが難しいのですが、「Entity」は直訳すると「物体」ということになります。LUISで言うところのEntityは、簡単に言うと解析する言語を分類するための「種類名」や「タグ」のようなものです。例えば、「Day」と「Weather」というEntityを作成して「今日は晴れです」という言葉を分類すると、「今日」は「Day」、「晴れ」は「Weather」というようなEntityに分類することができます。
もう一方の「Intent」は「意味」という言葉ですが、LUISでは意味付けとなります。文字列がどういった意味を持つのか、例文を使ってAIに学習させていきます。
これまで「Chatbot201707」では、ダイアログのボタンで注文を選択していました。今回は、ユーザーが入力した文字の内容から注文内容を判断するサンプルを作成してみましょう。まずは、カレーの注文に特化してAIを使った処理を行います。具体的には「ビーフカレーをお願いします」とユーザーが入力したら「ビーフカレー」という単語を抜き出して注文を判別するといった具合です。
Entityの作成
まずは、Entityを作成しておきましょう。「Chatbot201707」では「Curry」というEntityを作成します。ユーザーが何のランチメニューを注文したかを判断するために利用します。左メニューから「Entities」を選択して「Create new entity」をクリックします。
「Entity name」に「Curry」、「Entity type」には「Simple」を選択したのち、「Done」をクリックして保存します。
Intentの作成
次に、Intentを作成します。左メニューから「Intents」を選択して「Create new intent」をクリックします。
Intentを「Order」という名前で保存します。
例文の追加
作成した「Order」Intentを選択して、AIに例文を使って学習させていきます。テキストボックスにユーザーからの注文の例文として「ビーフカレーをお願いします」と入力して「Enter」キーを押して確定します。
カレーの注文として認識させるために、先ほど登録した「Curry」Entityをどの単語に割り当てるかを選択します。カレーの種類の一つとして「ビーフカレー」という単語を抜き出したいので、「ビーフカレー」をクリックします。すると「[ビーフ]」がカッコに囲まれた表示に変わります。続けて「カレー」をクリックすると、表示が「[ビーフカレー]」と変わるので、そこでクリックします。「Curry」を選択すると「ビーフカレー」という単語が「Curry」Entityとして種類分けされ、登録さます。これでAIに「ビーフカレー」という単語がカレーの注文であることを認識させられます。
Entityが追加されると、例文の一部がEntity(ここではCurry)に置き換わります。これで種類分けされたことになります。
このLUISアプリケーションでは、ユーザーの入力した文章からカレーの種類を表す文字を抜き出すことが目的です。ユーザーが入力しそうな文章を想定して、「ポークカレーをください」や「ベジタブルカレーをひとつ」など、他の例文も追加しておきましょう。すべてのカレーについて、同じ文章を登録する必要はありませんが、カレーの種類や文章の調子を変えて、いろいろなパターンを追加しておきます。例文が多ければ、それだけAIの学習が進みます。
AIのトレーニング
登録した例文を元に、AIのトレーニングを行います。下記ページの画面右上にある「Train」を選択します。「Train Application」をクリックしてトレーニングを開始します。「App up to date」が表示されればトレーニングの完了です。AIが例文を学習しました。
AIのテスト
トレーニングが完了したら学習した内容をテストしてみましょう。「→ Test」をクリックしてテストフィールドを表示します。テキストボックスにテストをする文章を入力して「Enter」キーを押します。「ビーフカレーをお願いします」と入力したところ、以下のようになりました。「Inspect」をクリックすると、「ビーフカレー」という単語がEntityの「Curry」として認識されていることがわかります。
その他にもいくつか例文を試してみましょう。カレーの種類と文章の組合せはきちんと識別しているようですが、「ポーク」という単語だけでは、うまく認識できていないようです。
そこで、さらにIntentに例文を追加して、再度AIのトレーニングを行います。この作業を繰り返すことで、AIが鍛えられて言語解析の精度が高まります。左ペインの「Intents」をクリックして、再度例文を追加します。「ポーク」という単語を追加しました。
忘れずに再びトレーニングを行い、テストをしてみましょう。以下のように、今度はきちんとカレーの種類単体の単語でも識別していることが確認できました。
以上ここまで、カレーの注文に特化したAI、LUISアプリケーションが完成しました。