ごった煮

色々な事を書いてます

LUISで簡単自然言語解析APIを作る

BotをもっとすごくするのにLUISがいいらしいとのことでちょっとLUISで遊んでみます。

LUISとは

Project Oxfordの中に含まれる言語関連のコンポートネントです。

L : Language

U : Understanding

I : Intelligent

S : Service

この4つの単語の頭文字をとってLUISとのことです。

ホームページは、ここ です。

LUISは何ができるのか

LUISは、与えられた文章に対して正解データを与えてこの文章はこういう意味ですといったことを返す仕組みを作ることができる自然言語処理機械学習プラットフォームです。

例えば、

Start a run

という文章に対してこれは何かをStartする文章ですといった情報とrunは何かをするための動作ですよみたいな情報を正解データをして食わせてやると

Start a hoge

といった文章を与えたときに、hogeという動作を行う。何かをStartする、といった意味を持った文章ですというような解析結果を返してくれるAPIが出来上がるといったものです。(日本語怪しい。。。)

LUISを触ってみる

LUISのサイトに行くと以下のような画面になるかと思います。(下の画像は一つAPIがすでに生えています)

image

New Appから新しいヤツを作成します

image

 

image

 

LUISでいろいろやる画面のトップは以下のような感じ

image

左の赤枠の部分が動作やらを設定する部分です。

緑の枠の真ん中の部分が、文章を入れてこの文章は、この動作を意味していますみたいな正解データを食わせる部分です。

左下のTrainの部分は、モデルの訓練を行うボタンです。

モデルの訓練は基本的に自動で行われますがクリックすると手動で訓練されます。

image

動作を登録する

赤枠の部分を押すと文章の種類を登録できます。

Intent nameの部分に、文章の種類の名前、その次の青枠の部分に、紐づく文章や単語のサンプルを入力します。

今回は、TimerStartという分類なので、Startという言葉が文章に入っていると紐づくようにサンプルを入れます。

image

Saveボタンを押すと画面中央にこの画面が出ます。

先ほど入れたサンプル文章があ青枠の中に入力された状態になります。

緑枠のコンボボックスで紐づく動作を選択してSubmitを押すとこの文章がこの動作と紐づくといったことをLUISに教えることができます。

image

エンティティを登録する

LUISの文章解析の中で重要な点として、文章の中の単語や数字などの抜出、意味づけ処理があります。

それのタイプを登録します。

 

赤枠の部分を押すとAdd a new Entityという画面が出るので適当に名前を付けます。

今回は、ActivityTypeという名前にします。

登録したら文章を新たに登録してみます。

image

 

TimerStartとかだとわかりにくいのでこういった感じのintentを新規に作ります。

image

 

作るとこんな感じに画面中央に出ます。

今回は、runがActivityになるのでrunをドラッグします

image

 

するとこんな感じにEntityの選択画面になるのでEntityを紐づけます

image

 

少し複雑なEntityを登録する

数字やその他いろいろの少し複雑なEntityは、プリセットがあるのでそれを使ってみます。

今回は数字です。

 

Pre-build Entitiesを選択するとプリセットが出てくるのでnumberを選択します。

image

 

numberのEntityが登録出来たら新しくintentを作ります。

image

 

するとこんな感じに数字がnumberで選択されますのでこれを学習させます。

image

 

APIを公開する

学習が上手くいくと赤枠の部分が押せるようになって外部にAPIが公開できます。

押せない場合は、おそらく学習データが足りなくてモデルが作れていないとかだと思うので適当に文章を食わせましょう

image

作ったらQueryに文章を入れてurlをクリックするとAPIのテストができます

start timerを入れて実行してみると以下のような感じで結果が返ってきます。

image

確率的には大体TimerStartのアクティビティに紐づいているかな~程度の結果です。

image

start a walkingの結果です。

StartActivityなどにほとんどデータを食わせていないのでよくわからいからNoneが一番大きく出ています。

image

 

フレーズを登録する

画面左にPhrase List Featuresという部分があります。

ここでフレーズを登録しておけば、Entityと紐づいて毎回start a walking, start a walkなど細かく学習データを食わせなくてもいいようになります。

とりあえずrun, walk, walkingを登録してstart a walkingという文章でAPIに問い合わせると以下のようになります。

image

 

一気にStartActivityの確率が跳ね上がりました。

フレーズにEntityを登録したおかげです。

image

 

まとめ

Azure MLよりも手軽に自然言語処理系のAPIを作って公開できるので、Bot FrameworkのバックエンドとしてLUISを使うとすごく捗りそうです。

Bot Framework自体にLUIS連動のライブラリが含まれているので込み入ったことをしたくなったらこいつでとりあえずAPIを作りましょう。