自然言語処理を容易に実装できるDialogflow(旧:API.AI) を使ってみる #dialogflow

API.AIってなに?

API.AIは自然言語で会話できるボットを作るためのツール(API)を提供するサービスです。2016年9月にAPI.AIのチームをGoogleが買収しました。

API.AIを育てると頭が良くなる!

自然言語には、分かりにくい表現や特定の環境でのみ使用する言葉が存在します。こういった微妙なニュアンスの違いや、業界用語、方言などをAPI.AIに学習させれば適切な処理を行う手助けをしてくれます。

API.AIのすごいところ

★SDKが豊富

以下のプラットフォームのSDKを提供しています。
- Android
- iOS / Watch OS / Mac OS X
- Ruby
- Webkit HTML5
- Javascript
- Node.js
- Cordova
- Unity
- .NET(WP8,W10)
- C++
- Xamarin
- Python
- PHP(Community supported)
- Java

★ノンコーディングで作成できるシンプルなコンソールを提供している

API.AIを使ってみよう

コーディングが不要なので非エンジニアでもできます。

API.AIの登録

API.AIでサインアップをしてください。

Create new agentをクリック

以下の内容で保存します
- Agent name:ラーメン
- Agent type:Public
- DESCRIPTION:これはラーメン屋のプロジェクトです
- LANGUAGE:日本語
- DEFAULT TIME ZONE:(GMT+9:00) Asia/Tokyo

Screen Shot 0029-02-23 at 14.48.12.png

Entitiesを作成する

Agentの作成が終わったらEntitiesというタブをクリックしてください。
Entities名にRamenMenuと入れます。
Entitiesは自然言語を認識するための単語をまとめておくところです。

Screen Shot 0029-02-23 at 14.53.45.png

Entryにラーメンのメニューをどんどん入れていきます。
Enter reference value...には idを
Enter sysnonym... には キーワードになる単語を入れてください。

Screen Shot 0029-02-23 at 15.04.57.png

入力が終わったら保存します。

Intentsの作成

自然言語を処理するIntentsを作成します。IntentsタブよりIntents編集画面を開きCreate Intentをクリックしてください。

Screen Shot 0029-02-23 at 15.09.18.png

Intent nameにOrderと入れます。
Action にorderといれます。
User says に「RamenMenuをお願いします。」と入力し、RamenMenuをクリックし先ほど作成したRamenMenuを選択します。

Screen Shot 0029-02-23 at 15.38.33.png

すると自動的にPARAMETER NAME ENTITY VALUEが入ったと思います。

Screen Shot 0029-02-23 at 15.40.59.png

最後にText responseに「かしこまりました。」と登録します。

Screen Shot 0029-02-23 at 15.25.39.png

入力が終わったら保存しましょう。

話しかける

右のテキストバーから、テキストもしくは音声で「味噌ラーメンをお願いします。」と入力してください。

Screen Shot 0029-02-23 at 15.27.17.png

このように「かしこまりました」と結果が帰ってくれば成功です。

Screen Shot 0029-02-23 at 15.44.05.png

Show jsonをクリックすれば詳しい情報を取得することができます。

showjson
{
  "id": "",
  "timestamp": "2017-02-23T06:44:00.057Z",
  "lang": "ja",
  "result": {
    "source": "agent",
    "resolvedQuery": "味噌ラーメンをお願いします",
    "action": "order",
    "actionIncomplete": false,
    "parameters": {
      "RamenMenu": "miso_ramen"
    },
    "contexts": [],
    "metadata": {
      "intentId": "",
      "webhookUsed": "false",
      "webhookForSlotFillingUsed": "false",
      "intentName": "Order"
    },
    "fulfillment": {
      "speech": "かしこまりました。",
      "messages": [
        {
          "type": 0,
          "speech": "かしこまりました。"
        }
      ]
    },
    "score": 1
  },
  "status": {
    "code": 200,
    "errorType": "success"
  },
  "sessionId": ""
}

ちゃんとこの2つが取れましたね。あとはこの情報をもとに適切な処理を行えば、BOTの完成です。簡単ですね。

showjson
"action": "order"
"RamenMenu": "miso_ramen"

失敗した時/他の言葉で注文したい時

失敗した時はとにかくUser sayに入力し学習させてください。使えば使うほど頭が良くなります。またこのままだと1対1のコマンドなだけなので、どんどんユーザーが発しそうな言葉を予想してUser saysに入力します。

失敗
Screen Shot 0029-02-23 at 15.52.58.png

学習させる(保存を忘れずに!!)

Screen Shot 0029-02-23 at 15.53.35.png

再度トライ!
Screen Shot 0029-02-23 at 15.54.42.png

成功
Screen Shot 0029-02-23 at 15.54.55.png

まとめ

いかがだったでしょうか。API.AIを使用すれば簡単に自然言語処理のツールを作成することができます。API.AIを活用し、自分のサービスに自然言語を活用したインターフェイスを採用してみてはいかがでしょうか。

ネクストチャレンジ!

API.AI Python SDKを使ってみる

参考にしたリンク

API.AI Docs