LUISチュートリアル(前編:仕組みと設定方法)

 

はじめに

今回は、Microsoft Cognitive Servicesの中にある、LUIS(Language Understanding Intelligent Services)というサービスについて紹介したいと思います。
まず、LUISの仕組みを解説し、その後、実際に使い方を解説します。

なお、本記事では、以下の記事を参考にさせていただいています。
Cognitive Services Documentation LUIS API
LUISのUIが一新され、Prebuilt entityが日本語も認識するようになった件
チャットボットをAIでもっと素敵にする!自然言語処理の仕組み

LUISの仕組み

LUISは、テキストを解析して「ユーザが何をしたいのか」と「それに関連する情報(単語)」を抽出し、コンピュータが理解できる形式に変換するアプリを簡単に作成することができるサービスになります。この「ユーザが何をしたいのか」をIntentと呼び、「Intentに関連する情報(単語)」をEntityと言います。

例えば、LUISに対してユーザが、「明日の東京の天気は?」という文章を入力したとします。このとき、LUISは、ユーザが「天気を知りたい」という意図を持ってその文章を入力していて、入力された文章にはそれに関連する「明日」という日付Entityと「東京」という地名Entityが含まれる、ということを解析します。そして、その結果をコンピュータが理解しやすいJSON形式に変換して返してくれます。
この結果をアプリ側で利用することで、ユーザが「天気を知りたい」から、日付が「明日」で場所が「東京」の天気を調べてユーザに返してあげよう、ということが可能になります。

また、LUISの特徴としては、ポータルで簡単に学習データを入力できるため、ラベル付け作業を削減できるということと、少量サンプルの学習でもある程度柔軟な文章の解析が可能であることがあげられます。

LUISを使用するにあたって、実際に開発者がすることは以下の3つの作業となります。

  • Intentの設定
  • Intentに対するEntityの設定
  • ユーザが入力しそうな文章をLUISに学習させる

これらの作業をポータルからの簡単な操作で行うことができます。


LUISチュートリアル

実際に、LUISアプリを設定して学習させてみます。

Sign inとアプリの作成

まず、Microsoft Cognitive ServicesのLUISのホームページにSign inします。Sign inにはMicrosoftのアカウントが必要となります。下の図の赤枠をクリックして、Sign in操作を行います。

Sign inが完了すると、下の図のようにMy Appsのタブが開きます。このページの「New App」をクリックして新しいアプリを作成します。

 
New Appをクリックするとダイアログが現れますので、下の図の赤枠内(NameとCulture)を入力してCreateをクリックします。今回は、例として「天気取得アプリ」を作成します。


アプリ作成が完了すると、下のようなダッシュボードが開きます。

IntentとEntityの設定

次に、Intentを設定します。
まず、ダッシュボードページの左側(上の図の赤枠)にあるIntentsをクリックすると、Intents画面が開きます。ここで、Add Intentsをクリックして、登録したいIntent名を入力してSaveをクリックします。今回は、例として「天気を取得する」というIntentを作成しています。

 

Intentの設定が終わったら、Entityの設定を行います。
まず、Intents画面の左側にあるEntitiesをクリックすると、下の図のようなEntities画面が開きます。

 

ここで、Add custom entityをクリックすると下図のようなダイアログが出ますので、Entity名を入力し、Saveをクリックします。今回は、天気を調べるために最低限必要となる「日付」と「地名」という2つのEntityをそれぞれ作成します。

 
 
 

 学習

次に、いよいよ学習を行います。ページの左側にあるIntentsをクリックすると、先程作成した「天気を取得する」というIntentがあります(下図)。この赤枠内のIntent名をクリックすると、Utterances画面を開くことができます。Utterancesは「発言」という意味なので、Utterances画面は、ユーザが入力しそうな文章を設定するための画面ということですね。

 

下の図のページで、LUISに学習させたい文章を登録することができます。ここでは、例として「明日の東京の天気は?」という文章を登録してみます。

次に、登録した文章中で、Entityに該当する単語にEntityを割り当てます。下図の例では「明日」は「日付Entity」に、「東京」は「地名Entity」に割り当てています。単語をクリックすると自分で登録しているEntityのリストが表示されますので、これを割り当ててください。


この操作によって、LUISが入力された発言中でどの単語がどのEntityに当たるのかを識別することが可能となります。単語にEntityを割り当てると下の図のように表示が変わります。


 

ある程度サンプル数がないと学習にならないので、例文以外にもいくつか学習させる必要があります。ユーザが入力しそうな文章や単語をあらかじめ登録すると精度が上がります。

今回は、以下のような文章を学習させました。

【今回学習した文章の抜粋】

 

 
学習文章を登録したら、Saveをクリックして保存します。その後、ページ左側のTrain & Testをクリックし、Train Applicationをクリックして学習を行います。


学習結果の確認

学習が完了すると、以下のようなTest画面が開くと思います。

ここで、直接学習していない文章を入れるとどうなるのかが気になったので、「明後日のロンドンの天気ってどうなってる?」という文章でテストしてみました。「明後日」や「ロンドン」という単語、さらには語尾が「ってどうなってる?」という文章は全く学習させていません。この文章で本当にちゃんと解析できるのでしょうか?

 
 
 
結果は、下の図のように「明後日」は「日付Entity」、「ロンドン」は「地名Entity」と分類され、天気を取得するIntentであると正しく認識されました!
このテストで、類似した文章であれば、学習させていない単語を使用してもある程度識別が可能であるということがわかりました。学習の際に全ての単語を網羅しなくても良いというのは、LUISの可能性を感じます。今回は適当に学習させてこの結果なので、学習する文章を工夫すれば、もっと柔軟な解析ができそうです。
 

公開

最後に、外部からこのアプリを使用するために公開します。ページ左側のPublish Appをクリックして、公開画面を開き、Endpoint KeyとEndpoint slotを入力し、Publishをクリックすると公開することができます。

EndPoint Keyがない場合は、Add a new key to your account をクリックします。すると、Programmatic API Keyが生成されますので、これをコピーします。
 

そして、Add a new keyをクリックすると現れるダイアログのKey ValueにProgrammatic API KeyをペーストしてSaveをクリックします。すると、Publish AppページでPublishをクリックできるようになりますので、これをクリックして公開が完了です。
ここまですると、LUISの解析結果を外部のアプリから受け取れるようになります。


このEndpoint urlの最後の”q=”以降に解析させたい文章を入れてリクエストを送ると、LUISが文章を解析し、結果をJSON形式で返してくれます。試しに、ブラウザで Endpoint url + “明日の東京の天気は” というurlを入力すると、以下のような結果が返ってきます。

 {
  "query": "明日の東京の天気は?",
  "topScoringIntent": {
    "intent": "天気を取得する",
    "score": 1.0
  },
  "intents": [
    {
      "intent": "天気を取得する",
      "score": 1.0
    },
    {
      "intent": "None",
      "score": 0.00462110247
    }
  ],
  "entities": [
    {
      "entity": "東京",
      "type": "地名",
      "startIndex": 3,
      "endIndex": 4,
      "score": 0.9965598
    },
    {
      "entity": "明日",
      "type": "日付",
      "startIndex": 0,
      "endIndex": 1,
      "score": 0.996626139
    }
  ]
}
 
 
IntentとEntityをきちんと分類してくれていることがわかります。
 
次回は、LUISとPepperを連携させてみます!
 

まとめ・所感

今回は、LUISの概要解説とチュートリアルをお届けしました。
LUISは、ユーザの自然言語による入力を「ユーザの意図(Intent)」と「それに関連する情報(Entity)」に分類して、プログラムで扱いやすいデータ構造に組み替えてくれるサービスでした。

Web上で簡単な設定をするだけで、自然言語による入力を扱えるようになるのは非常に便利ですね。学習させる文章や単語は開発者側で準備するので、精度の面でもいろいろ工夫ができそうです。

%d人のブロガーが「いいね」をつけました。