Watson NLCとR&Rを使って自動でナレッジ蓄積し質問応答するSlack botを作成してみた【Watson日本語版ハッカソン最優秀賞】

  • 119
    Like
  • 0
    Comment
More than 1 year has passed since last update.

はじめに

IBMとソフトバンクの共催でWatson日本語版ハッカソンが2015年12月5日-6日で開催されました。
・Watson日本語版ハッカソン

私も本ハッカソンに参戦し、開発したアプリが無事決勝戦に進出しました!
 →(12/17更新):優勝しました!

あまり多くの情報はまだ公開できませんが、
Watson NLCとR&R活用に関して具体的な例としてご参考ください。

※ Watson NLCとWatson R&Rについては下記記事がよくまとまっていたので合わせてご参照ください
・BluemixのNatural Language Classifierで文章を分類してみる(日本語)
・BluemixのRetrieve&Rankによる質問応答システムを試してみた)

心優しい人工bot 〜喧嘩の仲裁/ナレッジの自動蓄積/日本語で質問応答〜

■コンセプト
拡大するビジネスチャットを組織で活用する際に起こるトラブルをWatsonで解決する

■トラブル
・質問が無視されてイラつく
・質問に回答できる人間が属人化し回答遅延が起きることがある
・同じ質問を何度もしてしまいウザがられる。けど過去の回答を探すのは一苦労

■ソリューション
・ビジネスチャットの代表格「Slack」を活用 ※他のチャットツールへの拡張も可能
・SlackにWatson botを追加
・組織内のチャットが荒れるとbotが喧嘩の仲裁をする(形態素解析と感情分析)
・botに質問を投げると回答が返ってくる(Watson NLCとWatson R&R)
・botが知らないナレッジの場合は人に回答を促し、人が回答すると自動でナレッジを蓄積する
・ナレッジ蓄積後NLCとR&Rを定期的にトレーニングすることで自動応答精度が向上させる

実装方法

・Node-REDでメインの処理を作成

ハッカソンなのでスピード重視でNode-REDを利用しました。
事業化する際は考慮しないといけないことが増えるので、アーキテクチャは再度検討することになるかもしれません。

・Node-RED Libraryから必要なノードを追加する
 - Node-RED Library
  →Slackノード、DBノード(MySQL,PostgresDBなど)
   ※ Bluemixで作成したNode-REDへのノード追加手順は下記を参考ください。
    - BluemixのNode-REDパレットにノードを追加する

・Node-REDのフローを作成する
実際はもっと複雑ですが簡略すると大体こんな感じ。(まだ複雑ですかね?)
151210-0002.gif

これ以外にも回答登録機能、フィードバック反映機能、メールでの質問応答機能、トレーニング実行機能、感情解析機能などを実装しました。
細かい解説は割愛させてもらいますが、SlackからのメッセージをNLC及びR&RのREST API用に整形し、http requestすることで、結果を取得することができます。

NLCに関しては下記記事にNode-REDへの自作NLCノード追加の方法について解説されていました。
NLCノードを追加すれば、http requestではなくNLCノードを使って簡単に実装ができるようになります。
Node-REDにNatural Language Classifierノードを追加する

・ユーザー質問時の処理

151217-0001.png

Watson NLCで質問のカテゴリーを特定し、カテゴリー別のナレッジをWatson R&Rで用意することで、質問に対する回答精度を向上させるアーキテクチャを組んでいます。
勘のいい方は気づくと思いますが、ユーザーからの質問カテゴリーの種類は膨大になることが予測されます。
カテゴリーの種類が増えた際はNLCを多段構成にしたり、R&R側のナレッジを複数のNLCで共有するなど、NLCとR&Rの連携アーキテクチャはここまでシンプルにはいきません。
しかし、NLCやR&Rを無闇に増やすとナレッジ管理コストやトレーニング回数の増大などで必要なコストも増えることになりますので、最適な構成パターンについては引き続き検証を進めたいと思います。

・ユーザー回答時の処理

151217-0003.png

Watson NLCで未学習ナレッジだった場合やR&Rで確信度の低い回答だった場合は、ユーザーに回答を促します。Watsonが分からないことを人間がフォローすることで自然とWatsonにナレッジが溜まる仕組みです。
蓄積した回答ナレッジは、NLC及びR&Rトレーニング用のCSVファイルとJSONファイルに変換出力し、定期的にアップロードすることで使えば使うほどWatsonのナレッジが増え、回答できることが増えていきます。

NLC及びR&Rはトレーニング1回あたりに対して課金されるため、トレーニング頻度を1日1回に抑えて費用拡大の対策をしています。リアルタイムに学習させられるかどうかはWatsonの金額感との兼ね合いになりそうです。

おわりに

2日間のハッカソンでしたが、BluemixとWatsonをフル活用することでここくらいまでは実装することができます。まさにクラウドパワー。
本アプリケーションはまだまだ拡張できることが盛りだくさんなので、事業化も本気で考えつつ実装を進めてみますかね。
Watsonのトレーニングを人手をかけて賢くすることは可能ですし簡単ですが、育てるのに人手が掛かりすぎるのも本末転倒なので、APIとプログラミングで自動学習範囲を増やしていくやり方をこれからも模索してみます。

(12/17更新)
Watson日本語版ハッカソンで最優秀賞をいただけて資金を得ることができました。
本格化に向けて動き出しますかね…。荒削りな部分を直さないとだ。