こんにちは。この記事では、QnA Makerで構築したボットをユーザとの対話を重ねる中で強化していく方法について解説したいと思います。
それではまいります。
Contents
実現したいこと
ユーザとの会話を勝手に学習して、Qに対して適切なAを返せるようになっていってほしい!です笑
実現方法
この要件は、QnA Makerの「アクティブラーニング機能」を活用することである程度満たしていけそうです。ただし、下の解説の通り、この機能では人間による承認が必要なので、完全な自動化ではない点にご留意ください。
https://docs.microsoft.com/ja-jp/azure/cognitive-services/qnamaker/how-to/use-active-learning
この機能の概要と有効化手順、実際の動作検証の結果を以下にまとめました。
アクティブラーニングとは?
“アクティブ ラーニングの提案” 機能を使用すると、質問と回答のペアに対して、ユーザーの送信内容に基づく代わりの質問を提案することで、ナレッジ ベースの品質を改善できます。 それらの提案を検討し、既存の質問に追加するか却下します。
ナレッジ ベースが自動的に変更されることはありません。 変更を有効にするためには、提案を受け入れる必要があります。 これらの提案によって質問が追加されますが、既存の質問の変更や削除は行われません。
公式ドキュメントより
公式ドキュメントでは上記のように説明されています。
- この機能によって、ユーザの質問内容をふまえてナレッジベースに追加しておくとよさそうな質問をサービスが提案してくれる。
- サービスがナレッジベースを自動的に更新することはなく、最終的には運用者の判断が必要なので、運用者側にも定期的に見直す仕組みが必要
ということですね。
アクティブラーニングには大きく2つのフィードバック方法があります。
- 暗黙的フィードバック:ユーザの質問に対して、スコアが近い回答が複数あると、その事実自体をフィードバックとみなしてQnA Makerが学習します。ユーザの明示的なアクションが必要ないため、暗黙的と呼ばれています。
- 明示的フィードバック:ユーザの質問に対して、スコアのバリエーションがほとんどない回答が複数返されると、ユーザにどれが正しい質問であったかを尋ねます。ユーザが選択した回答は内部的にTrain APIを介してQnA Makerに送信されて、QnA Makerが強化されます。こちらはユーザの明示的な選択が必要なため、”明示的”と呼ばれているようです。
提案が行われる頻度は?
運用者がこれらのフィードバックをもとに改善の提案を受けるタイミングは、公式ドキュメントによると「提案に足るフィードバックが集まっていれば30分に一回」といった記載がありました。
アクティブ ラーニングでは、エンドポイントが、妥当な量で多様性のある使用状況クエリを受け取っている場合、可能な限り最適な提案が示されます。 類似のクエリが 5 つ以上クラスター化された場合、QnA Maker は 30 分おきに、ユーザー ベースの質問をナレッジ ベース デザイナーに提案し、承認または却下を求めます。 すべての提案は類似度によって一緒にクラスター化され、エンドユーザーによる特定のクエリの頻度に基づいて、代わりの質問に対する上位の提案が表示されます。
公式ドキュメントより
また、以下のStack Overflowに同様の議論もありました。
アクティブラーニングの有効化方法
こちらに説明があります。
QnA Maker PortalのProfile > Serice Settingから切り替えることができます。(ナレッジベース毎の設定ではないのですね)
アクティブラーニングを試してみた
今回、明示的なフィードバックを試してみることができました。(暗黙的な方は、、どうやってテストできるかな・・また別の機会に更新したいと思います)
Webチャット上で、ナレッジベースになさそうなワードで質問を投げて、明示的フィードバック依頼を受け取り回答する、といった流れを何度か繰り返しました。
その後しばらくしてKnowledge Baseを開くと‥「Accept」「Reject」の選択肢と合わせて、QAペアの提案がでてきました!なるほど、こういう動作になるのですね。
以上、QnA Makerでユーザとの会話からボットを強化していく方法のご紹介でした!
本日も最後までご覧いただきありがとうございました。この記事が少しでもお役に立ちましたら下のいいねボタンをポチって頂けると励みになります!
それではまた。
コメントを残す