アクティブ ラーニングを使用してナレッジ ベースを改善するUse active learning to improve your knowledge base

アクティブ ラーニングを使用すると、質問と回答のペアに対して、ユーザーの送信内容に基づく代わりの質問を提案することで、ナレッジ ベースの品質を改善できます。Active learning allows you to improve the quality of your knowledge base by suggesting alternative questions, based on user-submissions, to your question and answer pair. それらの提案を検討し、既存の質問に追加するか却下します。You review those suggestions, either adding them to existing questions or rejecting them.

ナレッジ ベースが自動的に変更されることはありません。Your knowledge base doesn't change automatically. 変更を有効にするためには、提案を受け入れる必要があります。In order for any change to take effect, you must accept the suggestions. これらの提案によって質問が追加されますが、既存の質問の変更や削除は行われません。These suggestions add questions but don't change or remove existing questions.

アクティブ ラーニングとはWhat is active learning?

QnA Maker は、暗黙的および明示的フィードバックによって、新しい質問のバリエーションを学習します。QnA Maker learns new question variations with implicit and explicit feedback.

  • 暗黙的フィードバック – ランカーは、ユーザーの質問に、スコアが非常に近い回答が複数ある状況を認識して、これをフィードバックと見なします。Implicit feedback – The ranker understands when a user question has multiple answers with scores that are very close and considers this as feedback. これが行われるためにユーザーの操作は必要ありません。You don't need to do anything for this to happen.
  • 明示的フィードバック – ナレッジ ベースから、スコアのバリエーションがほとんどない回答が複数返されると、クライアント アプリケーションはユーザーに、どの質問が正しい質問であるかを尋ねます。Explicit feedback – When multiple answers with little variation in scores are returned from the knowledge base, the client application asks the user which question is the correct question. ユーザーの明示的フィードバックは、Train API を介して QnA Maker に送信されます。The user's explicit feedback is sent to QnA Maker with the Train API.

どちらの方法でも、ランカーにはクラスター化されている類似のクエリが提供されます。Both methods provide the ranker with similar queries that are clustered.

アクティブ ラーニングの動作方法How active learning works

アクティブ ラーニングは、QnA Maker によって返される、上位いくつかの回答のスコアに基づいてトリガーされます。Active learning is triggered based on the scores of the top few answers returned by QnA Maker. スコアの違いが狭い範囲内にある場合、そのクエリは、QnA ペアの各候補について考えられる (代替質問としての) 提案であると見なされます。If the score differences lie within a small range, then the query is considered a possible suggestion (as an alternate question) for each of the possible QnA pairs. 特定の QnA ペアについて提案された質問をいったん受け入れると、他のペアについての質問は拒否されます。Once you accept the suggested question for a specific QnA pair, it is rejected for the other pairs. 提案を受け入れた後は、忘れずに保存とトレーニングを行う必要があります。You need to remember to save and train, after accepting suggestions.

アクティブ ラーニングでは、エンドポイントが、妥当な量で多様性のある使用状況クエリを受け取っている場合、可能な限り最適な提案が示されます。Active learning gives the best possible suggestions in cases where the endpoints are getting a reasonable quantity and variety of usage queries. 類似のクエリが 5 つ以上クラスター化された場合、QnA Maker は 30 分おきに、ユーザー ベースの質問をナレッジ ベース デザイナーに提案し、承認または却下を求めます。When 5 or more similar queries are clustered, every 30 minutes, QnA Maker suggests the user-based questions to the knowledge base designer to accept or reject. すべての提案は類似度によって一緒にクラスター化され、エンドユーザーによる特定のクエリの頻度に基づいて、代わりの質問に対する上位の提案が表示されます。All the suggestions are clustered together by similarity and top suggestions for alternate questions are displayed based on the frequency of the particular queries by end users.

QnA Maker ポータルで質問が提案されたら、それらの提案をレビューして、承認または拒否する必要があります。Once questions are suggested in the QnA Maker portal, you need to review and accept or reject those suggestions. 提案を管理するための API はありません。There isn't an API to manage suggestions.

QnA Maker の暗黙的フィードバックの動作方法How QnA Maker's implicit feedback works

QnA Maker の暗黙的フィードバックでは、スコアの近さを判定してからアクティブ ラーニングの提案を行うアルゴリズムが使用されます。QnA Maker's implicit feedback uses an algorithm to determine score proximity then make active learning suggestions. 近さを判定するアルゴリズムは、単純な計算ではありません。The algorithm to determine proximity is not a simple calculation. 次の例の範囲は、固定的なものではなく、アルゴリズムの影響を理解する指針としてのみ使用する必要があります。The ranges in the following example are not meant to be fixed but should be used as a guide to understand the impact of the algorithm only.

質問のスコアの信頼度が高い (80% など) 場合、アクティブ ラーニング用に適すると見なされるスコアの範囲は広く、およそ 10% 以内です。When a question's score is highly confident, such as 80%, the range of scores that are considered for active learning are wide, approximately within 10%. 信頼度スコアが低下すると (40% など)、スコアの範囲も狭まり、約 4% 以内となります。As the confidence score decreases, such as 40%, the range of scores decreases as well, approximately within 4%.

Train API で明示的フィードバックを提供する方法How you give explicit feedback with the Train API

どの回答が最適な回答であったかについて、QnA Maker が明示的フィードバックを得ることが重要です。It is important that QnA Maker gets explicit feedback about which of the answers was the best answer. 最適な回答をどのように決定するかはユーザーの自由で、その方法には以下が含まれる場合があります。How the best answer is determined is up to you and can include:

  • いずれかの回答を選択することによるユーザーのフィードバック。User feedback, selecting one of the answers.
  • 許容できるスコアの範囲を決定するなどのビジネス ロジック。Business logic, such as determining an acceptable score range.
  • ユーザーのフィードバックとビジネス ロジックの両方の組み合わせ。A combination of both user feedback and business logic.

アクティブ ラーニングを使用するためにラインタイム バージョンをアップグレードするUpgrade your runtime version to use active learning

アクティブ ラーニングは、ランタイム バージョン 4.4.0 以上でサポートされています。Active Learning is supported in runtime version 4.4.0 and above. ナレッジ ベースが以前のバージョンで作成された場合は、この機能を使用するためにランタイムをアップグレードします。If your knowledge base was created on an earlier version, upgrade your runtime to use this feature.

アクティブ ラーニングを有効にして提案を表示するTurn on active learning to see suggestions

アクティブ ラーニングは、既定では無効になっています。Active learning is off by default. これを有効にして、提案された質問を表示します。Turn it on to see suggested questions. アクティブ ラーニングを有効にした後は、クライアント アプリから QnA Maker に情報を送信する必要があります。After you turn on active learning, you need to send information from the client app to QnA Maker. 詳細については、「ボットから GenerateAnswer および Train API を使用するためのアーキテクチャの流れ」を参照してください。For more information, see Architectural flow for using GenerateAnswer and Train APIs from a bot.

  1. [発行] を選択してナレッジ ベースを発行します。Select Publish to publish the knowledge base. アクティブ ラーニング クエリは、GenerateAnswer API 予測エンドポイントからのみ収集されます。Active learning queries are collected from the GenerateAnswer API prediction endpoint only. QnA Maker ポータルの [テスト] ウィンドウへのクエリは、アクティブ ラーニングには影響しません。The queries to the Test pane in the QnA Maker portal do not impact active learning.

  2. QnA Maker ポータルでアクティブ ラーニングを有効にするには、右上隅に移動して自分の名前を選択し、Service settings(サービス設定) に移動します。To turn active learning on in the QnA Maker portal, go to the top-right corner, select your Name, go to Service Settings.

    [Service settings](サービス設定) ページで、アクティブ ラーニングの提案された代わりの質問を有効にします。

  3. QnA Maker サービスを見つけて [Active Learning] (アクティブ ラーニング) を切り替えます。Find the QnA Maker service then toggle Active Learning.

    [Service settings](サービス設定) ページで、アクティブ ラーニング機能をオンに切り替えます。機能を切り替えられないときは、サービスをアップグレードしなければならない場合があります。On the Service settings page, toggle on Active Learning feature. If you are not able to toggle the feature, you may need to upgrade your service.

    注意

    上の画像の具体的なバージョンは、単なる例として表示されています。The exact version on the preceding image is shown as an example only. 実際のバージョンは、異なる場合があります。Your version may be different.

    [Active Learning](アクティブ ラーニング) が有効になると、ユーザーが送信した質問に基づいて、ナレッジ ベースから定期的に新しい質問が提案されます。Once Active Learning is enabled, the knowledge base suggests new questions at regular intervals based on user-submitted questions. 設定を再度切り替えると、 [Active Learning] (アクティブ ラーニング) を無効にできます。You can disable Active Learning by toggling the setting again.

ナレッジ ベースでアクティブ ラーニングの提案を受け入れるAccept an active learning suggestion in the knowledge base

提案を承認し、保存してトレーニングした後、アクティブラーニングによりナレッジ ベースまたは Search Service が変更されます。Active Learning alters the Knowledge Base or Search Service after you approve the suggestion, then save and train. 提案を承認すると、代わりの質問として追加されます。If you approve the suggestion it will be added as an alternate question.

  1. 提案された質問を表示するには、ナレッジ ベースの [Edit](編集) ページで、 [View Options](オプションの表示)[Show active learning suggestions](アクティブ ラーニングの提案を表示) の順に選択します。In order to see the suggested questions, on the Edit knowledge base page, select View Options, then select Show active learning suggestions.

    アクティブ ラーニングの新しい代わりの質問を表示するためには、ポータルの[Edit](編集) セクションで [Show Suggestions](提案の表示) を選択します。On the Edit section of the portal, select Show Suggestions in order to see the active learning's new question alternatives.

  2. [Filter by Suggestions](提案別にフィルターを適用) を選択し、質問と回答のペアでナレッジ ベースをフィルター処理すると、提案だけが表示されます。Filter the knowledge base with question and answer pairs to show only suggestions by selecting Filter by Suggestions.

    アクティブ ラーニングの代わりの質問のみを表示する場合は、[Filter by Suggestions](提案別にフィルターを適用) トグルを使用します。Use the Filter by suggestions toggle to view only the active learning's suggested question alternatives.

  3. 各 QnA ペアでは、質問を受け入れるチェック マーク () または却下する x が付いた新しい代わりの質問が提案されます。Each QnA pair suggests the new question alternatives with a check mark, , to accept the question or an x to reject the suggestions. 質問を追加するにはチェック マークを選択します。Select the check mark to add the question.

    緑色のチェック マークまたは赤色の削除マークを選択して、アクティブ ラーニングの提案された代わりの質問を選択または拒否します。Select or reject active learning's suggested question alternatives by selecting the green check mark or red delete mark.

    コンテキスト ツールバーの [Add all] (すべて追加) または [Reject all] (すべて却下) を選択することで、すべての提案 を追加または削除できます。You can add or delete all suggestions by selecting Add all or Reject all in the contextual toolbar.

  4. [Save and train] (保存してトレーニング) を選択し、ナレッジ ベースに変更を保存します。Select Save and Train to save the changes to the knowledge base.

  5. [発行] を選択して、変更を GenerateAnswer API から使用できるようにします。Select Publish to allow the changes to be available from the GenerateAnswer API.

    類似のクエリが 5 つ以上クラスター化された場合、QnA Maker は 30 分ごとに、ユーザーが承認または却下する代わりの質問を提案します。When 5 or more similar queries are clustered, every 30 minutes, QnA Maker suggests the alternate questions for you to accept or reject.

ボットから GenerateAnswer および Train API を使用するためのアーキテクチャの流れArchitectural flow for using GenerateAnswer and Train APIs from a bot

ボットやその他のクライアント アプリケーションは、次のアーキテクチャの流れを利用してアクティブ ラーニングを使用する必要があります。A bot or other client application should use the following architectural flow to use active learning:

GenerateAnswer 要求で top プロパティを使用して、一致する回答をいくつか取得するUse the top property in the GenerateAnswer request to get several matching answers

回答を求めて QnA Maker に質問を送信すると、JSON 本文の top プロパティにより、返す回答の数が設定されます。When submitting a question to QnA Maker for an answer, the top property of the JSON body sets the number of answers to return.

{
    "question": "wi-fi",
    "isTest": false,
    "top": 3
}

ビジネス ロジックと一緒に score プロパティを使用して、ユーザーに表示する回答の一覧を取得するUse the score property along with business logic to get list of answers to show user

チャット ボットなどのクライアント アプリケーションが応答を受け取るときには、上位 3 つの質問が返されます。When the client application (such as a chat bot) receives the response, the top 3 questions are returned. score プロパティを使用して、スコア間の近さを分析します。Use the score property to analyze the proximity between scores. この近さの範囲は、ユーザー独自のビジネス ロジックによって判定されます。This proximity range is determined by your own business logic.

{
    "answers": [
        {
            "questions": [
                "Wi-Fi Direct Status Indicator"
            ],
            "answer": "**Wi-Fi Direct Status Indicator**\n\nStatus bar icons indicate your current Wi-Fi Direct connection status:  \n\nWhen your device is connected to another device using Wi-Fi Direct, '$  \n\n+ •+ ' Wi-Fi Direct is displayed in the Status bar.",
            "score": 74.21,
            "id": 607,
            "source": "Bugbash KB.pdf",
            "metadata": []
        },
        {
            "questions": [
                "Wi-Fi - Connections"
            ],
            "answer": "**Wi-Fi**\n\nWi-Fi is a term used for certain types of Wireless Local Area Networks (WLAN). Wi-Fi communication requires access to a wireless Access Point (AP).",
            "score": 74.15,
            "id": 599,
            "source": "Bugbash KB.pdf",
            "metadata": []
        },
        {
            "questions": [
                "Turn Wi-Fi On or Off"
            ],
            "answer": "**Turn Wi-Fi On or Off**\n\nTurning Wi-Fi on makes your device able to discover and connect to compatible in-range wireless APs.  \n\n1.  From a Home screen, tap ::: Apps > e Settings .\n2.  Tap Connections > Wi-Fi , and then tap On/Off to turn Wi-Fi on or off.",
            "score": 69.99,
            "id": 600,
            "source": "Bugbash KB.pdf",
            "metadata": []
        }
    ]
}

質問のスコアが類似しているときのクライアント アプリケーションのフォロー アップClient application follow-up when questions have similar scores

クライアント アプリケーションでは、意図を最も適切に表している _1 つの質問_をユーザーが選択するためのオプションを示して、質問が表示されます。Your client application displays the questions with an option for the user to select the single question that most represents their intention.

ユーザーが既存の質問の 1 つを選択すると、QnA Maker の Train API を使用して、ユーザーの選択がフィードバックとしてクライアント アプリケーションから送信されます。Once the user selects one of the existing questions, the client application sends the user's choice as feedback using QnA Maker's Train API. このフィードバックにより、アクティブ ラーニングのフィードバック ループが完了します。This feedback completes the active learning feedback loop.

Train APITrain API

アクティブ ラーニングのフィードバックは、Train API POST 要求を使用して QnA Maker に送信されます。Active learning feedback is sent to QnA Maker with the Train API POST request. API シグネチャは次のとおりです。The API signature is:

POST https://<QnA-Maker-resource-name>.azurewebsites.net/qnamaker/knowledgebases/<knowledge-base-ID>/train
Authorization: EndpointKey <endpoint-key>
Content-Type: application/json
{"feedbackRecords": [{"userId": "1","userQuestion": "<question-text>","qnaId": 1}]}
HTTP 要求プロパティHTTP request property NameName 種類Type 目的Purpose
URL ルート パラメーターURL route parameter ナレッジ ベース IDKnowledge base ID stringstring ナレッジ ベースの GUID。The GUID for your knowledge base.
カスタム サブドメインCustom subdomain QnAMaker リソース名QnAMaker resource name stringstring リソース名は、QnA Maker のカスタム サブドメインとして使用されます。The resource name is used as the custom subdomain for your QnA Maker. これは、ナレッジ ベースを公開した後に、[設定] ページで利用できます。This is available on the Settings page after you publish the knowledge base. これは host として表示されます。It is listed as the host.
ヘッダーHeader Content-TypeContent-Type stringstring API に送信される本文のメディアの種類。The media type of the body sent to the API. 既定値は application/json です。Default value is: application/json
ヘッダーHeader AuthorizationAuthorization stringstring エンドポイント キー (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。Your endpoint key (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Post 本文Post Body JSON オブジェクトJSON object JSONJSON トレーニングのフィードバックThe training feedback

JSON の本文には、次のようないくつかの設定があります。The JSON body has several settings:

JSON 本文のプロパティJSON body property 種類Type 目的Purpose
feedbackRecords arrayarray フィードバックの一覧。List of feedback.
userId stringstring 提案された質問を受け入れるユーザーのユーザー ID。The user ID of the person accepting the suggested questions. ユーザー ID の形式は、ユーザーが決定します。The user ID format is up to you. たとえば、電子メール アドレスをアーキテクチャ内の有効なユーザー ID とすることができます。For example, an email address can be a valid user ID in your architecture. 省略可能。Optional.
userQuestion stringstring ユーザーのクエリの正確なテキスト。Exact text of the user's query. 必須。Required.
qnaID numbernumber 質問の ID。GenerateAnswer 応答内にあります。ID of question, found in the GenerateAnswer response.

JSON 本文の例は、次のようになります。An example JSON body looks like:

{
    "feedbackRecords": [
        {
            "userId": "1",
            "userQuestion": "<question-text>",
            "qnaId": 1
        }
    ]
}

成功した応答は、ステータス 204 を返し、JSON 応答の本文は返しません。A successful response returns a status of 204 and no JSON response body.

多くのフィードバック レコードを単一呼び出しにバッチ処理するBatch many feedback records into a single call

ボットなどのクライアント側アプリケーションでは、データを格納してから、多くのレコードを 1 つの JSON 本文の feedbackRecords 配列に入れて送信できます。In the client-side application, such as a bot, you can store the data, then send many records in a single JSON body in the feedbackRecords array.

JSON 本文の例は、次のようになります。An example JSON body looks like:

{
    "feedbackRecords": [
        {
            "userId": "1",
            "userQuestion": "How do I ...",
            "qnaId": 1
        },
        {
            "userId": "2",
            "userQuestion": "Where is ...",
            "qnaId": 40
        },
        {
            "userId": "3",
            "userQuestion": "When do I ...",
            "qnaId": 33
        }
    ]
}

ボット フレームワークのサンプル コードBot framework sample code

ボット フレームワークのコードでは、ユーザーのクエリをアクティブ ラーニングに使用する必要がある場合は Train API を呼び出す必要があります。Your bot framework code needs to call the Train API, if the user's query should be used for active learning. 記述するコードは 2 種類あります。There are two pieces of code to write:

  • クエリをアクティブ ラーニングに使用するかどうかを指定するDetermine if query should be used for active learning
  • アクティブ ラーニングのためにクエリを QnA Maker の Train API に送り返すSend query back to QnA Maker's Train API for active learning

Azure Bot のサンプルでは、これらのアクティビティの両方がプログラムされています。In the Azure Bot sample, both of these activities have been programmed.

Bot Framework 4.x での Train API のための C# コードの例Example C# code for Train API with Bot Framework 4.x

次のコードは、Train API を使用して情報を QnA Maker に送り返す方法を示しています。The following code illustrates how to send information back to QnA Maker with the Train API. この完全なコード サンプルは GitHub で入手できます。This complete code sample is available on GitHub.

public class FeedbackRecords
{
    // <summary>
    /// List of feedback records
    /// </summary>
    [JsonProperty("feedbackRecords")]
    public FeedbackRecord[] Records { get; set; }
}

/// <summary>
/// Active learning feedback record
/// </summary>
public class FeedbackRecord
{
    /// <summary>
    /// User id
    /// </summary>
    public string UserId { get; set; }

    /// <summary>
    /// User question
    /// </summary>
    public string UserQuestion { get; set; }

    /// <summary>
    /// QnA Id
    /// </summary>
    public int QnaId { get; set; }
}

/// <summary>
/// Method to call REST-based QnAMaker Train API for Active Learning
/// </summary>
/// <param name="endpoint">Endpoint URI of the runtime</param>
/// <param name="FeedbackRecords">Feedback records train API</param>
/// <param name="kbId">Knowledgebase Id</param>
/// <param name="key">Endpoint key</param>
/// <param name="cancellationToken"> Cancellation token</param>
public async static void CallTrain(string endpoint, FeedbackRecords feedbackRecords, string kbId, string key, CancellationToken cancellationToken)
{
    var uri = endpoint + "/knowledgebases/" + kbId + "/train/";

    using (var client = new HttpClient())
    {
        using (var request = new HttpRequestMessage())
        {
            request.Method = HttpMethod.Post;
            request.RequestUri = new Uri(uri);
            request.Content = new StringContent(JsonConvert.SerializeObject(feedbackRecords), Encoding.UTF8, "application/json");
            request.Headers.Add("Authorization", "EndpointKey " + key);

            var response = await client.SendAsync(request, cancellationToken);
            await response.Content.ReadAsStringAsync();
        }
    }
}

Bot Framework 4.x での Train API のための Node.js コードの例Example Node.js code for Train API with Bot Framework 4.x

次のコードは、Train API を使用して情報を QnA Maker に送り返す方法を示しています。The following code illustrates how to send information back to QnA Maker with the Train API. この完全なコード サンプルは GitHub で入手できます。This complete code sample is available on GitHub.

async callTrain(stepContext){

    var trainResponses = stepContext.values[this.qnaData];
    var currentQuery = stepContext.values[this.currentQuery];

    if(trainResponses.length > 1){
        var reply = stepContext.context.activity.text;
        var qnaResults = trainResponses.filter(r => r.questions[0] == reply);

        if(qnaResults.length > 0){

            stepContext.values[this.qnaData] = qnaResults;

            var feedbackRecords = {
                FeedbackRecords:[
                    {
                        UserId:stepContext.context.activity.id,
                        UserQuestion: currentQuery,
                        QnaId: qnaResults[0].id
                    }
                ]
            };

            // Call Active Learning Train API
            this.activeLearningHelper.callTrain(this.qnaMaker.endpoint.host, feedbackRecords, this.qnaMaker.endpoint.knowledgeBaseId, this.qnaMaker.endpoint.endpointKey);
            
            return await stepContext.next(qnaResults);
        }
        else{

            return await stepContext.endDialog();
        }
    }

    return await stepContext.next(stepContext.result);
}

アクティブ ラーニングはエクスポートされたナレッジ ベースに保存されますActive learning is saved in the exported knowledge base

アプリでアクティブ ラーニングが有効になっている場合、アプリをエクスポートすると、tsv ファイル内の SuggestedQuestions 列にアクティブ ラーニング データが保持されます。When your app has active learning enabled, and you export the app, the SuggestedQuestions column in the tsv file retains the active learning data.

SuggestedQuestions 列は、暗黙的 (autosuggested) および明示的 (usersuggested) なフィードバック情報の JSON オブジェクトです。The SuggestedQuestions column is a JSON object of information of implicit, autosuggested, and explicit, usersuggested feedback. 次に示すのは、ユーザーが送信した 1 つの help の質問に対応する、この JSON オブジェクトの例です。An example of this JSON object for a single user-submitted question of help is:

[
    {
        "clusterHead": "help",
        "totalAutoSuggestedCount": 1,
        "totalUserSuggestedCount": 0,
        "alternateQuestionList": [
            {
                "question": "help",
                "autoSuggestedCount": 1,
                "userSuggestedCount": 0
            }
        ]
    }
]

また、変更のダウンロード API を使用すると、REST または任意の言語ベースの SDK を使用してこれらの変更をレビューすることもできます。You can also use the download alterations API to review these alterations, using REST or any of the language-based SDKs:

このアプリを再インポートすると、アクティブ ラーニングは引き続き情報を収集し、ナレッジ ベースに対する提案を提示します。When you reimport this app, the active learning continues to collect information and recommend suggestions for your knowledge base.

ベスト プラクティスBest practices

アクティブ ラーニングを使用する場合のベスト プラクティスについては、ベスト プラクティスに関するページを参照してください。For best practices when using active learning, see Best practices.

次の手順Next steps