こんにちは! 岡田です。
Microsoft Bot Frameworkを使ってなんかやってみよう!というこの連載。今回はいよいよAIを搭載したBotをつくってみます。
Microsoft Bot Frameworkには「LUIS」というサービスとの連携が用意されていて、簡単にAI搭載Botを作る事ができます。
今回はそのLUISの使い方をご紹介します!
>> 過去のMicrosoft Bot Frameworkの記事はこちら
LUISとは
LUISとはMicrosoftが提供する、自然言語理解のAIを作成・育成し、APIとして公開できるサービスです。
これだけ聞くとなんだか難しそうですが、LUISではノンプログラミングで誰でも自分だけのAIが作ることができますのでご安心を。
LUISにできる事は人間が使う自然な文章を「機械が理解できるよう構造化されたデータに変換する」ことです。
たとえば、「はじめまして、岡田と申します。よろしくおねがいします。」という文章をLUISに送信すると、下記のような構造化されたデータに変換されます。
さて、LUISにできるのはここまで……。あとは、他のプログラムがこのデータをもとに返事をしたり、アプリを起動したり……というアクションを起こします。
お気づきの人もいるとは思いますが、LUISはいわゆる「弱いAI」に該当します。「弱いAIってどんな事をしているの?」「どうやって人間の考え方を再現してるの?」と気になった方は、LUISを触る事でかなり理解できるかと思いますので、是非実際に触って体感してみてください!
まずはLUISにサインイン
ではさっそくLUISで、AIを作成してみましょう! LUISの公式サイトにアクセスし、「Sign in or create an account」をクリックします。
選択肢が2つでてきますが、1つ目の「Sign in using a Microsoft account (most users)」をクリック。
ログイン画面に移るので、Microsoftアカウントでサインインします。アカウントがない方は、「Create one!」をクリックして、作成しましょう。
サインインが完了すると、管理画面へ進みます。
少しだけ画面の説明をします。
「New Apps」をクリックすると、新規LUISアプリケーションを作成する事ができます。またエクスポート済みのデータがあれば、インポートして作成する事もできます。
「Cortana pre-built apps」からは、Cortanaによって膨大なデータを学習済みのLUISアプリケーションが、APIとして使えるようになっています。
アプリケーションの作成
ではさっそく自分だけのAIを誕生させましょう! 「New App」をクリックします。2つの選択肢が現れますが、今回はイチから作成しますので、「New Application」を選択。
すると、次のようなダイアログが現れますので、必要な項目を入力していきます。
Enter application name (アプリケーション名)
作成するアプリケーション名を入力します。
今回は、例として「ja-test」という名前で作成してみます。
Enter application usage scenario (アプリケーションの使用想定シナリオ)
IoTやBotなどの選択肢がありますが、何を選んでもとくに影響はないようです。
今回は「Bot」を選んでみます。
Choose application domain (アプリケーションの領域)
こちらも多くの選択肢がありますが、何を選んでもとくに影響はない様子。
適当なものにチェックを入れましょう。
Enter application descriotion (アプリケーションの説明)
こちらは任意です。適当な内容で問題ありません。
Choose Application Culture (アプリケーションの文化・言語)
今回は日本語AI搭載Botを作成しますので、「Japanese」を選択します。
各項目を入力したら「Add App」をクリックして、アプリケーションを作成します。
少し時間がかかりますが、管理画面に新たに作成したアプリケーションが表示されるはずです。クリックしてアプリケーションの管理画面へ移動します。
メッセージを送れるような画面が現れましたね。さっそくAIに話しかけてみましょう! すでに開いている「New utterances (新しい発言)」のタブから、AIにメッセージを送信してみます。
メッセージを送信すると、下記のような結果が返ってきました。おや……何も変化が起きていません……。
じつは、今は何も学習していない状態なので、このままでは何も起きません。。。
AIにキレッキレに自然言語を理解してもらうためには、学習が必要になります。そのためのキーワードとなるのが、「インテント」と「エンティエティ」の2つです!
「インテント」と「エンティティ」を学習させよう
それでは、インテントとエンティティを作成していきます。
ざっくりとした説明
- インテント(Intents): その発言が、どういった意図を持っているのかをカテゴリー別けしていく概念
- エンティティ(Entities): その発言のなかにある、意味のある単語をカテゴリー分けしていく概念
今回は例としてAIに「挨拶を理解させる事」を目標として、解説していきます。
まずは、インテント(意図)を追加します。
次に、エンティティ(意味のある単語)を追加しましょう。
今回は、「挨拶」「名前」というエンティティを追加してみます。
左のメニューバーに、これまで追加したインテントとエンティティが表示されているはずです。これで準備は完了です。
これからはいよいよ発言内容に、インテントとエンティティを結びつけていきます。改めて再度、発言を送信しましょう。
まだ先ほどと同じ結果ですね。では、学習を始めていきます!
右上のセレクトボックスをクリックしてAIに、この発言は「挨拶したい」という意図の文だよ、という事を教えてみます。
次に、エンティティ(意味のある単語)も教育します。まずは「挨拶」の単語からです。
対象となる部分をクリックして範囲選択すると、エンティティのメニューが出てきます。このリストの中から、適切なものを選択して教えてあげましょう!
さらに、“岡田”の部分は「名前」だよ、という事も教えてあげます。この内容でよければ、「Submit」をクリックして学習をさせます。
これで1つ学習が終えました! ただし、これだけの学習データではまだまだ未成熟なので、いくつか似たような発言を送信して、学習を繰り返しましょう!
学習と確認/修正を繰り返す
学習、学習、学習……。すると、8度目ほどでインテントとエンティティが自動で判別された結果が返ってきました!
きちんと学習しているようですね! 次は試しに、まったく違う発言をしてみましょう。
この発言のなかに「挨拶」「名前」に該当する単語はないため、エンティティの判別は正しいと言えます。
しかし、インテントは「挨拶したい」として判別されているようです……。インテントを正しい内容に修正して、学習させてあげましょう!
このように、AIも間違いをしますので、修正しながら学習をしていきます。
何度か学習させたら、左下の「Train」ボタンからAIを更新しましょう。すると、これまでの学習データを吸収して、精度が上がります!
これでLUISの基礎となる使い方は以上です!
ここまでのおさらい
LUISは以下2つをおこなうことで、人間の自然な文章を理解しようとします。
- 発言を「インテント(意図)」によってカテゴリー分けする。
- 発言の中の単語を、「エンティティ(意味のある単語)」によってカテゴリー分けをする。
AIははじめは、まさに言葉を知らない赤ちゃんと同じ状態。それはつまり、たくさん学習させないと便利なAIはできない、という事でもあります。
現在いろんなAI搭載の製品がありますが、じつは、裏側にはこのような地道な学習があったんですね……。
LUISでは自分の好きなように学習させる事ができますので、自分だけの賢いAIを作る事も可能です!
連携のためにAPIとして公開しよう
さて、長いことここまで読んで、「学習できてすごいのはわかったけど、これだけで何の役に立つの?」と思った方も少なくないかもしれません。ずばりそう思った方、するどいです。その通りでLUISは単体では何の役にも立ちません。
LUISは、他のプログラムと連携して初めてその価値が発揮されます。その代表例が「チャットボット」です。では、さっそくbotと連携する準備をします!
……と、なんだか急に難しそうな事に挑戦しようとしていますが、超簡単に育てたAIをAPI化して公開する事ができるんです。さっそくやってみます。
さきほどのアプリケーション管理画面の左上にある「Publish」をクリック。
すると、ダイアログが現れるので、「Publish web service」をクリックしてください。
これだけでAPIが公開されました! わずか2クリックでしたね!
APIのURLは、今後必要になりますのでコピーして保管しておきましょう!
APIがきちんと動くかの確認
それではAPIがきちんと動くか試してみます。さきほどでてきた画面の「Query」の欄に、発言を入力しエンターキーを押します。
結果が、JSON形式で返ってきました! よくみると、きちんとインテントとエンティティが判別されています。
また、URLもよーくみると、発行されたAPIのURLの後ろに「&q=[発言の内容]」が付け足されただけのシンプルなものになっています。
別の発言を送信したい場合もURLを少し変えてリクエストするだけなので、複雑な事をせず、どんなプログラムからも使えますね!
もちろんAPIから受け取った発言も、確認・修正・学習させる事が可能です。
APIを公開すれば、自分で用意しなくても学習の元になるデータが自動で溜まっていくので、非常に効率的に学習をすることができます。
今回作成した「ja-test」の、学習データのエクスポートをGitHub Gistで公開しています。よろしかったらインポートして遊んでみてください!
次回はついにAI搭載Botをつくります!
さて次回は、いよいよ本題。Microsoft Bot FrameworkとLUISを使って、AI搭載Botを作成します!
またまた難しい事に挑戦しようとしていますが、Microsoft Bot FrameworkにはLUISでつくったAPIと連携する機能が、あらかじめ用意されています。
そのおかげでとてもシンプルなソースコードで作れますので、「インテント」と「エンティティ」さえ覚えていれば、案外簡単にできてしまいますよ。
実際に動くデモBotと、サンプルコードもご用意しますのでお楽しみに!
それではまたー!