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がすでに生えています)
New Appから新しいヤツを作成します
LUISでいろいろやる画面のトップは以下のような感じ
左の赤枠の部分が動作やらを設定する部分です。
緑の枠の真ん中の部分が、文章を入れてこの文章は、この動作を意味していますみたいな正解データを食わせる部分です。
左下のTrainの部分は、モデルの訓練を行うボタンです。
モデルの訓練は基本的に自動で行われますがクリックすると手動で訓練されます。
動作を登録する
赤枠の部分を押すと文章の種類を登録できます。
Intent nameの部分に、文章の種類の名前、その次の青枠の部分に、紐づく文章や単語のサンプルを入力します。
今回は、TimerStartという分類なので、Startという言葉が文章に入っていると紐づくようにサンプルを入れます。
Saveボタンを押すと画面中央にこの画面が出ます。
先ほど入れたサンプル文章があ青枠の中に入力された状態になります。
緑枠のコンボボックスで紐づく動作を選択してSubmitを押すとこの文章がこの動作と紐づくといったことをLUISに教えることができます。
エンティティを登録する
LUISの文章解析の中で重要な点として、文章の中の単語や数字などの抜出、意味づけ処理があります。
それのタイプを登録します。
赤枠の部分を押すとAdd a new Entityという画面が出るので適当に名前を付けます。
今回は、ActivityTypeという名前にします。
登録したら文章を新たに登録してみます。
TimerStartとかだとわかりにくいのでこういった感じのintentを新規に作ります。
作るとこんな感じに画面中央に出ます。
今回は、runがActivityになるのでrunをドラッグします
するとこんな感じにEntityの選択画面になるのでEntityを紐づけます
少し複雑なEntityを登録する
数字やその他いろいろの少し複雑なEntityは、プリセットがあるのでそれを使ってみます。
今回は数字です。
Pre-build Entitiesを選択するとプリセットが出てくるのでnumberを選択します。
numberのEntityが登録出来たら新しくintentを作ります。
するとこんな感じに数字がnumberで選択されますのでこれを学習させます。
APIを公開する
学習が上手くいくと赤枠の部分が押せるようになって外部にAPIが公開できます。
押せない場合は、おそらく学習データが足りなくてモデルが作れていないとかだと思うので適当に文章を食わせましょう
作ったらQueryに文章を入れてurlをクリックするとAPIのテストができます
start timerを入れて実行してみると以下のような感じで結果が返ってきます。
確率的には大体TimerStartのアクティビティに紐づいているかな~程度の結果です。
start a walkingの結果です。
StartActivityなどにほとんどデータを食わせていないのでよくわからいからNoneが一番大きく出ています。
フレーズを登録する
画面左にPhrase List Featuresという部分があります。
ここでフレーズを登録しておけば、Entityと紐づいて毎回start a walking, start a walkなど細かく学習データを食わせなくてもいいようになります。
とりあえずrun, walk, walkingを登録してstart a walkingという文章でAPIに問い合わせると以下のようになります。
一気にStartActivityの確率が跳ね上がりました。
フレーズにEntityを登録したおかげです。
まとめ
Azure MLよりも手軽に自然言語処理系のAPIを作って公開できるので、Bot FrameworkのバックエンドとしてLUISを使うとすごく捗りそうです。
Bot Framework自体にLUIS連動のライブラリが含まれているので込み入ったことをしたくなったらこいつでとりあえずAPIを作りましょう。