LUISを使ってChatbotに日本語を理解させる

2018年1月26日(金)
樋口 勝一
連載6回目となる今回は、マイクロソフトが提供する言語解析AIを用いて、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

Cognitive Services

「Cognitive Services」の「言語」カテゴリ内にある「Language Understanding Intelligent Service」通称LUIS(ルイス)は、Chatbotに最適な言語解析のAI機能を提供しています。現在プレビュー版ですが、機能としては実用に十分利用できるレベルのAIとなっています。

LUIS

LUIS

AIというと、何でも自分で考えて自動的に何かをしてくれるものと思いがちですが、AIといえどもできることできないこと、その特性は様々です。もちろんLUISも、何もしなくても言葉として理解してくれる、といったものではなく、与えられた文字列の中からあらかじめ分類されたカテゴリの中のキーワードを見つけ出すといった言語解析機能を提供します。入力された文字列によって様々なふるまいをするChatbotは、言語解析ととても相性がよく、あらかじめ想定されたキーワードを効率よく入力された文字列から抜き出して、それに従って処理を分岐するというような使い方には最適です。

LUISのセットアップ

LUISアプリケーションの作成

まずはLUISを使うための準備をしておきましょう。サイトの「Try Language Understanding Free」をクリックします。「Login/Sign up」をクリックしてMicrosoftアカウントでサインインして、LUISのアカウントを作成します。

LUISのアカウントを作成

LUISのアカウントを作成

LUISはアプリケーション単位で言語解析処理を分けることができます。例えば保険営業窓口用やホテル受付用など、用途が異なれば、解析するキーワードの種類も異なります。アプリケーションごとに切り分けることで、特定の分野にマッチした言語解析を行い、効率よくAIを学習させ育てられます。今回はこれまで作ってきた「Chatbot201707」用のLUISアプリケーションを作成します。

下記のページで、「Create LUIS app」をクリックします。

LUISアプリケーションの作成(1)

LUISアプリケーションの作成(1)

「Country」は「Japan」を選択して、チェックを入れて続けます。

LUISアプリケーションの作成(2)

LUISアプリケーションの作成(2)

「Create new app」をクリックします。

LUISアプリケーションの作成(3)

LUISアプリケーションの作成(3)

LUISアプリケーションのプロフィールを入力します。

LUISアプリケーションの作成(4)

LUISアプリケーションの作成(4)

これで、LUISアプリケーションが作成されました。

LUISアプリケーションの作成(5)

LUISアプリケーションの作成(5)

EntityとIntentの作成

LUISアプリケーションを作成して最初にすることは、「Entity」と「Intent」の作成です。なかなか日本語でぴったりの言葉を探すのが難しいのですが、「Entity」は直訳すると「物体」ということになります。LUISで言うところのEntityは、簡単に言うと解析する言語を分類するための「種類名」や「タグ」のようなものです。例えば、「Day」と「Weather」というEntityを作成して「今日は晴れです」という言葉を分類すると、「今日」は「Day」、「晴れ」は「Weather」というようなEntityに分類することができます。

Entity

Entity

もう一方の「Intent」は「意味」という言葉ですが、LUISでは意味付けとなります。文字列がどういった意味を持つのか、例文を使ってAIに学習させていきます。

これまで「Chatbot201707」では、ダイアログのボタンで注文を選択していました。今回は、ユーザーが入力した文字の内容から注文内容を判断するサンプルを作成してみましょう。まずは、カレーの注文に特化してAIを使った処理を行います。具体的には「ビーフカレーをお願いします」とユーザーが入力したら「ビーフカレー」という単語を抜き出して注文を判別するといった具合です。

Entityの作成

まずは、Entityを作成しておきましょう。「Chatbot201707」では「Curry」というEntityを作成します。ユーザーが何のランチメニューを注文したかを判断するために利用します。左メニューから「Entities」を選択して「Create new entity」をクリックします。

Entityの作成(1)

Entityの作成(1)

「Entity name」に「Curry」、「Entity type」には「Simple」を選択したのち、「Done」をクリックして保存します。

Entityの作成(2)

Entityの作成(2)

Intentの作成

次に、Intentを作成します。左メニューから「Intents」を選択して「Create new intent」をクリックします。

Intentの作成(1)

Intentの作成(1)

Intentを「Order」という名前で保存します。

Intentの作成(2)

Intentの作成(2)

例文の追加

作成した「Order」Intentを選択して、AIに例文を使って学習させていきます。テキストボックスにユーザーからの注文の例文として「ビーフカレーをお願いします」と入力して「Enter」キーを押して確定します。

例文を追加

例文を追加

追加された例文

追加された例文

カレーの注文として認識させるために、先ほど登録した「Curry」Entityをどの単語に割り当てるかを選択します。カレーの種類の一つとして「ビーフカレー」という単語を抜き出したいので、「ビーフカレー」をクリックします。すると「[ビーフ]」がカッコに囲まれた表示に変わります。続けて「カレー」をクリックすると、表示が「[ビーフカレー]」と変わるので、そこでクリックします。「Curry」を選択すると「ビーフカレー」という単語が「Curry」Entityとして種類分けされ、登録さます。これでAIに「ビーフカレー」という単語がカレーの注文であることを認識させられます。

Entityを追加

Entityを追加

Entityが追加されると、例文の一部がEntity(ここではCurry)に置き換わります。これで種類分けされたことになります。

Entityの追加

Entityの追加

このLUISアプリケーションでは、ユーザーの入力した文章からカレーの種類を表す文字を抜き出すことが目的です。ユーザーが入力しそうな文章を想定して、「ポークカレーをください」や「ベジタブルカレーをひとつ」など、他の例文も追加しておきましょう。すべてのカレーについて、同じ文章を登録する必要はありませんが、カレーの種類や文章の調子を変えて、いろいろなパターンを追加しておきます。例文が多ければ、それだけAIの学習が進みます。

様々な語調の例文を登録することで、AIの学習が進む

様々な語調の例文を登録することで、AIの学習が進む

AIのトレーニング

登録した例文を元に、AIのトレーニングを行います。下記ページの画面右上にある「Train」を選択します。「Train Application」をクリックしてトレーニングを開始します。「App up to date」が表示されればトレーニングの完了です。AIが例文を学習しました。

トレーニング

トレーニング

AIのテスト

トレーニングが完了したら学習した内容をテストしてみましょう。「→ Test」をクリックしてテストフィールドを表示します。テキストボックスにテストをする文章を入力して「Enter」キーを押します。「ビーフカレーをお願いします」と入力したところ、以下のようになりました。「Inspect」をクリックすると、「ビーフカレー」という単語がEntityの「Curry」として認識されていることがわかります。

AIのテスト

AIのテスト

その他にもいくつか例文を試してみましょう。カレーの種類と文章の組合せはきちんと識別しているようですが、「ポーク」という単語だけでは、うまく認識できていないようです。

認識されない例文

認識されない例文

そこで、さらにIntentに例文を追加して、再度AIのトレーニングを行います。この作業を繰り返すことで、AIが鍛えられて言語解析の精度が高まります。左ペインの「Intents」をクリックして、再度例文を追加します。「ポーク」という単語を追加しました。

さらに例文を追加

さらに例文を追加

忘れずに再びトレーニングを行い、テストをしてみましょう。以下のように、今度はきちんとカレーの種類単体の単語でも識別していることが確認できました。

再トレーニング

再トレーニング

以上ここまで、カレーの注文に特化したAI、LUISアプリケーションが完成しました。

GMOインターネット株式会社 Windowsソリューション チーフエグゼクティブ

GMOインターネットでWindowsのサービス開発運用に関わって16年、数年単位で進化し続けるMicrosoftのWindowsは新しもの好きにはたまらない製品です。自動販売機に見たことのないジュースがあれば、迷わすボタンを押します。そんなチャレンジが僕の人生を明るく、楽しくしてくれています。

お名前.com デスクトップクラウド
http://www.onamae-desktop.com/

お名前.com VPS Hyper-V
http://www.onamae-server.com/vps/hyperv/

連載バックナンバー

Web開発技術解説
第10回

Chatbotから話しかける(プロアクティブメッセージの送信)

2018/5/18
連載10回目となる今回は、Chatbotから先に話しかけるための手順を紹介します。
Web開発技術解説
第9回

Chatbotで画像コミュニケーションを実現する

2018/5/14
連載9回目となる今回は、Chatbotとの文字でのやり取りに画像を追加する方法を解説します。
Web開発技術解説
第8回

FacebookでChatbotを公開する

2018/4/17
連載8回目となる今回は、FacebookのMessengerを介してChatbotとやり取りする方法を解説します。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています