2019-01-16

チャットボットは意図した通りにお話しするか

らいか

前記事はこちら
AIの民主化進む
チャットボット作成=キャラクター作成

前々回記事では、作成するチャットボットを、「就活生が気軽に質問出来る、先輩に質問コーナー」のようなコンテンツにすること。前回記事では、「チャットボットのキャラクターイメージ」を作成する所まで書きました。

今回記事では「IBM Watson Assistant」を使用し、実際にチャットボットを作成する所を書いていきたいと思います。

ワトソンの参考URLはこちら
IBM Cloud 資料 Watson Assistant 概説チュートリアル

Watson Assistantの使い方を知るには上記のチュートリアルを見るのがわかりやすく、且つ詳しく載っています。

こちらの記事では詳しい操作方法などは省き、実際に私が作ってみた部分をざっくり説明していきます。ちなみに前回記事に書きましたが、私が作成するチャットボットの名前は「らいか」といいますので、こちらの記事でも「らいか」で話を進めようと思います。

インテントで質問に対する答えの種類を大枠で設定する

インテント


前提として今から紹介するのは私のオリジナルな作り方なので、作成するコンテンツによって最適解は当然変わります。

タイトルが少し分かりにくいかと思いますが、らいかに何を答えさせたいかによってインテントを設定します。

私はこのように設定しました。

[#greeting]
こんにちは等のあいさつです。
ユーザー側のコメント例は「こんにちは」「元気?」などです。

[#question_work_company]
会社や業務のことに関する問い合わせへ返答する用です。
質問例は「仕事内容を教えて」「配属先は希望出来る?」などです。

[#resolve_anxiety]
学生さんの漠然とした不安に対して励ましのメッセージをコメントする用です。
質問例は「仕事を続けていけるかな?」「私にも出来るかな?」などです。

[#idletalk]
雑談用です。
コメント例は「なまえおしえて」「今日の朝なに食べた?」などです。

[#angry]
らいかが上手にしゃべれずにユーザーが苛立った時に謝る用です。
ユーザー側のコメント例は「もう!」「ちゃんとしゃべって!」などです。

インテント中身

ここに出来るだけたくさんの質問例を入れて、ユーザーがコメントを入力した際に、らいかが何について返答するべきなのか、AIが判断出来るようにします。

エンティティを必要に応じて設定する

エンティティ

エンティティ中身

エンティティでは特別にトリガーさせたい単語や語句を設定します。
トリガーというのはシステム(Watson Assistant)が返答を選択する際のきっかけです。

一部を載せます

[@greeting]
・こんにちは
  →(シノニム)
    こんちは
    やっほー
    ハロー
・元気ですか
  →(シノニム)
    元気?
    元気ですか?
    調子はどうですか?

[@labor]
・介護休暇
  →(シノニム)
    介護
    親の介護
・勤務地
  →(シノニム)
    配属先
    所属場所

 [@topics_chat]
・音楽
・食べ物
・恋愛

シノニムというのは同じ意味の言葉で、これを入れておかないと語句が似ていてもちょっと違うとトリガーしません。

ダイアログで返答を入力する

ダイアログ

ダイアログ中身

ダイアログにトリガーの条件と、トリガーした際の返答を入力します。

条件はインテントそのままでもOK。特定の単語に反応させたい時にはエンティティを使います。

全てを載せるとすごい量になるので一部のみ載せます。

条件:@greeting=こんにちは
返答:「こんにちは!」

条件:@greeting=元気ですか
返答:「元気だよ!」

条件:#resolve_anxiety
返答:「やってみたらきっと楽しいよ!」

システム側であらかじめ「ようこそ」ノードと「その他」ノードが用意されています。
「ようこそ」ノードは、ユーザーがページを開いた時にこちらから話しかける言葉を入力します。「こんにちは!」や「質問を入力してね!」などです。

「その他」ノードはダイアログの一番下にあり、他にトリガーされるノード(条件)がなかった時にトリガーされます。「表現を変えるか、他の質問をお願いします!」などです。

ダイアログでは、ノード(条件と返答のセット)を並べる順番が重要で、ユーザーがコメントを送信した際、システムはダイアログの上から順に検証し、条件に一致するノードがあると即座に返答を返します。トリガーされたノードより下にあったノードは検証されていません。

つまり重要な返答ほど上に配置する、ということです。

(それから私が地味につまずいてしまった部分ですが、ノード名に「?」が付くとトリガーしません。)

テスト&修正

ある程度データを入力したら「Try it」でテストします。


右下の欄にコメントを入力すると、システムがインテントやエンティティを認識して、ダイアログを検証、トリガーしたノードの返答をコメントで返してきます。


「仕事を続けていけるかな?」に対して「#question_work_company」が認識されています。これを「#resolve_anxiety」に変えて、「やってみたらきっと楽しいよ!」と返答させたいです。


これで修整できました。

このようにテスト→修整を繰り返して、らいかがユーザーの質問を正しく認識できるようにします。返答のパターンが足りないところはダイアログでノードを足していきます。

(もう一点地味につまずいた部分ですが、slackなどの他アプリと連携させるのは有料サービスのようです。)

まとめ

実際に自分でチャットボットを作成する前は、AIというのはAIが考えて導き出した答えをリターンしてくるものかと思っていましたが、「IBM Watson Assistant」に関して言えば、ダイアログのノードに私が入力した返答以外の言葉はしゃべりません。

2019年1月現在、企業向けに提供されているほとんど全てのチャットボットシステムは、企業の意図に反した言葉を話さないように、このようなシステムを取っているようです。

他国の話ですが、ユーザーと会話をすることで言葉を覚え、自分の意志で発話することができるAIがいたようなのですが、悪意のあるユーザーなども多く、あまり上手くいかなかったようです。

ダイアログに入力した言葉しか話さないのならば、普通のプログラムとどう違うのか?AIとは?と思うでしょうか。

実は一番最初に記述している「インテント」、この部分がAIなのです。
ユーザーの入力したコメントは何についての質問なのか。喜んでいるのか。怒っているのか。つまり「認知」の部分です。

現在流通しているAIの技術において、この「認知」に関してはかなり発達していて、

・人でいう目の役割
Googleなどの写真解析の発達
自動運転車に必要となる道路標識や、道を渡ろうとする人間の認知

・人でいう耳の役割
スマートスピーカーやスマホなど、声で操作できる端末の登場

・人でいう鼻の役割
あんまり聞かないですね。

と、すでに現実世界で活躍していますね。

自分で考えて何か新しい仕事のようなことを始めてみたり、自分の意志で何か人の役にたつような行動をしてみたり、という所謂「強いAI」と呼ばれる、ドラえもんのような、アンドロイドのような存在が生まれるのは、もう少し先の話になるでしょう。

らいか


Read More