LUISのUIが一新され、Prebuilt entityが日本語も認識するようになった件

## 1.はじめに
この記事は最近アップデートされたMicrosoft Cognitive Servicesで提供されているLanguage Understanding Intelligent Services(LUIS)のUIとその操作、Prebult entityに関する記事です

## 2.LUISの仕組み
LUISは自然言語処理エンジンです。仕組みはいままで多くの記事が出ていますので詳しくは書きませんが、LUISは何かの処理をしたい場合、処理の意図を示す「インテント」と、その処理をするために必要な変数「エンティティ」を認識して、ユーザーの入力をコンピュータが扱えるようにします。

例えば、「天気を知りたい」場合
人間が入力する文章は【今日の東京都の天気は？】というようになります。
ここで、インテントは【天気は？】の部分になります。
つぎに天気を知りたいのはわかったけど、「いつの？」「どこの？」という情報が無ければ天気を調べることができません。そこでエンティティを使います。
日時エンティティは【今日】
場所エンティティは【東京都】
といったように認識させることで、LUISは自然言語を扱えるようになります。

## 3.Prebuilt entity
LUISにはPrebuilt entity(旧称：Builtin Entity)というものがあります。
これは我々が学習させずとも最初から認識できるようになっている汎用的なエンティティです。例えば「日時」「温度」「年齢」などがあります。

**Prebuilt entityは学習させる必要が無いだけでなく正規表現で返してくれる**という最大の利点があります。
日時の処理を考えてみると、
日時の入力の形には「今日」「明日」「4/16」「2017年3月16日」というように様々な表現方法があります。Prebuilt entityを使用せずにそれぞれの形をLUISに覚えさせることはそれほど難しいことではないかもしれません。しかし、自然言語処理エンジンを組み込むアプリで正規化をしなければならなくなります。
「今日」だったら今日の日付を取ってきて・・・・
「4/16」なら今年の年の部分を取ってきて結合して・・・
「2017年3月16日」なら年月日を/で置換して・・・
となるととても大変です。そのためPrebuilt entityはそれらをすべて正規表現で返してくれるという機能があります。
詳しいPrebuilt entityの種類や正規表現の形については[公式のドキュメント](https://www.microsoft.com/cognitive-services/en-us/LUIS-api/documentation/Pre-builtEntities)をご覧ください。

ちなみに(2017/03/16現在)公式ドキュメントを見ると日本語は対応していないようなのですが、試してみたところ認識はするようだったので、この記事のタイトルはあえて「対応」ではなく「認識」にしています。

## 4.実際に使ってみる
実際に新UIのLUISで新規作成~公開をやってみます。
### 4-1.新規作成
https://www.luis.ai/applications にアクセスします。
![0.01.png](https://qiita-image-store.s3.amazonaws.com/0/149212/d8f412a9-9738-c1a2-9ee3-f035e45e6bfc.png)　　
それぞれの必要事項を入力します。ここでCultureを間違えないように注意してください。
![0.1.png](https://qiita-image-store.s3.amazonaws.com/0/149212/c9c535b5-f38c-dfb2-d3d6-77bc27892c2f.png)
### 4-2.学習の準備
作成後、ダッシュボードが開きますので左ペインの[Intent]をクリックします。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/149212/d3d208c0-c305-a7c2-3acf-cc2f5b9452ef.png)　　
処理の意図を示すIntentを新規作成します。
![2.png](https://qiita-image-store.s3.amazonaws.com/0/149212/e5604baf-2fc8-363c-e370-e0d8c509bee0.png)　　
ここでは「天気を取得する」というIntentを作成します。
![3.png](https://qiita-image-store.s3.amazonaws.com/0/149212/1361d7cd-c5e3-2150-e49d-1507e057401d.png)　　
Intentを作成したら左ペインの[Entites]をクリックします。Prebuild entityにないエンティティを作成します。
![4.png](https://qiita-image-store.s3.amazonaws.com/0/149212/2ece2841-e8fc-b40b-b522-6dcf1f98c1d6.png)　　
天気を調べるには場所の情報が必要なので「地名」というエンティティを作成します。
![5.png](https://qiita-image-store.s3.amazonaws.com/0/149212/97d58429-1bdf-1f55-9ec0-10d57468316d.png)　　
次にPrebuilt entityの有効化です。
![6.png](https://qiita-image-store.s3.amazonaws.com/0/149212/72e2c1e7-4a0d-0761-a555-f48e96ec1140.png)　　
いつの天気を調べるかの情報も必要なので
Prebuilt entityとして用意されているエンティティの中から「datetime」にチェックを入れ、追加します。
![7.png](https://qiita-image-store.s3.amazonaws.com/0/149212/a79d957a-42e0-c3ae-069d-fa55c63a0fe6.png)　　
これで「天気を調べる」というインテントと、「場所」「日時」２つのエンティティができました。
![8.png](https://qiita-image-store.s3.amazonaws.com/0/149212/8f41223e-5ba9-77a0-cf8f-3f1a4c79c27e.png)　　
### 4-3.学習
作成した「天気を取得」インテントに学習させます。インテント一覧画面で「天気を取得」を選択します。
![9.png](https://qiita-image-store.s3.amazonaws.com/0/149212/196b022d-b7d7-cc12-9450-4e05a7967598.png)  
入力欄に実際に天気を調べたいときに入力されそうな文章を入れてEnterキーを押します。　　
![10.png](https://qiita-image-store.s3.amazonaws.com/0/149212/2c8ebc23-9eab-3e11-4eec-6c08a4eb65b1.png)　
![11.png](https://qiita-image-store.s3.amazonaws.com/0/149212/0d6ab8b4-6efc-4fb0-0521-225c27c98f6f.png)　　
そうするとLUISがその文章を読み込んで解析をします。ここではまだ何も学習させていないませんが、「今日」という日時を示す部分がPrebuilt entityのdatetimeとして認識されていることがわかります。しかし「東京」は地名だと認識されていないので、これを教えてあげます。「東京」をクリック。
![12.png](https://qiita-image-store.s3.amazonaws.com/0/149212/5c4c97cf-6508-4e01-8722-1da7b2de9b2d.png)　
自分で作ったエンティティリストが出てくるので「地名」を選択　
![13.png](https://qiita-image-store.s3.amazonaws.com/0/149212/d673da33-ac37-87be-8ec6-9dc0fb2b84bf.png)　　
これで、入力された文章にインテントとエンティティのマッピングが完了しました。
**これをいろいろなパターンでしらみつぶしにやっていきます。**
![14.png](https://qiita-image-store.s3.amazonaws.com/0/149212/155feb0f-6249-296a-ef2b-eb6fad0d02a9.png)　　
学習をするにはある程度のサンプル数が必要なのでもう少し文章を増やします。
![15.png](https://qiita-image-store.s3.amazonaws.com/0/149212/1e0d6643-8a05-159a-2362-016f86749394.png)　　
ちなみにデフォルトでは[$~]となっているエンティティもLabel viewを変えると中身が見れます。
![17.png](https://qiita-image-store.s3.amazonaws.com/0/149212/bbb89b16-88ff-0843-a7bd-4b43cdc28b5b.png)　　
ある程度のサンプルを作成したら[save]をクリックして保存します。
![18.png](https://qiita-image-store.s3.amazonaws.com/0/149212/b0920baa-c74a-d65c-c929-6fbfd2ab0b96.png)　　
最初のダッシュボードに戻ると、作成したインテント、エンティティの数などが変化しています。グラフなどを見ることで他と比べて学習が足りないインテントなどを一目で見つけることができます。
![19.png](https://qiita-image-store.s3.amazonaws.com/0/149212/0bd96ed8-f9bb-cc18-8273-79cf59240172.png)　　
最後に、いままで入力した文章とそのマッピングをトレーニングさせるとLUISは学習を完了します。
左ペインの[Train & Test]をクリックし、[Train Application]をクリックします。すると学習処理が走ります。
![20.png](https://qiita-image-store.s3.amazonaws.com/0/149212/78237060-92be-7e26-eaf8-8855b0247b6e.png)　　
学習が完了すると先ほどの「天気を取得」インテントのページの、図の箇所が変わっています。
![21.png](https://qiita-image-store.s3.amazonaws.com/0/149212/5a58cc01-05b4-13a3-c477-60c169a560fd.png)　　
[Train & Test]ページでは学習させたLUISをテストすることもできます。入力欄に何か文章を入れEnterキーを押すと、その文章をLUISに入力した時の結果を見ることができます。
![22.png](https://qiita-image-store.s3.amazonaws.com/0/149212/08875e43-338a-4ae5-1861-050a9df74d30.png)　　
### 4-4.公開
公開は左ペイン[Publish App]をクリックするとできます。ステージング・運用スロットができたのが地味にうれしいところです。
![23.png](https://qiita-image-store.s3.amazonaws.com/0/149212/54e6e5ba-c79e-041a-987f-74ab109a58bd.png)