LoginSignup
26
31

More than 5 years have passed since last update.

LUIS (Language Understanding Intelligent Service) で天気情報 BOT を作ろう![日本語解析エンジン作成編]

Last updated at Posted at 2016-09-20

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# ライブラリー によるアクセスも可能です。

LUIS C# SDK (GitHub)

LUIS を利用するのに必要な準備

現在 β 版として無料で利用可能です。
アカウントは Microsoft アカウント を利用するため、お持ちでない場合は取得してください。

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 の抽出結果が含まれています。

application.json
{
  "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 の分析結果も含まれています。

application.json
:
(省略)
:
"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
    }
:
(省略)
26
31
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
26
31