Watsonと会話する チャットボットの作り方

Watson Conversationを使って会話をする、チャットボットを作ってみました。(無料で始められます)
まず、上のBluemixのカタログから、Watsonの 「Conversation」 をクリックします。(⇒Bluemixが初めての方はまずこのリンクをクリック

すると以下のWatson Conversationの説明が表示されます。Conversationは、日本語など自然言語のインターフェースでのやり取りを自動化する、チャットボットを含むサービスです。[作成]をクリックし自分用の対話を作成します。

以下のようにWatson Conversationの画面が出てきますので、LoginボタンをクリックしてBluemixのIDでログインしてください。

まずWatson Conversationの作業領域である ワークスペースを作成します。以下の [Create] をクリックしてください。

以下にワークスペース名 (Name)を入力してください。私は「WhatIsWatson」と入力しましたが、好きな名称をインプットできます。言語は既にセットされていると思いますが [Japanese] を選んでください。

以下の画面になりますが、上のメニューで 「Intents: 意図」 が選択されているように、まずWatsonが理解できる「意図」をインプットしてあげます。Watsonは初期状態では何も知識が無いため、ここからがWatsonのトレーニングになります。

上で [Create new ⊕] し以下の画面になったら、上の「#」のところに 「#what_is_watson」 と名称(Name)をインプットします(名称は自分が分かれば大丈夫で特に深い意味はありません)。ここでは 「Watsonって何?」 と聞かれた時に、それがWatsonとは何か教えて欲しいという意図であることを、Watsonに教えます。以下のように下半分の「⊕」 のところに、いくつか 「Watsonとは何か?」 を問い合わせるための例文を示してあげます。このことでWatsonは、これらを聞かれたら「Watsonとは何か?」を聞かれているんだなと意図を理解します。

次にメニュー 「Entities: 対象」 に移り、ある対象のカテゴリに含まれる要素群を定義します。ここではWatsonについて、Watsonのサービスという対象に対し、その要素である単語を登録してみます。まず 「@」のところに「@watson_services」と名称を入力します。次に、Watsonのサービス (API)には「会話」「自然言語分類」「音声認識」という要素があるため、これらを入力します。Synonym (同義語)として、同じ意味で使われる可能性のある単語を追加しておいてください。こちらでは「conversation」など英語名をインプットしておきました。

ここまでがWatsonに理解して欲しい意図や対象の定義ですが、ここから「Dialog: 対話」 でそれらを活用した対話のストーリーを組み立てます。以下で [Create ⊕] してください。

以下のような会話の流れの最初の箱(Node)が表示されますので 、呼ばれるきっかけである[Triggered by] のところに 「Welcome」 とインプットして [Welcome (create new condition)] を選択してください。この箱は最初に呼ばれるので「Welcome」としました。ここでは名称(Name this node)はあまり重要ではないので、入力を省略します。

その下の [response] (返答) のところにこの箱が呼ばれた結果何を表示するかを入力します。ここでは「Watsonについて聞いてください」とインプットしました。

Welcomeの箱(Node)を定義したら、その下に自動的に [anything_else] の箱ができたと思います。これは、質問の意図を理解できなかった時のその他(else)の回答を用意するためのもの。返答(response)に 「わかりません」 と入力しました。

最初に作った 「Welcome」 の右の「⊕ (Continue conversation)」をクリックして、その後のWatsonの対応を作成します。

追加されたWelcomeの右の箱のTriggerに 「what」 などを入力すると候補が出てくるので先ほどIntentsで意図を定義した [#what_is_watson] を選択します。これはユーザーが何か質問してきた時に、「Watonって何?」という意図であるとWatsonが理解した時に呼び出されます。その時に表示したい返答を [Add response] のところに入力しまが、ここでは 「WatsonはAI技術を応用したサービスです。何について知りたいですか?」 と入力しました。

その [#what_is_watson] の箱の右の 「⊕」 をクリックし、次にWatsonのサービスが入力された時の対話を定義します。以下のようにTriggerのところで [@watson_services] をインプットしてください。

その下の返答(rensponses)のところに 「<? @watson_services ?> は提供されています」 と入力します。この 「<? @w…. ?>」 のところは、ユーザーが入力してきた単語を復唱してWatsonが画面に表示するための変数部分になります。

次に、Watsonがこの返答をした後にWatsonの質問に戻るために、今作成した [@watson_services] の箱の下の、四角に右矢印の付いた [Jump to] ボタンをクリックします。

[#what_is_watson] の箱に緑の行き先が出てくるので [Go to condition] をクリックします。

では、Watsonにトレーニングした対話を使って、実際に会話をしてみましょう。
画面右上の噴出しマーク  「Ask Watson」 をクリックして会話モードを右に表示してください。最初のWelcomeの 「Watsonについて聞いてください」 が表示されたら、右下に 「Watsonって何?」 とインプットします。

するとWatsonは、以下で緑の四角で表示されているように 「#what_is_watson」 で定義した例文に合致すると認識し、意図(Intent)を理解します。 そこでその意図で定義した返答 「WatsonはAI技術を応用したサービスです。何について知りたいですか?」 を返します。そこで右下に 「音声認識」 と入力しましょう。

「音声認識」 は @watson_services の要素として登録してありますので、対象(Entity)はWatsonサービスであると認識し、「音声認識 は提供されています」 とWatsonが返答します。「音声認識」の部分は、「<? @…. ?>」 で定義した変数部分で、ちゃんと入力が復唱されていますね。

ここで上のように 「深層学習」 と入力してみると、Watsonのサービスの要素としてはトレーニングしていなかったので、Watsonは対象として認識できず、「わかりません」  と返答しました。

このようにWatson Conversationは、会話における質問の意図や、認識した対象に対して決められた返答をする際に使えるサービスです。賢い人工知能というよりは、自然言語解析機能を活用し、ある程度決められた会話をしっかりこなしたい場合に有効です。

他のWatsonサービスと組み合わせながらチャットボットのようなアプリを作ってみましょう!