なかしょの技術日誌

業務では非MS系のものばかりですが、ここではMS系の技術やサービスを中心に書いていきたいと思います。

docomoの発話理解APIからLUISの扱い方を学ぶ

はじめに

この記事は「Microsoft Cognitive Services & Bot Framework - Qiita」の8日目になります。

概要

LUIS(Language Understanding Intelligent Service)は非常に優秀な自然言語解析ツールですが、日本語ではサンプルモデルが存在せず、どのようなIntentとそのパラメータ、および、Entityを扱えばよいか困っている人もいることでしょう。
そこで本記事、『docomo Developer support | NTTドコモ』で提供している発話理解APIを元に学んでいきます。

dev.smt.docomo.ne.jp

LUISの基本知識はある程度省略しますので、
本記事を読み進める前に以下の記事を読んでいただけると理解が深まります。

beachside.hatenablog.com

docomoの発話理解API

発話理解APIは発話文をテキストでインプットすると、文脈を解析し、その意図に沿った『コマンド名』及び『スロット名』に該当する値を返却するAPIです。 https://devsite-pro.s3.amazonaws.com/contents_file/contents_7140522162331.jpg

LUISですと『コマンド』がIntent、『スロット』がパラメータにあたります。

発話理解APIで取得できるコマンド

発話理解APIのリファレンスで紹介しているコマンド一覧は以下になります。

commandID commandName 説明 スロット名
BC00101 雑談 あいさつなど雑談
BK00101 知識検索 Q&Aの検索
BT00101 乗換案内 乗り換え案内を検索 stationTo,
stationFrom
BT00201 地図 地図の表示 searchArea,
hereArround,
facilityName
BT00301 天気 天気の検索 searchArea,
hereArround,
date
BT00401 グルメ検索 飲食店の検索 gourmetGenre,
searchArea,
hereArround
BT00501 ブラウザ ブラウザアプリの起動 browser,
website
BT00601 観光案内 観光地の検索 searchArea,
hereArround,
sightseeing
BT00701 カメラ カメラアプリの起動
BT00801 ギャラリー ギャラリーアプリの起動
BT00901 通話 電話アプリの起動 phoneTo
BT01001 メール メールアプリの起動 mailTo,
mailBody
BT01101 メモ登録 メモの生成 memoBody
BT01102 メモ参照 メモの参照 memoBody
BT01201 アラーム アラーム設定 time
BT01301 スケジュール登録 スケジュールの登録 date,
time,
scheduleBody
BT01302 スケジュール参照 スケジュールの参照 date,
time
BT01501 端末設定 端末設定の起動 setting
BT01601 SNS投稿 SNSへの投稿 snsSource,
snsBody
BT90101 キャンセル キャンセルコマンド
BM00101 地図・乗換 地図・乗換いずれかのタスク searchArea
BM00201 通話・メール 通話・メールいずれかのタスク phoneTo
SE00101 判定不能 判定不能
SE00201 サーバエラー1 サーバエラー
SE00202 サーバエラー2 サーバエラー
SE00301 ライブラリエラー ライブラリエラー

余談ですが上記の表はdocomoの公式のHTMLからExcelにコピーし、以下のアドインを使ってExcelからMarkdown形式に変換しています。便利です。

www.nuits.jp

発話理解APIで取得できるスロット

スロット一覧は以下になります。

スロット名 説明 タイプ
browser ブラウザ名を格納 browser
date 日付,曜日,相対日付を格納 date,
datePnoun,
dateWeek,
dateRelative
facilityName 検索対象の施設名を格納 gpoi
gourmetGenre グルメ検索ジャンルを格納 food,
drink
hereArround 現在地周辺を表す言葉を格納 hereArround
mailBody メール件名を格納 mailBody
mailTo メール宛先を格納 fullName,
lastFirstName,
firstName,
lastName,
postName,
otherAddress,
upoi,
gpoi
memoBody メモの本文を格納 memoBody
phoneTo 電話宛先を格納 phoneNumber,
fullName,
lastFirstName,
firstName,
lastName,
postName,
otherAddress,
upoi,
gpoi
scheduleBody スケジュール内容を格納 scheduleBody
searchArea 検索対象の地名を格納 address,
upoi
setting 設定項目を格納 setting
sightseeing 観光関連用語を格納 sightseeing
stationFrom 乗車駅を格納 stationFrom,
hereFrom,
station,
here
stationTo 降車駅を格納 stationTo,
hereTo,
station,
here
snsBody SNSの本文を格納 snsBody
snsSource SNSの投稿先を格納 snsSource
time 時刻,または相対時間を格納 time,
timeRelative,
timeHour
website Webのサイト名を格納 website

余談ですが上記の表は(ry

発話理解APIの実行例

docomo Developer support ではAPIを実行するコンソールが提供されています。
ユーザ登録をすると利用できます。
実行例を示します。

「品川で焼肉を食べたい」の結果

「品川で焼肉を食べたい」で実行した結果の一部が以下になります。

f:id:nakasho_dev:20161208230037p:plain

この場合、コマンド名として「グルメ検索」、ジャンルとして「焼肉」、対象エリアとして「品川」が抽出できました。
ちなみに「現在地周辺の焼肉屋は?」としたときはhereArroundに「現在地」が格納されました。

LUISへの応用

グルメ検索をLUISで同じようなことを実現しようとした場合、あらかじめ「groumetGenre」、「searchArea」、「hereArround」をパラメータとした、「searchGroumet」というIntentを作成することとなります。

Entityの作成

ここでEntityを作成する際は一工夫必要です。
「groumetGenre」はおそらくグルメのジャンルで他と被ることもなさそうです。なので、「groumetGenre」というEntityを作成してよいでしょう。

f:id:nakasho_dev:20161208232733p:plain

「searchArea」は検索目的でなくてもエリアという概念はあるので、「Area」というEntityを作成したうえで「searchArea」というchildrenを作るとよいでしょう。
こうすることで検索目的ではないAreaのchildren作成時にも学習効果が期待できます。

f:id:nakasho_dev:20161208232753p:plain

「hereArround」は現在地周辺ということなので、hereだとかhereArroundのままでよいと思います。

f:id:nakasho_dev:20161208232847p:plain

Intentの作成

先ほど作成したEntityを元に「searchGroumet」というIntentを作成します。

f:id:nakasho_dev:20161208233547p:plain

学習

作成したIntentを学習させます。

f:id:nakasho_dev:20161208233634p:plain

学習を繰り返して、このIntentの精度を高めます。

まとめ

いかがでしたでしょうか。
今回はAdventCalendarの空きが出ないために急いで作ったためグルメ検索のみの紹介でした。
docomoの発話理解APIには、よくあるポータル検索ではなくスマートフォンの機能を使用するためのコマンドをそろえているのが特徴的です。
もし、LUISを使ってスマートフォンコンシェルジュ的なアプリを作成するときは、この発話理解APIスマートフォン向けコマンドが参考になるかもしれません。 docomoの発話理解APIは無料で使えますが、自分が好きなように学習させる機能はありません。
発話理解のノウハウをdocomoから学んで自分好みの学習をLUISで実現してみてはいかがでしょうか。

ちなみにdocomo Developer SupportではAPIを活用したサービスを考案された方には事業化支援金の提供も含めた支援プログラムがあります。

dev.smt.docomo.ne.jp

docomoAPIMicrosoft Bot Frameworkを組み合わせたサービスでも支援してもらえるかもしれませんね。

以上です。