とある製品のFAQ作りに長年携わってきた。これをもとにWatson を使って「何か質問したら、いい感じの答えを返してくれる」ようにするにはどうしたらいいのだろう、と悩んだ。
結果的に、来た質問の種類を分類するのに使えば一番シンプルだな、という結論に落ち着いた。そこにいたるまでの悩みをまとめたメモ。
もちろん今時点では私はこのように考えた、というだけなので、これからまた考え方を変えていくかもしれない。私の使い方が慣れていないだけなのかもしれないし。
Watson Assistant
チャットボットが作れるサービスと聞いて、FAQをチャットボットに答えさせればいいんじゃない?というアイデアが浮かぶも、私にとっては分かりづらい・使いづらい概念が「インテンツ」だった。
インテンツは「質問の意図」なんだそうだけれど、FAQは一つの質問に対して、一つまたは複数の答えを書いている。でもWatson Assistant のインテンツの説明を見ると、どうやら一つの答えに対して複数の質問が対応するような書き方をしている。言い回しが違っていたり、類義語が使われていたり、違う切り口で聞いていたり。
私が関係しているFAQは、似たような答えになる複数の質問を用意しているわけではなかった。(例外はある)
例外的に似たような答えに落ち着く複数の質問だけ1つのインテンツにまとめて、その他のFAQ一つごとにインテンツが一つ必要なのじゃないだろうかと悩む羽目になった。
もうひとつの「エンティティ」という概念は、Watson Assistant の定義画面見ると、実質的には同義語(あるいは似たような意味を表す句)をリスト化したものなのだろうなと思った。これは分かりやすいが、「インテンツ」と「エンティティ」の組み合わせで回答が決まる、ってどういうこと、と悩んだ。
FAQの一つの質問に対して、答えが複数ある場合に分岐条件として「エンティティ」を使うものなのだろうか?
Watson Discovery
PDF、HTML、WORD文書などを取り込んでくれて、質問をすると順位付けされた複数の回答を返すもの、と紹介資料には書いてあったりする。たしかに製品マニュアルなどを Uploadしたら何かしら取り込んでいるように見える。
しかし質問欄に単語だけであったり、質問文などの文章を入力してみた結果としては、これは質問文に含まれる単語を元に、その単語が含まれる場所を返してくれる検索システムなんじゃないかという気がした。 Watson Explorer というテキストマイニングするためのソフトウェアの Foundational Components (主に文書検索を行う部分)を使っているような感覚。Watson Discovery の紹介資料のような夢の世界からはだいぶ遠い。
私のデータの与え方が間違っていて、もっと工夫が必要なのかもしれない。事前に文書の中身を目的別に分類しておいてから、それぞれ別の「クラス」として与えるとか?
Natural Language Classifier
結論から言うとこれが私には一番分かりやすい。今まで関わってきた FAQ 集は、質問のカテゴリー別に分類していた。その質問文と所属するカテゴリーのペアを CSV で Natural Language Classifier (NLC) に与えて学習させた。
学習が終わったところで質問文を微妙に変えて NLC を呼び出すと、おおむね意図通りの分類をしてくれる。意図したのと違う分類結果を返してくる場合ももちろんあるが、それによって実は自分の先入観というか思い込みで分類が間違っている(というか「ゆがんでいた」)ことに気づく、という効果もあった。
NLC には UI が無いので、NLC を呼び出して結果を受け取ってなんらかの表示をするには、Node-RED で表示部分を作ってあげる必要がある。
そして再び Watson Assistant へ
でも UI が必要なら、実は Watson Assistant が内部で NLC を呼び出しているので、Watson Assistant を UI 代わりに使うという方法があることに気づいた。
簡単な使い方としては既存のFAQ集のどのページを見れば目的の質問と回答があるのか分からない人に対して「質問のカテゴリーはXXですね、ではこちらのページをご覧ください」と、案内すればよいのではないだろうか。
気づき
ここで気づいた。実は私の関わってきたFAQ の「インテンツ」とは、FAQ 集の「質問のカテゴリー」だったのではないかと。
チャットボット「が質問に答える」ことが本当にしたいことでは無くて「目的の答えに早くたどり着けるように」チャットボット「に手助けさせる」ことが実は必要なのだ。
今後の課題、言い換えると次に目標
というわけで遠回りではあったが Watson Assistant で質問のカテゴリーを判定して、それをもとに「ここに目的の質問の答え載ってますよ」と案内すれば良いよね、と気づいた。しかし、質問の内容によっては、さらにヒアリングしないと答えが決まらないようなものがある。
いまは、FAQ集に 1)2)3)のように複数の答えを書いていて、その文章を順次見ていって自分自身で判断して頂く必要がある。その判断部分もガイドできるようになるとすばらしい。それをどう実現するのか、今後の課題だ。