Build 2016 から各種機能がアップデートされた自然言語解析ツールである LUIS (Language Understanding Intelligent Service)。日本語を含む 8 か国語対応になりましたので、現時点 (2016年9月現在) での利用方法を紹介します。
[2017/08/18 追記]
LUIS 管理画面が当ページ執筆当時と変わっています。
最新版 の LUIS 利用方法を別途執筆しましたので、こちら↓をご利用ください。
Microsoft Bot Framework v3.0 からはじめる BOT 開発: 天気予報 BOT~自然言語を解釈する - Cognitive Services LUIS(1)
#LUIS とは
LUIS (Language Understanding Intelligent Service) は自然言語を解析するツールで、入力された文章の分類、キーワードの抽出を行うエンジンを GUI で作成できます。
作成したエンジンは API 経由で利用でき、結果は JSON 形式で取得できます。また、公開されている [C# ライブラリー] (https://github.com/Microsoft/Cognitive-LUIS-Windows) によるアクセスも可能です。
#LUIS を利用するのに必要な準備
現在 β 版として無料で利用可能です。
アカウントは Microsoft アカウント を利用するため、お持ちでない場合は取得してください。
なお、作成したエンジンごとに Application ID と Application Key が発行され、アクセスする際にはこの ID と Key のペアが必要になります。
#LUIS を使った日本語分析エンジンの作成
今回は例として、天気に関する問い合わせ文章を分析するエンジンを作成します。
LUISでは入力された文章の分類である Intent、入力に対する返答を作成するのに必要なキーワードである Entity を設定します。
入力文章 | Intent | Entitiy(Day) | Entitiy(City) | Entity(Weather) |
---|---|---|---|---|
今日、東京は雨が降りますか? | verifyWeather | 今日 | 東京 | 雨 |
明日の大阪の天気を知りたい | getWeather | 明日 | 大阪 | -- |
ヘルプ | getHelp | -- | -- | -- |
##LUIS の新規アプリケーションの作成
LUIS のWebサイト (https://luis.ai/) から作成を行います。
Sign in or Create an account をクリックします。
Create Account(初回) は ロケーションや Term of Use が表示されますので、登録を行います。
+New App をクリックして新規アプリ(LUISエンジン部分)を作成します。
Application Name (アプリケーション名)、Usage Scenario (ここでは Bot を選択)、Application Domain (ここでは Weather を選択) を入力 or 選択し、Application Culture に Japanese を選択します。
アプリケーションが作成されると、以下のような ↓ ワーク画面が表示されます。
###Entity の作成
まずは Entity の作成から。Entities の横にある (+) をクリックします。
入れ子構造(Children) を作成することもできますが、今回は入れ子なしでシンプルに作成します。
Day と入力し、Save をクリックします。
同様に City、Weather を作成します。
###Intent の作成
次に、作成した Entity を含む Intent を作成します。
Intents の横にある (+) をクリックします。
Intent name に verifyWeather、その下に解析サンプル文章を入力します。+ Add Parameter をクリックし、検出する Entity を追加します。Name は 結果が返されるタグになります。Type は作成済みの Entity を選択します。Day、City、Weather をそれぞれ選択し、Save をクリックして保存します。
サンプル文章が表示されるので、解析された文言を Entity に紐づけします。今日 をドラッグして選択すると、作成済みの Entity が表示されるので、Day を選択します。
紐づけられた文言は Entity ごとに色分けして表示されます。紐づけが完了したら Submit をクリックして登録します。
同様に getWeather を作成します。
今度は検出する Entity は Day と City に設定します。
###サンプル文のロードと学習
Intent 作成時の文章以外にも、学習させたいサンプル文章を複数登録し、Intent の登録と Entity への紐づけを行います。
ワークスペース中央部分の New Utterances をクリックして、新しい解析サンプル文章を入力します。自動で Intent や Entity が紐づけられますが、間違っている場合はそれぞれ修正して Submit をクリックします。何文か登録したら、画面左下の Train をクリックして学習させます。
学習した結果は Review Labels で確認できます。(ドロップダウンリストから Show all labeled utterances を選択します。) 間違いがあった場合は、この画面でも修正を行うことが可能です。
登録、修整したら Train から再度学習させることをお忘れなく。
###アプリケーションの公開
ワーク画面左列にある Publish をクリックします。
HTTP API経由でアクセスできるようにするには、Publish web service をクリックします。
再度学習させたあと、アップデートすることも可能です。
公開すると、アクセスURLが表示されます。
この URL に Application ID と Application Key が埋め込まれていますので、必要に応じてコピーしておきます。
https://api.projectoxford.ai/luis/v1/application?id=YOUR_APP_ID&subscription-key=YOUR_APP_KEY
といった URL が表示されているはずですが、YOUR_APP_ID に相当する部分が Application ID, YOUR_APP_KEY の部分が Application Key になります。
Query に解析させたい文章を入力すると、問い合わせ用 URL が生成されます。この URL リンクをクリックすると結果を JSON で取得(ダウンロード)できます。
##LUIS による分析結果の取得(JSON)
ダウンロードした JSON をテキストエディターなどで開いて内容を確認します。
文章を解析した結果として、Intent(verifyWeather)とスコア(0~1の間の数値で表した確度)、指定した Entity の抽出結果が含まれています。
{
"query": "明日、東京は雨降るのかな",
"intents": [
{
"intent": "verifyWeather",
"score": 0.999998569,
"actions": [
{
"triggered": true,
"name": "verifyWeather",
"parameters": [
{
"name": "day",
"required": false,
"value": [
{
"entity": "明日",
"type": "Day",
"score": 0.936513543
}
]
},
{
"name": "city",
"required": false,
"value": [
{
"entity": "東京",
"type": "City",
"score": 0.949055731
}
]
},
{
"name": "weather",
"required": false,
"value": [
{
"entity": "雨",
"type": "Weather",
"score": 0.9399574
}
:
(省略)
また、それぞれの Entity の分析結果も含まれています。
:
(省略)
:
"entities": [
{
"entity": "明日",
"type": "Day",
"startIndex": 0,
"endIndex": 1,
"score": 0.936513543
},
{
"entity": "東京",
"type": "City",
"startIndex": 3,
"endIndex": 4,
"score": 0.949055731
},
{
"entity": "雨",
"type": "Weather",
"startIndex": 6,
"endIndex": 6,
"score": 0.9399574
}
:
(省略)