Dialogflowでテキストからワードを取得する(コンソール編)

のえる のえる 2019.04.10

会話テキストの中には、意味のある部分とそうでない部分があると思います。

 

「明日の10時、社内打ち合わせをしたい」「社内打合せを明日10時からやる」「明日、社内打ち合せを10時からやるぞ」

 

これらはすべて同じ意味ですが、言い回しが異なります。
このようなテキストから意味のある部分を取得するため、Dialogflowを使用してみようと思います。

 

※Dialogflow および Googleのサービス利用による如何なる料金の発生も、弊社は責任を負いかねます、自己責任にてご利用ください。

Dialogflowとは?

Dialogflowとは、Googleが買収した言語解析エンジンです。
ブラウザの管理画面で簡単な操作をするだけで言語を解析する機能を構築できます。

習うより慣れろ

多分説明を記載しても感覚が良くわからない方が多いと思います。
ですので、先ほどの例を利用して下記のようなデータを取得しようと思います。

 

【テキスト】
 「明日の10時、社内打ち合わせをしたい」
 「社内打合せを明日10時からやる」
 「明日、社内打ち合せを10時からやるぞ」

 

【取得したい結果】
 日時
 内容

管理画面の設定

では管理画面をいじっていきましょう。

 

Dialogflowを利用するにはGoogleのアカウントが必要ですので、各自ご用意ください。

 

※Dialogflowはよく画面の項目が変わるみたいですので、その際は適宜読み替えてください。
※内容は記事作成時点のものになります。

Agentを作成

まず、コンソール画面 に移動しましょう。




※「Please review your account settings」の画面が表示された場合、任意の情報を入れてください。

 

大まかに画面の説明をします。

 

① 各機能一覧
② 詳細設定領域
③ テスト領域

 

とりあえず、エージェントを作成するため、画面左上の「Create Agent」をクリックします。
ここで言う エージェント とは、言語解析をするプロジェクトみたいなものです。

 

今回はこんな感じでエージェンを設定しました。

 

 Agent Name: OfficeMeeting
  (Agent Nameは後で変更もできますが、空白を入力できません)
 Default Language: Japanese – ja
 Default Time Zone: (GMT+9:00) Asia/Tokyo

Entitiesを作成

Entityとは、各要素の分類名みたいなもので、どんなデータを格納するかを決めるものです。

 

①の領域内にある 「Entities」 をクリックし、詳細画面を出します。
(Entitiesの横にある「+」ボタンは押さない)

 

②の領域に何もない画面が出ましたか?
ここからEntitiesを作成していきますので、画面上部の 「CREATE ENTITY」をクリック。

 

Entity作成画面はこんな感じで設定します。




※左側のテキストがEntity、右側の候補がSynonymです。
※右側の候補やそれに準ずるテキストが来た場合、左側のEntityが返されます。

 

ここまで設定出来たら、画面上部の 「SAVE」をクリックします。

 

これでEntitiesの設定は終わりです。

Intentsを作成

次にIntentsを作成していきます。
Intent は「意図、目的」などで翻訳されますが、簡単に言えば 「会話の要約」 だと思います。

 

①の領域内にある「Intents」をクリックし、詳細画面を出します。
(Intentsの横にある「+」ボタンは押さない)

 

②の詳細設定画面に 「Default Fallback Intent」 と 「Default Welcome Intent」 があると思います。
これは最低限の会話をするIntentたちです。

 

しかし、これでは足りないので、新しくIntentを作成しましょう。
画面上部の 「CREATE INTENT」 をクリック。

 

この画面では必要な機能を 「ADD」や「ENABLE」していきます。

 

まずは 「Intent Name」 を設定しましょう。
今回は 「Hearing」 としました。

 

次にこのIntentで会話を認識したいテキストの例題を入力し、トレーニングさせます。
「Training phrases」 を利用可能にし 「明日の10時、社内打ち合わせをしたい」 と入力してEnterを押しましょう。

 

すると下記のような画面になったと思います。



各色ごとに区切られているのがEntityです。
そこには、先ほど作成した 「社内打ち合わせ」 が 「event」 として表示されていると思います。
このEntityたちが取得できるデータです。

 

しかし、ちょっと余計なデータが入っていますね。
「明日の」ではなく「明日」が日付として正しいと思いますので、修正してあげましょう。

 

黄色く囲まれた 「明日の」 の部分にカーソルを合わせると、上記写真のように領域を選択することができます。
これを調整して、対象の領域を変更しましょう。

 

調整後は下記のようになります。



試してみる

これでテキストを認識できるようになりました。
③のテスト領域で、登録したテキストが認識されるか試してみましょう。

画面右上にある 「Try it now」 の領域に 「明日の10時、社内打ち合わせをしたい」 と入力し、Enterを押してみます。



テスト領域下部に結果が表示されましたか?
ここには下記のような情報が出てきます。

 

Intent: 識別されたIntent名
Parameter & Value: 取り出されたパラメータ名とその値

別のテキストを試してみる

では別のテキストで識別されるか試してみましょう。
今度は 「明日、社内打ち合わせをしたい」 で試してみましょう。



あれ、思ってたのと違う?と思った方は正解です。
これは、テキストがうまく認識できなかったということです。

 

このままでは困るので正しく認識できるよう、Dialogflowに教えてあげましょう。

テキストをトレーニングさせる

画面左の 「Training」 をクリックしてみましょう。

 

一覧が表示されたら、テキストをクリックすることで、今まで認識したテキストが表示されます。
認識されなかった 「明日、社内打ち合わせをしたい」 を選択してみましょう。



これを見ると 「明日」 というテキストが識別されていないことが分かります。
これでは困るので 「明日」 というテキストをカーソルで選択することで、識別可能なEntityが出てきます。
この中から 「@sys.date:date」 を選択し、領域の右にあるチェックマークをクリック、そして画面上部の 「APPROVE」 をクリックすることで、トレーニングできます。



再度、テキストを試してみましょう。



今度は無事 「明日」 というテキストを識別できました。
同じようにして 「社内打合せを明日10時からやる」 や 「明日、社内打ち合せを10時からやるぞ」 も設定できます。

必須入力にする

本来 「日時」 と 「内容」 が欲しいと思って解析を始めました。
ですので、すべての項目を必須にしましょう。

 

Intentの詳細画面にある 「Action and parameters」 の各項目の 「REQUIRED」 にチェックを入れていきます。



チェックを入れると 「PROMPTS」 という項目が右側に追加されていると思います。
「PROMPTS」 には、各項目が認識されなかった時、入力を促すためのテキストを設定します。

今回はこんな感じに設定しました。



設定が完了したら、上部の 「SAVE」 ボタンを押して更新しましょう。

必須入力を確認する

認識されなかった 「明日、社内打ち合わせをしたい」 をテスト領域に入力してみましょう。



先ほど設定した質問(何時からですか?)が返されましたか?
では、この質問に答えてみましょう。

 

テスト領域に 「12時」 と入力してみましょう。



上記のように、すべてのパラメータが揃ったでしょうか。
これで必須入力の設定ができました。

さいごに

Dialogflowを駆使することで、欲しいテキストを抜き出せます。
このテキストの 「ゆらぎ」 を補正できるツールとして、非常に有用だと思いました。
皆様も導入をご検討してみてはいかがでしょうか?

POPULAR

のえる

書いた人

のえる

Full-stack Developer / Motorcycle Enthusiast / Guitarist