#はじめに(前編のおさらい)
本記事は、Watson ConversationのTutorialを日本語でやってみた (前編)に続く後編です。前回に引き続き、Watson Conversation(以下、Conversation)のチュートリアルの題材である自動車チュートリアルを日本語で実施していきます。
前回では、まずチュートリアルに先立ち、Conversationの3要素、目的を示すintent, それを補足するキーワードのentity, ユーザーからの呼びかけとWatsonからの応答の組み合わせであるdialogについて解説しました。そしてチュートリアルでは、Conversationサービスとワークスペースを作成し、その中でintentとentityの作成を完了しました。最後にこの状態でWatsonとの会話において実際にintentとentityを使っての会話を試みましたが、まだこの段階では、Watsonはこれらを認識こそするものの、応答を返すまでには至らなかったのでした。
今回では、Conversationの最後の1要素、dialogを作成することにより、Watsonが応答を返せるようにします。
#チュートリアルの前に
実際にチュートリアルを再開する前に、ふたたび必要最低限の事項を説明します。
前回(前編)、dialogを次のように説明しました。
-
dialog:
ユーザーからの呼びかけとそれに対するWatsonからの応答の組み合わせです。
ユーザーからの呼びかけを受け取るとそのintentとentityが識別され、dialogの中でそれらに対応する正しい応答が選択されます。
一度のやりとりに対応する単一のdialogであることもあれば、何回かのやりとりに対応する木構造のdialogであることもあります。
自動車チュートリアルにおいては、次のような会話をさせるべく、次に示す図のようなdialogを作成します。
- 自動車チュートリアルのdialog
- 図表はクリックすると拡大します。
- 会話開始時にWatsonに
自動車デモへようこそ!
と応答させる。
- ユーザーからの呼びかけを待ち、そのユーザーの呼びかけにWatsonが識別できるintentが含まれるかどうかによって、Watsonにそれぞれ下記の応答をさせる。
- 2-1.
#あいさつ
intentを含む場合:こんにちは!ご用件は何でしょうか?
- 2-2.
#起動
intentを含む場合:後述の3. により追加の処理を行う。- 2-3. いずれのintentも含まない場合:
すみません。わかりません。もう一度お願いします。
- 前述2-2.の場合はさらに、ユーザーからの呼びかけに
@機器
entityが含まれるかどうか、含まれる場合はそのentity値が何かによって、Watsonにそれぞれ下記の応答をさせる。
- 3-1.
@機器
entityを含み、それが@機器:音楽
entity値である場合:後述の4. により追加の処理を行う。- 3-2.
@機器
entityを含み、それが@機器:音楽
entity値でない場合:わかりました。@機器を起動します。
(@機器
の部分に、ユーザーからの呼びかけに含まれる@機器
entityのentity値が入ります)- 3-3.
@機器
entityを含まない場合:すみません。どのようにするのかわかりません。起動可能なものは、音楽、ヘッドライト、エアコンです。
- 前述3-1.の場合はさらに、Watsonに
わかりました。どんな音楽が聞きたいですか?
と応答させることでユーザーに追加の呼びかけをさせた上で、そのユーザーからの呼びかけに@ジャンル
entityが含まれるかどうかによって、Watsonにそれぞれ下記の応答をさせる。
ところで、前回(前編)では3つの会話例(1)-(3)が登場しました。この3つの会話例はこの自動車チュートリアルのdialogの一例となっており、それぞれの会話例では下記のようなdialogの分岐が発生しています。
- 会話例(1):(1.) → **2-1.**と分岐
ユーザー:こんにちは。
Watson:こんにちは!ご用件はなんでしょうか?
- 会話例(2):(1.) → 2-2. → **3-2.**と分岐
ユーザー:ヘッドライトをつけて。
Watson:わかりました。ヘッドライトを起動します。
- 会話例(3):(1.) → 2-2. → 3-1. → **4-1.**と分岐
ユーザー:音楽を流して。
Watson:わかりました。どんな音楽が聞きたいですか?
ユーザー:クラシックにして。
Watson:わかりました。クラシックを流します。
#チュートリアル
では、チュートリアルを再開します。
##Stage 6: dialog作成
dialogを作成するためにはノードと呼ばれる箱を作成します。ひとつのノードはひとつの会話に対応します。それぞれのノードに対して、そのノードが真となる条件と、そのときにWatsonからユーザーに返す応答を記述していきます。ノードを作成したら、そのノードを他のノードのサブノートまたは並列ノードとして接続します。
会話が始まると、dialog内で接続されたノードを順番に評価していき、現在のノードが真となった場合はそのノードに記述された応答を返し、そのノードのサブノートがあればそちらの評価に移ります。現在のノードが偽となった場合はそのノードに記述された応答は返さず、そのノードの並列ノードがあればそちらの評価に移ります。
前述した自動車チュートリアルのdialogの流れに対応して、次の順序でノードを作成していきます。
- 始点ノードの作成
-
#あいさつ
ノード,#起動
ノードの作成 -
@機器
ノードの作成 -
@機器:音楽
ノードの作成
###始点ノードの作成
はじめに会話の始点となるノードを設定します。
自動車チュートリアル
ワークスペースページにてDialog
タブをクリックします。
会話をテストします。
####あいさつ
ノード, #起動
ノードの作成
次に、始点ノードと並列なノードとして、2つのintentに対応する#あいさつ
ノードと#起動
ノードを作成します。さらに、ユーザーからの呼びかけに#あいさつ
intentおよび#起動
intentを含むとき、それぞれ対応するノードに分岐するように条件を設定します。
#####あいさつ
ノードの作成
#####起動
ノードの作成
###@機器
ノードの作成
2つのintentのうち、#あいさつ
intentに対する応答は一種類であるため、#あいさつ
ノードは単一ノードからなります。一方で、#起動
intentに対する応答は、ユーザーがどの機器の起動を要求したか、またそれが有効な機器であるか(有効な#機器
entity値を含んでいるか)どうかによって異なるため、#起動
ノードから2つのサブノートを追加します。
####有効な機器が指定された場合
まず、ユーザーからの呼びかけが有効な@機器
entity値を含むときに分岐する@機器
ノードを作成します。
途中で登場した#起動
ノードから@機器
ノードへのContinue from
リンクは、#起動
ノードへ分岐したとき次のユーザーからの呼びかけを待つことなくそのまま@機器
ノードへ分岐することを意味します。
有効な機器が指定されなかった場合
次に、ユーザーからの呼びかけが有効な@機器
entity値を含まないときに分岐するノードを作成します。
@機器
ノードが偽であると評価された場合はこのノードに分岐しますが、このノードの条件にtrue
を選択することによってこのノードは常に真であると評価されるようになり、それより下の並列ノードに遷移することはなくなります。
###@機器:音楽
ノードの作成
同様に、ユーザーが有効な機器を指定した場合の適切な応答を決定するための、@機器
ノードの2つのサブノートを追加します。2つのノードはそれぞれ、起動する機器が音楽である場合とない場合に対応します。
####起動する機器が音楽である場合
まず、ユーザーからの呼びかけが@機器:音楽
entity値を含むときに分岐する@機器:音楽
ノードを作成します。
このノードに分岐する場合、追加情報として音楽のジャンルを必要とするため、さらにサブノートもあわせて作成します。
途中で登場した@機器
ノードから@機器:音楽
ノードへのContinue from
リンクは、@機器
ノードへ分岐したとき次のユーザーからの呼びかけを待つことなくそのまま@機器:音楽
ノードへ分岐することを意味します。
#####有効なジャンルが指定された場合
ユーザーからの呼びかけが有効なジャンル
entity値を含むときに分岐するノードを作成します。
今回は@機器:音楽
ノードから@ジャンル
ノードへのContinue from
リンクを設定しませんでした。この場合、@機器:音楽
ノードへ分岐したときには次のユーザーからの呼びかけを待ってから@機器:音楽
ノードへ分岐することを意味します。
#####有効なジャンルが指定されなかった場合
ユーザーからの呼びかけが有効なジャンル
entity値を含まないときに分岐するノードを作成します。
@ジャンル
ノードが偽であると評価された場合はこのノードに分岐しますが、このノードの条件にtrue
を選択することによってこのノードは常に真であると評価されるようになり、それより下の並列ノードに遷移することはなくなります。
会話をテストします。
####起動する機器が音楽以外である場合
つぎに、ユーザーからの呼びかけが@機器:音楽
entity値をまないときに分岐するノードを作成します。
このノードに分岐する場合、他に追加情報を必要としないため、サブノートは作成しません。
@機器:音楽
ノードが偽であると評価された場合はこのノードに分岐しますが、このノードの条件にtrue
を選択することによってこのノードは常に真であると評価されるようになり、それより下の並列ノードに遷移することはなくなります。
会話をテストします。
#おわりに
今回dialogを作成したことによって、ユーザーからの呼びかけに対してWatsonが応答を返せるようになりました。
前回(前編)と今回(後編)を通して、以上でConversationのチュートリアルを完了しました。
本記事によって、Conversationを使った応答システム実現の手順を手軽と感じていただければ、何よりの幸いです。
#お問い合わせ
ご質問がございましたら、こちらにもお問い合わせいただけます。
すくすくワトソン編集室: eb17685@jp.ibm.com