12/13に LUIS がGeneral Availability (GA、正式に一般提供の開始)されポータルもかなり変わったので、改めて入門ネタを書いてみました。
LUIS (Language Understanding Intelligent Service)とは Microsoft Azure の Cognitive Services の 自然言語処理のサービスの一つで、概要は後述の 1. 事前準備 > LUIS を使う前の予備知識 に記載してます♪。
Overview
1. 事前準備(今回)
2. LUIS App の構築(今回)
3. Features / PreBuild Entity の活用(次回)
4. バージョン管理 / 共同編集 / 公開(次回)
元々は12/7に書いた記事ですが、12/13の LUIS の GA でポータルが大幅に更新されたため書き直してます....
12/13GA時に更新された情報は、以下でざっくりまとめてます。
どうでもいい話ですが、GAでポータル側は、"Language Understanding" という表記になって、IS(Intelligent Service)の部分がないけど、Azure ではまだ記載があって正式名称はLUになった?とかなんとなく思っています。
今回は、Cogbot Advent Calendar 8日目のエントリーです。
LUIS 以前に Cognitive Services の全体を俯瞰したい場合は、以下を是非...(私の執筆なやつなですが...汗)
1. 事前準備
Microsoft アカウント
LUIS のポータルサイトでアカウントを作るために、Microsoft アカウントが必要です。もっていない場合はマイクロソフトのサイトから申し込みましょう。
サブスクリプションキー
サブスクリプションキーは、LUIS を外部(Web API とか)から利用するために必要となります。つまりキーがなくても、LUIS のポータルサイトで学習モデルを作って文章がどれくらい認識されるか試すことはできますので、試したいだけなら無理に取得することもないでしょう。
サブスクリプションキーを取得には、Azure のアカウントで Azure のポータルにログインして取得する必要があります。
手順はこちらです。
また、LUISのポータルに新規でサインアップすると無料のキーが付与されるようです!利用量や期間に制限があるかもしれませんがサクッと試せそうですね(新規にサインアップして無駄にアカウント作りたくないので試してないです♪)。
2017/12/13にGAして料金がきになるところですね。もちろん無料枠はあります。サクッと試すには十分かと個人的に思っています。詳しくはこちらをご覧ください。
価格 - Language Understanding Intelligent Services の API | Microsoft Azure
LUIS を使う前の予備知識
LUIS がざっくりどんな機能かというと、
「文章を入力すると、その文章がどの インテント で、文章中の単語がどの エンティティ に属するかを判断してくれる」
というものです。
インテント と エンティティ をどう決めるのは、会話からどんな情報を引き出せばプログラムが要件を満たせるか次第だと思います。
そのため、開発者がすることは、適切な インテント と エンティティ を定義し、文章を学習させて賢くさせることです。
例として「天気予報を調べるのと、あいさつができるチャットボット」が作りたい場合だと、会話の文章から以下の情報を取得できれば実現できそうです。
- 文章が、天気予報を聞いているのかあいさつなのか(インテントにて判断させる)
- いつ(エンティティにて判断させる。空なら今日とするとか)
- どこ(エンティティにて判断させる。取得できないならボットから場所の質問するか、デバイスからロケーション情報取得するとか)。
インテントとエンティティの設定例です。
インテント | エンティティ | 学習させる文章例 | 備考 |
---|---|---|---|
天気予報 | [日付], [場所] | 明日の品川の天気は? | エンティティは、[日付]=明日、[場所]=品川 |
〃 | 〃 | 渋谷の天気は? | エンティティは、[日付]=なし、[場所]=渋谷 |
あいさつ | なし | こんにちは | |
〃 | 〃 | にゃんぱすー |
LUISで学習させたモデルは、外部からRESTでアクセスができるWebAPIとして公開できます。 学習させたモデルのバージョン管理も可能です。
これで、LUISを呼ぶ側のプログラムは、LUISからのレスポンスに応じてこんな感じで作れそうです。
前置きはこれくらいにしてLUISを構築してみましょうか。
2. LUIS App の構築
LUIS Appの作成
LUIS のポータル(https://www.luis.ai/)を開きましょう♪ログインまたはサインアップしてない場合はボタンをクリックしてします。ログイン済みの場合は、以下の図のボタンが Go to my app
となってますのでクリックします。
「My Apps」の画面では自分の作ったLUISアプリの一覧が表示されます。Create new app
をクリックしてLUISのアプリを作っていきましょう。
アプリの「名前(Name)」と「言語(Culture)」を入力します。テキストを解析するうえで「言語(Culture)」の選択は重要なポイントです。日本語用を作りたければ「Japanese」を選びましょう。Done
ボタンをクリックすれば作成されます。
ここは12/13のGAの更新でかなりすっきりしましたね。画面の右上部がタブのようになっていて(ここではタブと呼ぶことにします)、以下の構成になっています。
BUILD
インテントやエンティティの作成といったアプリの構築をこのタブで行います。PUBLISH
アプリをエンドポイントに公開する作業をここで行います。SETTINGS
学習モデルのバージョン管理や、共同編集者の追加などを行います。Train
クリックすると、学習が行われます。Test
学習したモデルをテストすることができます。
インテント、エンティティの作成
インテントは、デフォルトで「None」が存在しており、文章を入力した際、学習モデルが自身で追加したどのインテントにも該当しなければ、「None」になります。
まず、インテントを作っていきましょう。BUILD
タブをクリックし、左ペインの Intents
をクリックして Create new intent
をクリックします。
下図では、天気予報用にインテントの名称に「CheckWeather」と入力し、追加(Done
ボタンををクリック)しました。
インテント「CheckWeather」が選択された画面になります。
今回は、文章を登録させた後にエンティティを追加して割り当てる流れで進めます(ここでの作業は"登録する"ってだけです、のちほど学習(Train)を行います)。 下のgifでやってることは以下です。
- 「今日の品川の天気は」 という文章を入力して
Enter
をツッターン - 下のUtterance Textに表示されている(形態素解析された)文章の中で「品川」をクリック
- Search or create に「location」というエンティティ名を入力
Done
をクリックしてエンティティを追加
これと同様に「今日」という単語に「date」というエンティティを追加して割り当てます。
こんな手順で複数の文章を登録します。例えば以下のような文章とかです。
- 「明日の渋谷の天気は」
- 「明後日の池袋の天気は?」
などなど。
ここでエンティティについてちょっと触れておくと、
先ほどつくったエンティティは「Simple」というtypeです。そのほかに「List」「Hierarchical」「Composite」「Prebuilt」
があります。今回は詳しく書きませんが用途によっては便利なので見てみるとよいと思います。
インテントの作成~文章を登録~エンティティの作成と割り当てと同様の流れで、
挨拶用に「Greeting」のインテントを作り、あいさつの文章(「おはよー」「こんにちは」「やっはろー」とか)を登録しましょう。単純なあいさつの例ということで今回はエンティティの登録はなしで進めます。
学習とテスト(Train & Test)
文章を登録させたら、学習(Train)させて出来栄えを試してみます。
画面右上部にある Train
ボタンをクリックし、Train Application
ボタンをクリックすると学習が始まります。
学習が終わったら、Train
ボタンの右にある Test
をクリックしてでテストしてみます。挨拶が Greeting のインテントに、天気を聞く文章は CheckWeather のインテントで適切なエンティティに割り当てられるか試してみましょう。
まだ学習させた文章が少ないので頭の良いモデルができたとは言い難いですが、流れとしてはこんな感じです。
ここから精度向上を目指して文章をたくさん学習させたり、別のタイプのエンティティを利用したり Features というものを利用して Try & Error を繰り返していきます。
その後、チャットボットなどの外部のアプリから呼べるように公開し、バージョン管理をしながら再学習したりって流れですが、そのあたりを次回書こうと思います。
明日のCogbot Advent Calendarは @makopoさんです。複数投稿ありがとうございます&よろしくお願いします~♪
この内容自体は、次回に続きます。