Usare l'apprendimento attivo per migliorare la knowledge baseUse active learning to improve your knowledge base

L'apprendimento attivo consente di migliorare la qualità della knowledge base suggerendo domande alternative, basate sugli invii dell'utente, alla coppia di domanda e risposta.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. L'utente revisiona tali suggerimenti, aggiungendoli alle domande esistenti o rifiutandoli.You review those suggestions, either adding them to existing questions or rejecting them.

La knowledge base non viene modificata automaticamente.Your knowledge base doesn't change automatically. Per rendere effettive le modifiche, è necessario accettare i suggerimenti.In order for any change to take effect, you must accept the suggestions. Questi suggerimenti aggiungono domande, ma non modificano o rimuovono le domande esistenti.These suggestions add questions but don't change or remove existing questions.

Che cos'è l'apprendimento attivo?What is active learning?

QnA Maker impara nuove variazioni delle domande con feedback implicito ed esplicito.QnA Maker learns new question variations with implicit and explicit feedback.

  • Commenti impliciti : il Ranker riconosce quando una domanda utente ha più risposte con punteggi molto vicini e li considera come feedback.Implicit feedback – The ranker understands when a user question has multiple answers with scores that are very close and considers this as feedback. Non è necessario eseguire alcuna operazione perché questo avvenga.You don't need to do anything for this to happen.
  • Feedback esplicito : quando dalla Knowledge base vengono restituite più risposte con variazione minima dei punteggi, l'applicazione client chiede all'utente quale domanda è la domanda corretta.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. Il feedback esplicito dell'utente viene inviato a QnA Maker con l' API di training.The user's explicit feedback is sent to QnA Maker with the Train API.

Entrambi i metodi forniscono al Ranker query analoghe in cluster.Both methods provide the ranker with similar queries that are clustered.

Funzionamento dell'apprendimento attivoHow active learning works

L'apprendimento attivo viene attivato in base ai punteggi delle prime risposte restituite da QnA Maker.Active learning is triggered based on the scores of the top few answers returned by QnA Maker. Se le differenze tra i punteggi si trovano all'interno di un intervallo ridotto, la query viene considerata un possibile suggerimento, come domanda alternativa, per ognuna delle coppie di QnA possibili.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. Una volta accettata la domanda consigliata per una coppia di QnA specifica, viene rifiutata per le altre coppie.Once you accept the suggested question for a specific QnA pair, it is rejected for the other pairs. Dopo aver accettato i suggerimenti, è necessario ricordarsi di salvarli e eseguirne il training.You need to remember to save and train, after accepting suggestions.

L'apprendimento attivo fornisce i migliori suggerimenti possibili nei casi in cui gli endpoint ricevono una quantità e una varietà ragionevole di query di utilizzo.Active learning gives the best possible suggestions in cases where the endpoints are getting a reasonable quantity and variety of usage queries. Quando 5 o più query simili sono in cluster, ogni 30 minuti QnA Maker suggerisce le domande basate sull'utente alla finestra di progettazione della Knowledge base da accettare o rifiutare.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. Tutti i suggerimenti sono raggruppati per somiglianza e vengono visualizzati i primi suggerimenti per le domande alternative in base alla frequenza delle determinate query degli utenti finali.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.

Quando le domande sono consigliate nel portale di QnA Maker, è necessario esaminare e accettare o rifiutare tali suggerimenti.Once questions are suggested in the QnA Maker portal, you need to review and accept or reject those suggestions. Non è disponibile un'API per gestire i suggerimenti.There isn't an API to manage suggestions.

Funzionamento del feedback implicito di QnA MakerHow QnA Maker's implicit feedback works

Il feedback implicito di QnA Maker usa un algoritmo per determinare la prossimità del punteggio, quindi crea suggerimenti di apprendimento attivi.QnA Maker's implicit feedback uses an algorithm to determine score proximity then make active learning suggestions. L'algoritmo usato per determinare la prossimità non è un calcolo semplice.The algorithm to determine proximity is not a simple calculation. Gli intervalli nell'esempio seguente non sono destinati a essere corretti, ma devono essere utilizzati come guida per comprendere l'effetto solo dell'algoritmo.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.

Quando il punteggio di una domanda è altamente attendibile, ad esempio all'80%, l'intervallo dei punteggi che sono considerati per l'apprendimento attivo è ampio, entro il 10% circa.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%. Se il punteggio di attendibilità si riduce, ad esempio al 40%, anche l'intervallo dei punteggi si riduce, entro il 4% circa.As the confidence score decreases, such as 40%, the range of scores decreases as well, approximately within 4%.

Come fornire commenti espliciti con l'API TrainHow you give explicit feedback with the Train API

È importante che QnA Maker ottengano Commenti espliciti su quali risposte è stata la risposta migliore.It is important that QnA Maker gets explicit feedback about which of the answers was the best answer. Il modo in cui viene determinata la risposta migliore dipende dall'utente e può includere:How the best answer is determined is up to you and can include:

  • Commenti e suggerimenti degli utenti, selezionando una delle risposte.User feedback, selecting one of the answers.
  • Logica di business, ad esempio la determinazione di un intervallo di punteggi accettabile.Business logic, such as determining an acceptable score range.
  • Combinazione di feedback degli utenti e logica di business.A combination of both user feedback and business logic.

Aggiornare la versione di runtime per usare l'apprendimento attivoUpgrade your runtime version to use active learning

L'apprendimento attivo è supportato nella versione del runtime 4.4.0 e versioni successive.Active Learning is supported in runtime version 4.4.0 and above. Se la knowledge base è stata creata in una versione precedente, aggiornare il runtime per usare questa funzionalità.If your knowledge base was created on an earlier version, upgrade your runtime to use this feature.

Attivare l'apprendimento attivo per visualizzare i suggerimentiTurn on active learning to see suggestions

L'apprendimento attivo è disattivato per impostazione predefinita.Active learning is off by default. Attivarlo per visualizzare le domande suggerite.Turn it on to see suggested questions. Dopo aver attivato l'apprendimento attivo, è necessario inviare le informazioni dall'app client a QnA Maker.After you turn on active learning, you need to send information from the client app to QnA Maker. Per altre informazioni, vedere flusso di architettura per l'uso di GenerateAnswer ed eseguire il training delle API da un bot.For more information, see Architectural flow for using GenerateAnswer and Train APIs from a bot.

  1. Selezionare pubblica per pubblicare la Knowledge base.Select Publish to publish the knowledge base. Le query di apprendimento attivo vengono raccolte solo dall'endpoint di stima dell'API GenerateAnswer.Active learning queries are collected from the GenerateAnswer API prediction endpoint only. Le query nel riquadro di test nel portale di QnA Maker non influiscano sull'apprendimento attivo.The queries to the Test pane in the QnA Maker portal do not impact active learning.

  2. Per attivare l'apprendimento attivo nel portale di QnA Maker, passare all'angolo superiore destro, selezionare il nome, passare a Impostazioni servizio.To turn active learning on in the QnA Maker portal, go to the top-right corner, select your Name, go to Service Settings.

    Attivare le alternative di domande suggerite per l'apprendimento attivo dalla pagina delle impostazioni del servizio.

  3. Trovare il servizio QnA Maker, quindi attivare Active Learning (Apprendimento attivo).Find the QnA Maker service then toggle Active Learning.

    nella pagina Impostazioni servizio, abilitare la funzionalità di formazione attiva. Se non si è in grado di abilitare o disabilitare la funzionalità, potrebbe essere necessario aggiornare il servizio.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.

    Nota

    La versione esatta sull'immagine precedente viene mostrata solo come esempio.The exact version on the preceding image is shown as an example only. La versione può essere diversa.Your version may be different.

    Una volta abilitata l' apprendimento attivo , la Knowledge base suggerisce nuove domande a intervalli regolari in base alle domande inviate dall'utente.Once Active Learning is enabled, the knowledge base suggests new questions at regular intervals based on user-submitted questions. È possibile disabilitare l'apprendimento attivo selezionando nuovamente l'impostazione.You can disable Active Learning by toggling the setting again.

Accetta un suggerimento di apprendimento attivo nella Knowledge baseAccept an active learning suggestion in the knowledge base

L'apprendimento attivo modifica la Knowledge base o servizio di ricerca dopo l'approvazione del suggerimento, quindi Salva e Esegui il training.Active Learning alters the Knowledge Base or Search Service after you approve the suggestion, then save and train. Se si approva il suggerimento, verrà aggiunto come domanda alternativa.If you approve the suggestion it will be added as an alternate question.

  1. Per visualizzare le domande suggerite, nella pagina modifica Knowledge Base selezionare Visualizza Opzioni, quindi selezionare Mostra suggerimenti di apprendimento attivi.In order to see the suggested questions, on the Edit knowledge base page, select View Options, then select Show active learning suggestions.

    nella sezione Edit (modifica) del portale selezionare Show suggestions (Mostra suggerimenti) per visualizzare le nuove alternative per la domanda di formazione attiva.On the Edit section of the portal, select Show Suggestions in order to see the active learning's new question alternatives.

  2. Filtrare la Knowledge base con coppie di domande e risposte per visualizzare solo i suggerimenti selezionando Filtra per suggerimenti.Filter the knowledge base with question and answer pairs to show only suggestions by selecting Filter by Suggestions.

    usare l'interruttore Filtra per suggerimenti per visualizzare solo le alternative alla domanda consigliata per l'apprendimento attivo.Use the Filter by suggestions toggle to view only the active learning's suggested question alternatives.

  3. Ogni coppia di QnA suggerisce le nuove alternative alla domanda con un segno di spunta, , per accettare la domanda o un x per rifiutare i suggerimenti.Each QnA pair suggests the new question alternatives with a check mark, , to accept the question or an x to reject the suggestions. Selezionare il segno di spunta per aggiungere la domanda.Select the check mark to add the question.

    selezionare o rifiutare le alternative alla domanda consigliata di Active Learning selezionando il segno di spunta verde o il contrassegno di eliminazione rosso.Select or reject active learning's suggested question alternatives by selecting the green check mark or red delete mark.

    È possibile aggiungere o eliminare tutti i suggerimenti selezionando Aggiungi tutto o rifiuta tutto nella barra degli strumenti contestuale.You can add or delete all suggestions by selecting Add all or Reject all in the contextual toolbar.

  4. Selezionare Save and Train (Salva ed esegui il training) per salvare le modifiche alla knowledge base.Select Save and Train to save the changes to the knowledge base.

  5. Selezionare pubblica per consentire la disponibilità delle modifiche dall' API GenerateAnswer.Select Publish to allow the changes to be available from the GenerateAnswer API.

    Quando 5 o più query simili sono in cluster, ogni 30 minuti QnA Maker suggerisce le domande alternative da accettare o rifiutare.When 5 or more similar queries are clustered, every 30 minutes, QnA Maker suggests the alternate questions for you to accept or reject.

Flusso di architettura per l'uso di GenerateAnswer e il training di API da un botArchitectural flow for using GenerateAnswer and Train APIs from a bot

Un bot o un'altra applicazione client deve usare il flusso di architettura seguente per usare l'apprendimento attivo:A bot or other client application should use the following architectural flow to use active learning:

Usare la proprietà Top nella richiesta GenerateAnswer per ottenere diverse risposte corrispondentiUse the top property in the GenerateAnswer request to get several matching answers

Quando si invia una domanda a QnA Maker per una risposta, la proprietà top del corpo JSON imposta il numero di risposte da restituire.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
}

Usare la proprietà Score insieme alla logica di business per ottenere l'elenco delle risposte per visualizzare l'utenteUse the score property along with business logic to get list of answers to show user

Quando l'applicazione client, ad esempio una chat bot, riceve la risposta, vengono restituite le prime tre domande.When the client application (such as a chat bot) receives the response, the top 3 questions are returned. Utilizzare la proprietà score per analizzare la vicinanza tra i punteggi.Use the score property to analyze the proximity between scores. Questo intervallo di prossimità è determinato dalla logica di business.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": []
        }
    ]
}

Follow-up dell'applicazione client in caso di domande con punteggi similiClient application follow-up when questions have similar scores

L'applicazione client Visualizza le domande con un'opzione che consente all'utente di selezionare l'unica domanda che rappresenta la maggior parte della propria intenzione.Your client application displays the questions with an option for the user to select the single question that most represents their intention.

Quando l'utente seleziona una delle domande esistenti, l'applicazione client invia la scelta dell'utente come feedback usando l'API Train di QnA Maker.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. Questo feedback completa il ciclo di commenti e suggerimenti su Active Learning.This feedback completes the active learning feedback loop.

API TrainTrain API

Il feedback di apprendimento attivo viene inviato a QnA Maker con la richiesta POST dell'API Train.Active learning feedback is sent to QnA Maker with the Train API POST request. La firma 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}]}
Proprietà della richiesta HTTPHTTP request property NameName TipoType ScopoPurpose
Parametro di route URLURL route parameter ID Knowledge baseKnowledge base ID stringastring L'identificatore univoco globale della Knowledge Base.The GUID for your knowledge base.
Sottodominio personalizzatoCustom subdomain Nome della risorsa QnAMakerQnAMaker resource name stringastring Il nome della risorsa viene usato come sottodominio personalizzato per la QnA Maker.The resource name is used as the custom subdomain for your QnA Maker. Questa operazione è disponibile nella pagina impostazioni dopo la pubblicazione della Knowledge base.This is available on the Settings page after you publish the knowledge base. Viene elencato come host.It is listed as the host.
IntestazioneHeader Content-TypeContent-Type stringastring tipo di supporto del corpo inviato all'API.The media type of the body sent to the API. Il valore predefinito è: application/jsonDefault value is: application/json
IntestazioneHeader AutorizzazioneAuthorization stringastring la chiave endpoint (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).Your endpoint key (EndpointKey xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
Corpo postPost Body Oggetto JSONJSON object JSONJSON Il feedback di formazioneThe training feedback

Il corpo JSON ha diverse impostazioni:The JSON body has several settings:

Proprietà corpo JSONJSON body property TipoType ScopoPurpose
feedbackRecords arrayarray Elenco di commenti.List of feedback.
userId stringastring ID utente della persona che accetta le domande suggerite.The user ID of the person accepting the suggested questions. Il formato dell'ID utente è l'utente.The user ID format is up to you. Un indirizzo di posta elettronica, ad esempio, può essere un ID utente valido nell'architettura.For example, an email address can be a valid user ID in your architecture. facoltativo.Optional.
userQuestion stringastring Testo esatto della query dell'utente.Exact text of the user's query. Obbligatorio.Required.
qnaID numbernumber ID della domanda, disponibile nella risposta GenerateAnswer.ID of question, found in the GenerateAnswer response.

Un esempio di corpo JSON ha un aspetto simile al seguente:An example JSON body looks like:

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

Una risposta con esito positivo restituisce lo stato 204 e nessun corpo della risposta JSON.A successful response returns a status of 204 and no JSON response body.

Batch di molti record di commenti in una singola chiamataBatch many feedback records into a single call

Nell'applicazione sul lato client, ad esempio un bot, è possibile archiviare i dati, quindi inviare molti record in un singolo corpo JSON nella matrice di 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.

Un esempio di corpo JSON ha un aspetto simile al seguente: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
        }
    ]
}

Codice di esempio per bot FrameworkBot framework sample code

Il codice del Framework bot deve chiamare l'API di training, se la query dell'utente deve essere usata per l'apprendimento attivo.Your bot framework code needs to call the Train API, if the user's query should be used for active learning. Esistono due frammenti di codice da scrivere:There are two pieces of code to write:

  • Determinare se la query deve essere utilizzata per l'apprendimento attivoDetermine if query should be used for active learning
  • Invia una query all'API Train di QnA Maker per l'apprendimento attivoSend query back to QnA Maker's Train API for active learning

Nell' esempio Azure botsono state programmate entrambe le attività.In the Azure Bot sample, both of these activities have been programmed.

Codice C# di esempio per l'API Train con bot Framework 4. xExample C# code for Train API with Bot Framework 4.x

Il codice seguente illustra come inviare informazioni a QnA Maker con l'API Train.The following code illustrates how to send information back to QnA Maker with the Train API. Questo esempio di codice completo è disponibile in 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();
        }
    }
}

Codice node. js di esempio per l'API Train con bot Framework 4. xExample Node.js code for Train API with Bot Framework 4.x

Il codice seguente illustra come inviare informazioni a QnA Maker con l'API Train.The following code illustrates how to send information back to QnA Maker with the Train API. Questo esempio di codice completo è disponibile in 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);
}

L'apprendimento attivo viene salvato nella Knowledge base esportataActive learning is saved in the exported knowledge base

Quando l'app è abilitata per l'apprendimento attivo e si esporta l'app, la colonna SuggestedQuestions nel file TSV mantiene i dati di apprendimento attivi.When your app has active learning enabled, and you export the app, the SuggestedQuestions column in the tsv file retains the active learning data.

La colonna SuggestedQuestions è un oggetto JSON di informazioni su implicito, autosuggestede esplicito usersuggested feedback.The SuggestedQuestions column is a JSON object of information of implicit, autosuggested, and explicit, usersuggested feedback. Un esempio di questo oggetto JSON per una singola domanda di help inviata dall'utente è: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
            }
        ]
    }
]

È anche possibile usare l'API Scarica modifiche per esaminare queste modifiche, usando REST o uno degli SDK basati sul linguaggio:You can also use the download alterations API to review these alterations, using REST or any of the language-based SDKs:

Quando si reimporta questa app, l'apprendimento attivo continua a raccogliere informazioni e consigli per la Knowledge base.When you reimport this app, the active learning continues to collect information and recommend suggestions for your knowledge base.

Procedure consigliateBest practices

Per le procedure consigliate quando si usa l'apprendimento attivo, vedere Procedure consigliate.For best practices when using active learning, see Best practices.

Passaggi successiviNext steps