ナレッジ ベースでアクティブ ラーニングにより提案された質問を受け入れるAccept active learning suggested questions 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.

アクティブ ラーニングを有効にするTurn on active learning

提案された質問を表示するには、QnA Maker リソースに対してアクティブ ラーニングを有効にする必要があります。In order to see suggested questions, you must turn on active learning for your QnA Maker resource.

提案された質問を表示するView suggested questions

  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 名前Name TypeType 目的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 承認Authorization 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 TypeType 目的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.

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.

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
            }
        ]
    }
]

このアプリを再インポートすると、アクティブ ラーニングは引き続き情報を収集し、ナレッジ ベースに対する提案を提示します。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