LoginSignup
14
9

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-08-14

「明日の横浜の天気は?」そんなナチュラルな入力を解釈する 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)

14
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
9