エンジニアのオクダです。こんにちは。今回のテーマは「Azure Bot Service」です。
前回は「Alexaスキルのデザイン・開発・公開」についてお話しさせて頂きました。 今回は「Azure Bot Service」についてお話しさせて頂きます。Azure Bot ServiceとはMicrosoftが提供しているサービスです。 上記のリンクでは「ボット開発向けに特化されたマネージド サービス」と記載されており、自然言語処理は、AzureのLanguage Understandingサービスである、LUISが行っています。 今回はこのLUISについて調査しました。
まず日本語対応ですが、対応言語を見てみると、日本語のサポートされている機能は以下の3つです。
✔︎ 事前構築済みのエンティティ
✔︎ フレーズ リストのレコメンデーション
✔︎ テキスト分析(キー フレーズのみ)
事前構築済みのエンティティとは、単語を変数として格納する器で、エンティティを組み合わせてインテントを作成していきます。
事前構築済みのエンティティの例:
job_type = [アプリ開発, フロントエンド, データサイエンス, 組み込み系, …]
search = [探します, 探しています, 調べます, 検索しています, どれですか, …]
事前構築済みのエンティティを使用したインテントの例:
- {job_type}の仕事を{search}
事前構築済みのエンティティが利用可能であれば、プログラムでの自然言語処理が可能です。 例えば「アプリ開発の仕事を探しています。」と言う発話があった場合、
「アプリ開発の仕事を探しています。」と言う文章は分解されて解釈され、
{job_type}="アプリ開発"、{search}="探しています"
が変数として取り出されます。
LUISはこのようなインテントを複数個まとめてLanguage Modelを構築しています。 このLanguage Modelがユーザの発話を解析し、どのインテントにヒットしたかをスコア(score)として返します。
エンティティ無しインテントの場合
まず、エンティティ無しで、LUISで英語と日本語のLanguage Modelを作成してデプロイしてみました。 作成した日本語のLanguage Modelに対して「自然言語処理の仕事を探しています」と言う文章を評価した結果は下記の通りです。
{ "query": "自然言語処理の仕事を探しています", "topScoringIntent": { "intent": "求人情報を入手する", "score": 0.70248 }, "intents": [ { "intent": "求人情報を入手する", "score": 0.70248 }, { "intent": "仕事に応募する", "score": 0.06822772 }, { "intent": "None", "score": 0.018654 }, { "intent": "メール送信", "score": 0.00519312872 } ], "entities": [] }
同じような文章で英語では99%のスコアが出ているのに対し、日本語では70%のスコアしか出ていませんが、topScoringIntentとして狙い通りのインテントが抽出されています。
エンティティを使用してLanguage Modelを作成
それでは、次にエンティティを使用してLanguage Modelを作成しました。作成したModelの評価結果は、下記の通りです。
{ "query": "メールを3時に送って", "topScoringIntent": { "intent": "仕事に応募する", "score": 0.08809486 }, "intents": [ { "intent": "仕事に応募する", "score": 0.08809486 }, { "intent": "求人情報を入手する", "score": 0.06960007 }, { "intent": "None", "score": 0.0618566237 }, { "intent": "メール送信", "score": 0.06026428 } ], "entities": [ { "entity": "3時", "type": "builtin.datetime", "startIndex": 4, "endIndex": 5, "score": 0.9534087 }, { "entity": "メール", "type": "e-mail", "startIndex": 0, "endIndex": 2, "resolution": { "values": [ "メール" ] } }, { "entity": "送っ て", "type": "send", "startIndex": 7, "endIndex": 9, "resolution": { "values": [ "送って" ] } } ] }
エンティティは期待通りに取り出されているようです。しかし「メールを3時に送って」のインテントに対し、scoreは「仕事に募集する」が0.088、「メール送信」が0.060でした。当然「メール送信」が選ばれるべきですが、期待外れの結果となりました。これでは、実用的ではありませんね。
Stackoverflowを通じてMicrosoftに問い合わせてみる
上記の問題をStackoverflowに投稿したところ、Microsoftのサポートエンジニアから返事が返ってきました。問い合わせた内容については下記リンクをご覧下さい。
要約すると「日本語はまだ完全にサポートされていません。...途中省略...2019年8月にメジャーアップデートされるでしょう。」と言うことでした。
感想
今回、AzureのLanguage Understandingサービスである、LUISについて調査を行ってみましたが、対応言語の中に日本語が含まれているにも関わらず、事前構築済みのエンティティを使用した場合、正しく自然言語処理されないことがわかりました。 「日本語対応」を謳うからには、もう少し機能強化してほしいものです。 今年8月のメジャーアップデートに期待したいと思います。