#はじめに
2019年2月上旬に、GA版のQnA Makerでもアクティブラーニング機能が使用できるようになりました。調査を進めていったところ、どうやらPreview版の時とは全く異なるアルゴリズムを用いて実現されているようです。本記事では、2019年3月現在のQnA Makerのアクティブラーニング機能に関して調べてみたことをまとめます。
(本記事では、アクティブラーニングそのものの話は行いませんのでご了承ください。)
※本記事は2019年3月現在の情報をもとに書かれています。
#アクティブラーニング機能の過去
Preview時のアクティブラーニング機能は、以下の記事にもあるように、動作条件が明示的に公表されていました。
(文章抜粋)
Train Knowledge Base API で、20 以上のユニークなユーザー(userId) から、合計で50 回、同じQ&A の呼び出しを行うことで、Knowledge Base にその Q&A が登録されます。
上記の条件を満たした場合、Q&Aの一つとして登録され、それをAPIとして公開する際にPublishするのか、削除するのかをKBの運用者が判断する という仕様でした。
#GA版のアクティブラーニング機能
一方で、GA版のアクティブラーニング機能は、動作条件やアルゴリズムが明示的には公表されていません。そのため、20以上のユニークなユーザから合計で50回... といった条件を満たしても、KBに登録されない可能性があります。
また、GA版ではKBにそのままQ&Aが登録されません。代わりに、提案(suggestion)をしてくれます。
アクティブラーニングの結果、QnA Makerが「KBに追加した方がよいのではないか?」と判断した「Question」を提案し、QnA Makerポータルに表示をしてくれます。KB運用者はそこで提案された内容を、受け入れるのか/拒否するのかを判断するだけでよいのです。
#2種類のフィードバック方法
公式ドキュメントによると、GA版QnA Makerのアクティブラーニング機能には、以下の2種類のフィードバック方法があるようです。ドキュメントの文章は少し分かりづらかったので、私なりにかみ砕いて書いてみました。
(公式: https://docs.microsoft.com/ja-jp/azure/cognitive-services/qnamaker/how-to/improve-knowledge-base)
1. 暗黙的フィードバック (Implicit feedback)
ユーザからの質問に対して複数候補があり、それらのConfidence Scoreが非常に近しい時、ユーザからの質問をフィードバックの一つとして提案する機能。Confidence Scoreが非常に近い時というのは、たまたま0.XXだけスコアが上だったから候補1の回答を返しただけで、実際にユーザ的には候補2or3の回答も欲しかった情報であるという可能性を孕んでいるので、Suggestionとして有用性がある。
2. 明示的フィードバック (Explicit feedback)
スコアのバリエーションがほとんどない回答が複数返されると、クライアントアプリケーション(例えばチャットボット)からユーザに、どの質問が正しい(欲しかった)質問であるかを尋ねてくれる機能(Google検索の"もしかして・・" みたいな)。Train APIを用いて実現。エンドユーザによって明示的に、本来あるべき質問が入力されるので、KBに登録するSuggestionとして有用性がでる。今までは、ダイアログのフローとして組み込み、Application Insightsなどでログを取得し、さらに手動でKBに追加するという手順が必要であったが、そういった手間が全て省かれる。
最後にドキュメントには、以下のように書かれています。
どちらの方法でも、クラスター化されている類似のクエリがランカーに提供されます。類似のクエリがクラスター化されると、QnA Maker はナレッジ ベース デザイナーに、承認または却下するユーザー ベースの質問を提案します。
このクラスタ化の動作については不明ですが、どちらのフィードバック方法にしても、最後にクラスタ化されることによって初めてQnA Makerポータル上にSuggestionが現れるようです。
#明示的フィードバックのサンプルコード
明示的フィードバックを実現するためのサンプルコードがMicrosoftからGitHub上で公開されています。Bot Builder SDK v4を用いています。
QnA MakerポータルからKBを作り、キー情報を入力するだけで簡単に動作させることができます。
本来であれば、「Did you mean:」の後に入力された内容をログから取り出し、KBの改善を手動で行うという作業が必要でした。
しかし、この明示的フィードバックの機能を用いることで、ユーザから質問が選ばれた段階でTrain APIにデータが飛び、アクティブラーニングの学習要素になるようです。
これは本当に便利ですよね・・。今まで手動で行っていたKBの精度向上コストが大きく減ると思います。
さらに、このサンプルはアクティブラーニングに使えるだけでなく、ボットのUXとしてもそのまま使うことができますので、このサンプルコードから開発を始めるのもアリかと思います。チャットボットのユーザビリティを考えても、回答を出す前に質問候補を出すというのは非常に有用性があると言われているそうです。
#まとめ
今回は、GA版QnA Makerのアクティブラーニング機能を紹介いたしました。
アクティブラーニング機能をONにすることで、ユーザのアクティビティに基づいた代わりの質問を提案してもらえるようになり、ナレッジベースの品質改善に生かすことができます。KB運用者は、QnA Makerによって提案された内容に対して、既存の質問に追加すべきか・却下すべきかを判断すればよいことになります。ユーザが提案を受け入れない限り、KBが自動的に更新・削除されることはないですし、アクティブラーニング機能をONにしたことによる課金の変化は(今のところ)ありませんので、是非使って頂きたい機能です。