IBMのWatsonは人工知能関連のサービス群となっているが、随分と出来ることが増えてきています。感情分析、会話、機械翻訳、文章の読み上げ、検索サービスもあります。IBMはキーワードとして「コグニティブ」という単語を使ってこれからの未来を表現しているようです。ビッグデータや非構造化データを理解・推論・学習することで思考するシステムを提供することで付加価値を与えたいと考えているのではないでしょうか。 今回は、このWatsonサービスのひとつDialogを利用してチャット応対システムをつくってみることにします。

Dialogとは

こちらの動画とデモを見て頂ければなんとなく概要をつかめます。

デモ画像

質問に答えた内容を踏まえて質問を繰り返すことができるようですね。

Dialogを立ち上げる

Bluemixのアカウント登録後、こちらからDeploy to Bluemixボタンをクリックします。

after clicked deploy

するとこんな画面が表示されるので、Region、Organization、Spaceを選択してDEPLOYします。

deploying

最後のデプロイには時間がかかります。

Success

成功しました。こちらの VIEW YOUR APP をクリックしてみると、Dialog Toolというアプリが立ち上がり、チャットを試してみることができるようになります。

dialog tool

こちらのサンプルをアップロードすると、デモのピザの応対をしてくれるようになります。

Configファイルの修正

XMLファイルを眺めてみます。中身は大きく

  • flow
  • entities
  • constants
  • variables
  • settings
  • specialSettings

で囲われているようです。 flowgotoや質問文があるので条件分岐に対応しそうです。 entitiesは回答リストでしょうか。 constantsは定数宣言。よく変更されるような変数をここで宣言するようです。 variablesは回答に対応する変数。settingsは設定を書きます。

まずsettingsのLANGUAGEをja-JPにしましょう。

翻訳していきます。

<grammar>
    <item>どのサイズがありますか</item>
    <item>$どの*がありますか</item>
    <item>$どんな*がありますか</item>
    <item>$何*ありますか</item>
    <item>$選択肢は*ですか</item>
    <item>$たとえば*</item>
    <item>$教えて</item>
</grammar>

こんな感じでユーザの質問を定義していきます。ここで、

  • $ はそれより前方にどんな文が入っていてもマッチします。
  • **の部分にどんな単語・文が入ってもマッチします。

これで日本語応対システムができました。

japanese watson

分岐とDynamic Node Resolution

もっと複雑な条件分岐に対応するにはどうすればいいのでしょうか?例えば、ピザだけでなくハンバーガーも注文を受けれるような場合ですね。Dialogには<goto><if>タグが準備されています。これで変数と比較することが可能です。またDynamic Node Resolutionという仕組みでまとめることができるようになっています。

<getUserInput>
    <search ref="folder_41"/>
    <search ref="folder_54"/>
    <search ref="folder_200088"/>
</getUserInput>

のようにsearchタグでフォルダの対象を指定することで入力から指定フォルダでマッチするものを探し、応対することができるようになっています。

一つのXMLファイルにロジックを書きこんでいくので、全体的に肥大化と管理が難しくなることが予想されます。うまい方法を考えていきたいですね。