15
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Watson ConversationのTutorialを日本語でやってみた (後編)

Last updated at Posted at 2016-11-18

#はじめに(前編のおさらい)

本記事は、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

WS000107.JPG

  • 図表はクリックすると拡大します。
  1. 会話開始時にWatsonに自動車デモへようこそ!と応答させる。
  2. ユーザーからの呼びかけを待ち、そのユーザーの呼びかけにWatsonが識別できるintentが含まれるかどうかによって、Watsonにそれぞれ下記の応答をさせる。
  • 2-1. #あいさつintentを含む場合:こんにちは!ご用件は何でしょうか?
  • 2-2. #起動intentを含む場合:後述の3. により追加の処理を行う。
  • 2-3. いずれのintentも含まない場合:すみません。わかりません。もう一度お願いします。
  1. 前述2-2.の場合はさらに、ユーザーからの呼びかけに@機器entityが含まれるかどうか、含まれる場合はそのentity値が何かによって、Watsonにそれぞれ下記の応答をさせる。
  • 3-1. @機器entityを含み、それが@機器:音楽entity値である場合:後述の4. により追加の処理を行う。
  • 3-2. @機器entityを含み、それが@機器:音楽entity値でない場合:わかりました。@機器を起動します。@機器の部分に、ユーザーからの呼びかけに含まれる@機器entityのentity値が入ります)
  • 3-3. @機器entityを含まない場合:すみません。どのようにするのかわかりません。起動可能なものは、音楽、ヘッドライト、エアコンです。
  1. 前述3-1.の場合はさらに、Watsonにわかりました。どんな音楽が聞きたいですか?と応答させることでユーザーに追加の呼びかけをさせた上で、そのユーザーからの呼びかけに@ジャンルentityが含まれるかどうかによって、Watsonにそれぞれ下記の応答をさせる。
  • 4-1. @ジャンルentityを含む場合:わかりました。@ジャンルを流します。@ジャンルの部分に、ユーザーからの呼びかけに含まれる@ジャンルentityのentity値が入ります)
  • 4-2. @ジャンルentityを含まない場合:すみません。ジャンルがわかりません。選べるジャンルはクラシック、リズムアンドブルース、ロックです。

ところで、前回(前編)では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の流れに対応して、次の順序でノードを作成していきます。

  • 始点ノードの作成
  • #あいさつノード, #起動ノードの作成
  • @機器ノードの作成
  • @機器:音楽ノードの作成

###始点ノードの作成

はじめに会話の始点となるノードを設定します。

  1. 自動車チュートリアルワークスペースページにてDialogタブをクリックします。
  1. DialogタブにてCreateをクリックします。
    WS000031.JPG
    単一のノードでdialogが作成されます。
    WS000032.JPG
  1. Enter a condition欄にconversation_startと入力します。
    入力するとドロップダウンリストが表示されますが、そこでconversation_start(create new condition)を選択します。
    WS000037.JPG
  1. Watson says欄に自動車デモへようこそ!と入力します。
    これは指定した条件(この場合はconversation_start)が真の場合に返す応答です。
    WS000038.JPG
  1. Anything elseノードをクリックします。
    このノードはconversation_startノードが定義されたとき自動的に作成されるノードです。
    WS000039.JPG
  1. Anything elseノードのWatson says欄にすみません。わかりません。もう一度お願いします。と入力します。
    これはユーザーからの呼びかけが他のどのノードにも一致しない場合に返す応答です。
    WS000040.JPG

会話をテストします。

  1. 右上の会話アイコンをクリックします。
    WS000042.JPG
    チャットウインドウに応答「自動車デモへようこそ!」が自動的に表示されます。
    WS000041.JPG
  1. 好きな文章を入力しEnterを押します。
    WS000044.JPG
    始点以外の他のノードをまだ何も定義していないため、応答「すみません。わかりません。もう一度お願いします。」が表示されます。
    WS000045.JPG

####あいさつノード, #起動ノードの作成

次に、始点ノードと並列なノードとして、2つのintentに対応する#あいさつノードと#起動ノードを作成します。さらに、ユーザーからの呼びかけに#あいさつintentおよび#起動intentを含むとき、それぞれ対応するノードに分岐するように条件を設定します。

#####あいさつノードの作成

  1. Conversation_startノード下部の+アイコンをクリックして、並列に新たなノードを作成します。
    WS000046.JPG
  1. Enter a condition欄に#あいさつと入力します。ドロップダウンリストが表示されたら#あいさつを選択します。
    WS000048.JPG
  1. Watson says欄にこんにちは!ご用件は何でしょうか?と入力します。
    WS000049.JPG
  1. チャットウインドウで会話をテストします。こんにちはと入力します。
    #あいさつintentが認識され、正しい応答が表示されます。
    WS000050.JPG

#####起動ノードの作成

  1. #あいさつノード下部の+アイコンをクリックして、並列に新たなノードを作成します。
    WS000051.JPG
  1. Enter a condition欄に#起動と入力します。ドロップダウンリストが表示されたら#起動を選択します。
    WS000052.JPG

###@機器ノードの作成

2つのintentのうち、#あいさつintentに対する応答は一種類であるため、#あいさつノードは単一ノードからなります。一方で、#起動intentに対する応答は、ユーザーがどの機器の起動を要求したか、またそれが有効な機器であるか(有効な#機器entity値を含んでいるか)どうかによって異なるため、#起動ノードから2つのサブノートを追加します。

####有効な機器が指定された場合

まず、ユーザーからの呼びかけが有効な@機器entity値を含むときに分岐する@機器ノードを作成します。

  1. #起動ノード右部の+アイコンをクリックして、新たなサブノードを作成します。
    WS000053.JPG
  1. Enter a condition欄に@機器と入力します。ドロップダウンリストが表示されたら@機器を選択します。
    WS000054.JPG
  1. #起動ノード右上端のOptionsアイコンをクリックしContinue fromをクリックします。
    WS000056.JPG
  1. @機器ノードをクリックしGo to Conditionをクリックします。
    WS000057.JPG
    WS000058.JPG

途中で登場した#起動ノードから@機器ノードへのContinue fromリンクは、#起動ノードへ分岐したとき次のユーザーからの呼びかけを待つことなくそのまま@機器ノードへ分岐することを意味します。

有効な機器が指定されなかった場合

次に、ユーザーからの呼びかけが有効な@機器entity値を含まないときに分岐するノードを作成します。

  1. @機器ノード下部の+アイコンをクリックして、並列に新たなノードを作成します。
    WS000059.JPG
  1. Enter a condition欄にtrueと入力します。ドロップダウンリストが表示されたらtrue (create new condition)を選択します。
    WS000088.JPG
  1. Watson says欄にすみません。どのようにするのかわかりません。起動可能なものは、音楽、ヘッドライト、エアコンです。と入力します。
    WS000089.JPG

@機器ノードが偽であると評価された場合はこのノードに分岐しますが、このノードの条件にtrueを選択することによってこのノードは常に真であると評価されるようになり、それより下の並列ノードに遷移することはなくなります。

###@機器:音楽ノードの作成

同様に、ユーザーが有効な機器を指定した場合の適切な応答を決定するための、@機器ノードの2つのサブノートを追加します。2つのノードはそれぞれ、起動する機器が音楽である場合とない場合に対応します。

####起動する機器が音楽である場合

まず、ユーザーからの呼びかけが@機器:音楽entity値を含むときに分岐する@機器:音楽ノードを作成します。
このノードに分岐する場合、追加情報として音楽のジャンルを必要とするため、さらにサブノートもあわせて作成します。

  1. @機器ノード右部の+アイコンをクリックして、新たなサブノードを作成します。
    WS000090.JPG
  1. Enter a condition欄に@機器と入力します。ドロップダウンリストが表示されたら@機器:音楽を選択します。
    WS000091.JPG
  1. Watson says欄にわかりました。どんな音楽が聞きたいですか?と入力します。
    WS000092.JPG
  1. @機器ノード右上端のOptionsアイコンをクリックしContinue fromをクリックします。
    WS000093.JPG
  1. @機器:音楽ノードをクリックしGo to Conditionをクリックします。
    WS000094.JPG

途中で登場した@機器ノードから@機器:音楽ノードへのContinue fromリンクは、@機器ノードへ分岐したとき次のユーザーからの呼びかけを待つことなくそのまま@機器:音楽ノードへ分岐することを意味します。

#####有効なジャンルが指定された場合

ユーザーからの呼びかけが有効なジャンルentity値を含むときに分岐するノードを作成します。

  1. @機器:音楽ノード右部の+アイコンをクリックして、新たなサブノードを作成します。
    WS000095.JPG
  1. Enter a condition欄に@ジャンルと入力します。ドロップダウンリストが表示されたら@ジャンルを選択します。
    WS000096.JPG
  1. Watson says欄にわかりました。@ジャンル を流します。と入力します。
    WS000097.JPG

今回は@機器:音楽ノードから@ジャンルノードへのContinue fromリンクを設定しませんでした。この場合、@機器:音楽ノードへ分岐したときには次のユーザーからの呼びかけを待ってから@機器:音楽ノードへ分岐することを意味します。

#####有効なジャンルが指定されなかった場合

ユーザーからの呼びかけが有効なジャンルentity値を含まないときに分岐するノードを作成します。

  1. @ジャンルノード下部の+アイコンをクリックして、並列の新たなサブノードを作成します。
    WS000098.JPG
  1. Enter a condition欄にtrueと入力します。ドロップダウンリストが表示されたらtrue (create new condition)を選択します。
    WS000099.JPG
  1. Watson says欄にすみません。ジャンルがわかりません。選べるジャンルはクラシック、リズムアンドブルース、ロックです。と入力します。
    WS000100.JPG

@ジャンルノードが偽であると評価された場合はこのノードに分岐しますが、このノードの条件にtrueを選択することによってこのノードは常に真であると評価されるようになり、それより下の並列ノードに遷移することはなくなります。

会話をテストします。

  1. チャットウインドウに音楽を流してと入力します。
    WS000078.JPG
    #起動intentと@機器:音楽entityが認識され、音楽のジャンルの入力を求められます。
  1. 有効な@ジャンルentity値の名前または類義語を入力します。
    WS000079.JPG
    @ジャンルentityが認識され適切な応答が返されます。
  1. チャットウインドウに再び音楽を流してと入力し、今度は無効なジャンルを入力します。
    WS000080.JPG
    認識できなかったことを示す応答が返されます。

####起動する機器が音楽以外である場合

つぎに、ユーザーからの呼びかけが@機器:音楽entity値をまないときに分岐するノードを作成します。
このノードに分岐する場合、他に追加情報を必要としないため、サブノートは作成しません。

  1. @機器:音楽ノード下部の+アイコンをクリックして、並列の新たなサブノードを作成します。
    WS000081.JPG
  1. Enter a condition欄にtrueと入力します。ドロップダウンリストが表示されたらtrue (create new condition)を選択します。
    WS000082.JPG
  1. Watson says欄にわかりました。@機器 を起動します。と入力します。
    WS000083.JPG

@機器:音楽ノードが偽であると評価された場合はこのノードに分岐しますが、このノードの条件にtrueを選択することによってこのノードは常に真であると評価されるようになり、それより下の並列ノードに遷移することはなくなります。

会話をテストします。

  1. チャットウインドウにヘッドライトをつけてと入力すると、#起動intentと@機器:ヘッドライトentityが認識され、わかりました。ヘッドライトを起動します。という応答が返ります。
    エアコンをつけてと入力すると、#起動intentと@機器:エアコンentityが認識され、わかりました。エアコンを起動します。という応答が返ります。
    WS000084.JPG
  1. 定義した類義語に基づく入力を試してみます。
    WS000085.JPG
    類義語でも正しく識別されることがわかります。

#おわりに

今回dialogを作成したことによって、ユーザーからの呼びかけに対してWatsonが応答を返せるようになりました。
前回(前編)と今回(後編)を通して、以上でConversationのチュートリアルを完了しました。
本記事によって、Conversationを使った応答システム実現の手順を手軽と感じていただければ、何よりの幸いです。

#お問い合わせ
ご質問がございましたら、こちらにもお問い合わせいただけます。

すくすくワトソン編集室: eb17685@jp.ibm.com

15
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?