Edited at

Microsoft Bot Framework v3.0 からはじめる BOT 開発: 天気予報 BOT~自然言語を解釈する - Cognitive Services LUIS(1)

More than 1 year has passed since last update.

「明日の横浜の天気は?」そんなナチュラルな入力を解釈する Chat Bot は簡単に作れます。Microsoft Bot Framework と Cognitive Services LUIS (Language Understanding Intelligent Service) を利用して、自然言語で入力された文章を分類し、キーワード(今回は日程と場所)を取得、Livedoor 天気予報 Weather Hacks の天気予報 API を利用してデータを取得、日付と気温と共に天気アイコンを表示するカードを作成、表示する BOT を作成します。

下記手順 3 まで行って作成できる 天気予報BOT↓


手順


  1. 天気予報 BOT - Adaptive Card : 天気情報を取得して表示する

  2. 天気予報 BOT - Cognitive Services LUIS(1): 自然言語(文章)を解釈して、場所や日時を取得する (※このページ)

  3. 天気予報 BOT - Cognitive Services LUIS(2): 自然言語判定結果をBOTに組み込む


ご参考まで、天気予報 BOT - Adaptive Card 編で作成したアプリはこちらからダウンロードできます。(が、今回の手順の中では使いません)

Bot Framework × Adaptive Cards: WeatherBot アプリサンプル



開発環境

以下の手順は Windows 10 にて作成を行っています。

今回は Cognitive Services LUIS を管理サイトから作成、編集するため、ブラウザがあれば OK です。


天気予報 BOT - Cognitive Services LUIS(1) : 自然言語(文章)を解釈して、場所や日時を取得する


LUIS 管理サイトから自然言語解析エンジンの作成


新規 App の作成

Cognitive Services LUIS の管理サイト (https://www.luis.ai/) にアクセスし、Sign in からサインインを行います。

My Apps ページが表示されたら、[New App]をクリックして、新規の自然言語解析エンジン (Appと呼びます) を作成します。

Name に お好みの App 名を入力、Culture は Japanese を選択します。[Create]をクリックして作成します。

Overview の画面で利用状況を一覧で見ることができます。


Entity の作成

Overview 画面の左列から Entities をクリックして Entity を作成します。

今回は Entity として 場所 と 日程(今日、明日、明後日) を取得できるように設定します。

[Add Entity] をクリックして、新規 Entity を作成します。

まずは場所から、Entity Name に Place と入力、Entity Type は Simple を選択し、[Save] をクリックします。

次に日程、Entity Name に Day と入力、Entity Type は Hierachical を選択します。


Hierachical Type の Entity で親子関係のある Entity を作成できます。


Child#1 の欄が表示されたら、Today と入力します。

+Add Child をクリックして Child Entity を増やして Tomorrow と入力、同様に DayAfterTomorrow を作成します。 [Save] をクリックして保存します。

以上で Entity の作成は完了です。


Intent の作成

次に Intent を作成します。左列から Intents をクリックして Intent のページを開きます。Add Intentをクリックして、Intent Name に GetWeather と入力、[Save] をクリックします。

GetWeather の Intent に例文を学習させます。Type a new utterance & press Enter 書かれた列に例文を入力して Enter をクリックします。

例文が入力されたら、例文の単語をクリックして、作成した Entity に関連付けます。

"今日" という単語をクリックし、表示される Entity を Day > Day::Today の順にクリックして Today に紐づけます。



次に場所を表す単語(地名) をクリックして、Place という Entity に紐づけます。



[Save] をクリックして、例文を保存します。

同様に他の例文を入力し、それぞれの Entity として認識させたい単語を紐づけます。



それぞれのEntity に紐づくように例文を選定し、数個入力します。保存を忘れずに。

Entity
--
覚えさせる単語の例

Day
Today
今日, きょう, 本日, 今


Tomorrow
明日, あした, あす


DayAfterTomorrow
明後日, あさって

Place
--
東京、大阪...


LUIS は、文章の構造+紐づけられた単語 から文章の意図 (Intent) と キーワード (Entity) を判別します。そのため、

1. Entity に関連付けたいすべての単語 (例えば Place に日本全国の地名を紐づけ) をこの Intent 例文入力作業で行う必要はありません。

2. 実際に LUIS に判別させたい自然言語になるべく近い例文を用いてください。

漢字&ひらがな交じり、難しい地名など、判定が難しい場合は、Features に用意されている Phrase List を用いると、判定精度を上げることができます。



LUIS App の学習とテスト

作成した Entity と Intent で LUIS App に学習させていきます。

画面左列のメニューから Train & Test をクリックします。[Train] をクリックすると学習が始まります。

学習が終了すると、画面中央でテストが可能になります。判別したい文章を入力し、Intent や Entity が判別されるのを確認してください。




想定される結果にならなかった場合は、Intent の例文の見直しや追加、Entity への紐づけを確認してください。

Intent や Entity の修整、追加を行った後、再度 Train を行わないと反映されませんのでご注意ください。



LUIS App の公開

作成した LUIS App を公開することで、API でアクセスすることが可能になります。

画面左列のメニューから Publish をクリックします。

Publish App の画面で、Endpoint Key (デフォルトで用意されている試用 Bootstrap Key でOK) を選択します。[Publish] をクリックして、App の公開を行います。

公開すると、API URL ↓が表示されます。

https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/[LUIS AppID]?subscription-key= [Endpoint Key]&timezoneOffset=0&verbose=true&q=

この URL の最後、"q=" のあとに判別したい文章を入力すると、その結果をJSONで取得することができます。

ブラウザに APIのURL+判別したい文章を入力して、判定結果がJSONで取得できることを確認してください。


Internet Expolor では JSON ファイルがダウンロードで取得できます。ローカルに保存して、テキストエディタなどで内容を確認してください。


次のステップで、LUIS による解析結果をBOT側に取り込んで処理を行います。


Appendix

ご参考まで、ここまで作成した LUIS App はこちらからダウンロードできます。

LUIS 管理画面から Import し、Train & Publish を行ってお使いください。

WeatherBot LUIS App サンプル(JSON)