Help us understand the problem. What is going on with this article?

Cognitive Services LUIS でノンコーディング自然言語分析始めよう (2019年6月版)

"人工知能 API" Microsoft Azure Cognitive ServicesLanguage Understanding (LUIS) を使うと、自然言語の分析 (文章の意図やエンティティの抽出) を行うエンジンをノーコーディングで作成できます。

LUIS は、例文(学習データ) を読み込ませて、その文章の意図 (Intent) や エンティティ (Entity) を設定するという(比較的シンプルな)方法で作成します。今回はその手順を紹介します。

例として、プロ野球情報チャットボットのエンジン部分を作る想定で進めます。試合の情報を教えてくれるチャットボットとして、ユーザーの入力 (ex: 次の巨人戦はいつ?) から、期待されているアクションや必要なエンティティ (ex: 球団名) を取得するものとします。

2019年12月現在、初めてLUISを利用するときに必要な LUIS 初期設定 の手順をを追加しました。

手順

準備

あると便利なモノ

  • Web API ツール
    • HTTP リクエストを送信できるツールがあると、Web APIの挙動やレスポンスを確認できて便利です
    • 詳しくは 補足 をご覧ください

1. LUIS app の作成

ブラウザから LUIS Portal (https://www.luis.ai) にアクセスします。右上の Sign in をクリックして、マイクロソフトアカウントでサインインします。

01.png

初めて利用する場合は、LUIS の初期設定 を行ってください。

1-1. LUIS app の新規作成

LUIS app の一覧画面が表示されます。+ Create new app をクリックして、LUIS app を新規作成します。

03.png

Create new app ダイアログ画面で、必要事項を入力します。

  • Name : 自分で分かりやすい LUIS app の名前を入力
  • Culture : 日本語の解析モデルを作成するので、Japanese を選択

入力したら [Done] をクリックして作成に進みます。

04.png

How to create an effective LUIS app というダイアログが表示される場合は、右上の×をクリックしてキャンセルします。
05.png

LUIS app のダッシュボードが表示されます。まだ何も入力も学習も呼び出しもしていないためブランクです。右上の BUILD をクリックして、設定を行います。

06.png

1-2. LUIS app の Entity 設定

LUIS app の BUILD 画面が表示されます。今回はまず Entity から設定していきます。
左バーメニューから App Assets 配下にある Entities をクリックします。

07.png

Entities の設定ページで +Create new entity をクリックして、Entity を作成します。チーム名を取得する Team を設定します。

08.png

Entity の設定ダイアログで、必要事項を入力、選択します。

  • Entity name : Team と入力
  • Entity type : List を選択

[Done] をクリックして作成します。

09.png

1-2-1. List Entity の設定 : Value と Synonym List

作成した Team Entity の詳細設定画面が表示されます。Team Entity では、複数の球団 (のいろいろな呼び方) を取得できるように設定を行います。

Values の欄にある Add new sublist ...Giants と入力して Enter で追加します。

10.png

Values の欄に Giants が追加されたら、Synonyms に同義語(取得したい語句) を入力、Enter で追加していきます。
[例] Giants: ジャイアンツ、巨人、読売ジャイアンツ etc...

11.png

Giants の Synonym の追加が出来たら、他のチームも同様に Values に追加し、Synonym を入力します。

12.png

1-2-2. List Entity の設定 : Roles

同じ Entity でも複数の役割 (Role) を持たせることが出来ます。今回は、1 文に 2 回 Entity が登場したときに、1 回目に登場する Entity を Home Team、2 回目を Away Team として取得することにします。

[例] 今度の巨人阪神戦はいつ?
Giants (Value="巨人") が Home, Tigers (Value="阪神") が Away

Team Entity の設定画面で、Roles の欄にある Create new role ...Home と入力して Enter で追加します。

13.png

同様に Away と入力&Enterで追加します。

14.png

ひとまず Entity の設定は終了です。

1-3. LUIS app の Intent 設定

今度は Intent の設定を行います。
今回は、以下の 3 種類の Intent を作成し、学習データとなる Utterance (例文) を入力して、Entity とIntent を紐づけします。

  • FindGame : 試合の情報を取得
  • Help : ヘルプメニューの呼び出し
  • None : それ以外

None はデフォルトで作成されており、また削除することはできません。作成されたどの Intent にも当てはまらない場合に None と判定されます。

1-3-1. LUIS app の Intent設定 : FindGame

左バーメニューから App Assets 配下にある Intents をクリックして Intent 設定画面を表示します。+Create new intent をクリックして、新規 Intent を作成します。

15.png

Create new intent ダイアログで、Intent Name を入力します。
ここではまず FindGame と入力して、[Done] をクリックして作成します。

16.png

FindGame Intent の設定画面が表示されます。

17.png

Example utteranceEnter an example of ... と表示されている欄に例文を入力します。
[例]今度の巨人戦はいつ

18.png

Enter で追加すると、"巨人" が Team Entity と判定されて表示されます。

19.png

同様に例文を追加していきます。HomeAway の Entity Role が設定できる文章を入力しておきます。
[例] 次の横浜阪神戦はいつありますか

20.png

Enter で追加すると、"横浜" "阪神" 共に Team Entity と判定されます。

21.png

今回は "横浜" を Home Role に設定したいので、最初の Team をクリックして、Team (List) > Home を選択します。

22.png

"横浜" の部分が Team:Home と表示されればOKです。同様に後ろの Team をクリックして、Team (List) > Away を選択します。

23.png

"阪神" の部分が Teams:Away と表示されればOKです。

24.png

Utterance で入力した元の値 (Entity として取得されている文字列) を一覧で確認するには、View Options から Show entity values を選択します。

25.png

同様に Utterance をいくつか入力し、LUIS で判定させたいさまざまなサンプルとなる例文 を入力します。同じような構成、表現の文章よりもバラエティに富んでいる方が、より多様な文章の判定がしやすくなります。

26.png

1-3-2. LUIS app の Intent設定 : Help

操作方法が分からなくなった場合のエスケープとなる Help Intent を追加します。

左バーメニューから App Assets 配下にある Intents をクリックして Intent 設定画面を表示します。FindGame のときと同様に、+Create new intent をクリックして、新規 Intent を作成します。今回は Intent Name は Help にします。

27.png

Help Intent の設定で、同様にヘルプに誘導する場合に検出したい文言を登録します。

28.png

2. LUIS app の学習&テスト、ブラッシュアップ

2-1. LUIS app の学習&テスト

設定を行った Entity と Intent を LUIS app に学習させます。
上部バー右側にある [Train] をクリックします。

Queued for training ... などと表示されて学習が行われ、[Train] が緑色になったら学習が完了です。

29.png

上部バー右側の [Test] をクリックして、テストウインドウを表示します。

30.png

Type a test utterance と書かれている欄にテストしたい文章を入力します。
[例] 今度の阪神戦の日程は

31.png

入力した文章が分析されて、その下に FindGame と表示されればOKです。Inspect をクリックするとより詳しい分析結果が表示されます。

32.png

"阪神" が Team Entity として取得されていることが分かります。

33.png

今度は2つ Team Entity が含まれる文章をテストします。
[例] 中日ヤクルト戦はいつなの

"中日"も"ヤクルト"も Team Entity として取得できていますが、Role は取得できていないようです。

Test ダイアログはもう一度 [Test] をクリックすると非表示になります。

34.png

2-2. LUIS app のブラッシュアップ : Pattern の設定

今回は 2つ Entity が出現したときに Team:Home, Team:Away という設定を行っています。対策方法は2つあります。
(1) もっと utterance を増やして学習させる
(2) 形式が決まっているものは Pattern として設定する

まずは (1) の utterance の追加を行います。

左バーメニューから App Assets 配下にある Intents をクリックして Intent の一覧から、FindGame をクリックして設定画面を表示します。判別できなかった文章を utterance として追加します。Team:Home, Team:Away の設定も忘れずに。

次に (2) の Pattern 設定を行います。

FindGame の設定画面から 次の横浜阪神戦はいつありますか (次の Team:Home Team:Away 戦はいつありますか) の横にある ":" をクリックして、 Add as pattern をクリックします。

35.png

Confirm patterns ダイアログで表示される内容を編集します。

最初の Team の直後に ":" を入力して、表示される Home を選択して入力します。

36.png

同様に 2 つ目の Team の直後に ":" を入力して、表示される Away を選択して入力します。
次の{Team:Home}{Team:Away}戦はいつありますか というパターンになったら [Done] をクリックして確定します。

37.png

別のパターンも同様に登録します。

38.png

登録されたパターンを確認します。

左バーメニューから Improve app performance 配下にある Patterns をクリックします。登録したパターンが表示されたらOKです。

39.png

再度 上部バー右側にある [Train] をクリックして学習させます。

Test をクリックして、再度判定したい文章を入力します。
[例] 巨人阪神戦はいつ

正しく Team:Home, Team:Away が取得出来るようになっていればOKです。

40.png

3. LUIS app の公開

LUIS app を API から利用できるように公開 (Publish) します。

上部バー右側にある [Publish] をクリックします。

41.png

Environment は Production を選択して [Publish] をクリックします。

42.png

画面に Publishing Complete と表示されたら公開完了です。
43.png

いずれかの方法で Endpoint (API のアクセス URL) が表記されているページを開きます。

  • Publishing Complete メッセージの Refer to the list of endpoints をクリック
  • 上部バーの MANAGE をクリックして、左バーから Keys and Endpoints をクリック

44.png

画面下の Starter_Key の欄にある Endpoint が API でアクセスするときの URL になります。このような URL になっているはずです。

https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/YOUR_LUIS_APPID?verbose=true&timezoneOffset=-360&subscription-key=YOUR_LUIS_STARTER_KEY&q=

URL をクリックします。ブラウザが開いて、JSONが表示されます。

45.png

URLの最後尾が q= となっているので、この後に判定したい文章を入力すると、Rest API (GET) で判定結果を取得できます。
例えば、"次の横浜戦はいつ?" という文章を判定したい場合は以下のような URL になります。

https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/YOUR_LUIS_APPID?verbose=true&timezoneOffset=-360&subscription-key=YOUR_LUIS_STARTER_KEY&q=次の横浜戦はいつ?

ブラウザに下記のように JSON で結果が表示されれば公開 OK です。

{
  "query": "次の横浜戦はいつ?",
  "topScoringIntent": {
    "intent": "FindGame",
    "score": 0.9600899
  },
  "intents": [
    {
      "intent": "FindGame",
      "score": 0.9600899
    },
    {
      "intent": "Help",
      "score": 0.0185851958
    },
    {
      "intent": "None",
      "score": 0.008105181
    }
  ],
  "entities": [
    {
      "entity": "横浜",
      "type": "Team",
      "startIndex": 2,
      "endIndex": 3,
      "resolution": {
        "values": [
          "BayStars"
        ]
      },
      "role": "Home"
    }
  ]
}

補足: LUIS の初期設定

LUIS を始めて利用する場合は、以下の初期設定を行います。

ブラウザから LUIS Portal (https://www.luis.ai) にアクセスします。右上の Sign in をクリックして、マイクロソフトアカウントでサインインします。

01.png

アプリ(LUIS) がアカウント情報を取得する許諾画面で [はい] を選択します。

20191220_01.png

LUIS の初期設定画面に入ります。(1) Term of UseCountry/Region を選択 (ここでは Japan)、Service Agreement の許諾チェックボックスに (チェック) をつけ、[Next] をクリックします。

20191220_02.png

(2)Link your Azure accountContinue using your trial key を選択し、[Next] をクリックします。

20191220_03.png

(3)Confirm[Continue] をクリックします。

20191220_04.png

以上で初期設定は終了です。[Create a LUIS app now] をクリックして進みます。

02.png

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした