Condividi tramite


Procedure consigliate per Comprensione del linguaggio di conversazione

Attenersi alle linee guida seguenti per creare i migliori progetti possibili in Comprensione del linguaggio di conversazione.

Scegliere uno schema coerente

Uno schema è la definizione di finalità ed entità. Esistono differenti approcci da adottare nella definizione degli elementi da creare come finalità ed entità. Le domande da porsi sono:

  • Quali azioni o query si sta tentando di acquisire dall'utente?
  • Quali informazioni sono rilevanti per ogni azione?

Solitamente, è possibile considerare azioni e query come finalità, mentre le informazioni necessarie per soddisfare tali query sono entità.

Si supponga, ad esempio, di voler annullare le sottoscrizioni del cliente per vari prodotti offerti tramite il chatbot. È possibile creare una finalità Annulla con vari esempi, ad esempio "Annulla servizio Contoso", o "Interrompi addebito per la sottoscrizione di Fabrikam". In questo caso, l'intento dell'utente è annullare e il servizio Contoso o la sottoscrizione di Fabrikam sono le sottoscrizioni da annullare.

Per proseguire, creare un'entità per le sottoscrizioni. È quindi possibile modellare l'intero progetto per acquisire le azioni come finalità e usare le entità per riempire tali azioni. In questo modo, è possibile annullare qualsiasi elemento definito come entità, come ad esempio altri prodotti. È quindi possibile creare finalità per la sottoscrizione, il rinnovo e l'aggiornamento da usare per le sottoscrizioni e altre entità.

La progettazione dello schema precedente semplifica l'estensione delle funzionalità esistenti (annullamento, aggiornamento o sottoscrizione) verso nuove destinazioni tramite la creazione di una nuova entità.

Un ulteriore approccio consiste nel modellare le informazioni come finalità e le azioni come entità. Prendiamo lo stesso esempio per cui si consente ai clienti di annullare le sottoscrizioni tramite il chatbot.

È possibile creare una finalità per ogni sottoscrizione disponibile, come ad esempio Contoso, con espressioni quali "Annulla Contoso", "Interrompi addebito per i servizi Contoso" e "Annulla sottoscrizione Contoso." Si crea quindi un'entità per acquisire l'azione Annulla. È possibile definire entità diverse per ogni azione o consolidare le azioni come un'entità con un componente elenco per distinguere azioni aventi chiavi diverse.

Questa progettazione dello schema semplifica l'estensione di nuove azioni verso le destinazioni esistenti, aggiungendo nuove entità di azione o nuovi componenti di entità.

Assicurarsi di evitare di provare a incanalare tutti i concetti nelle finalità. Ad esempio, non provare a creare una finalità Annulla Contoso che ha solo lo scopo di un'azione specifica. Le finalità e le entità devono interagire per acquisire dal cliente tutte le informazioni necessarie.

Evitare di combinare progettazioni di schemi diversi. Non compilare la metà dell'applicazione con azioni come finalità e l'altra con informazioni come finalità. Per ottenere i risultati possibili, assicurarsi che sia coerente.

Bilanciare i dati per eseguire il training

Quando si tratta di dati di training, tentare di mantenere lo schema ben bilanciato. L’inclusione di grandi quantità di dati di una singola finalità e minori quantità di un’altra finalità comporta una distorsione del modello verso determinate finalità.

Per risolvere questo scenario, potrebbe essere necessario eseguire il sottocampionamento del set di training. Oppure potrebbe essere necessario aggiungerlo. Per eseguire il sottocampionamento, è possibile:

  • Eliminare una determinata percentuale dei dati di training in modo casuale.
  • Analizzare il set di dati e rimuovere voci duplicate sovrarappresentata, che è un modo più sistematico.

Per aggiungere al set di training, in Language Studio, nella scheda Etichettatura dati selezionare Suggerisci espressioni. Comprensione del linguaggio di conversazione invia quindi una chiamata ad Azure OpenAI per generare espressioni simili.

Screenshot che mostra un suggerimento per l'espressione in Language Studio.

È inoltre consigliabile ricercare "criteri" non previsti nel set di training. Ad esempio, verificare se il set di training per una determinata finalità è tutto in minuscolo o inizia con una frase specifica. In questi casi, il modello di cui si esegue il training potrebbe apprendere le distorsioni non previste nel set di training anziché eseguire la generalizzazione.

È consigliabile introdurre la diversità di maiuscole/minuscole e di punteggiatura nel set di training. Se si prevede la gestione delle variazioni da parte del modello, assicurarsi di disporre di un set di training che rifletta anche tale diversità. Ad esempio, includere alcune espressioni con in maiuscole/minuscole e altre tutte in lettere minuscole.

Etichettare in modo chiaro le espressioni

  • Assicurarsi che i concetti a cui fanno riferimento le entità siano ben definiti e separabili. Assicurarsi che sia possibile determinare facilmente le differenze in modo affidabile. In caso contrario, la mancanza di distinzione potrebbe indicare problemi anche da parte del componente appreso.

  • Se esiste una similarità tra le entità, assicurarsi di includere alcune caratteristiche dei dati che segnalino la differenza tra di esse.

    Ad esempio, se si ha creato un modello per prenotare i voli, un utente potrebbe usare un'espressione come "Voglio un volo da Boston a Seattle". La città di origine e la città di destinazione per tali espressioni dovrebbero essere simili. Un segnale per differenziare la città di origine potrebbe essere che la parola da che spesso la precede.

  • Assicurarsi di etichettare tutte le istanze di ogni entità sia nei dati di training che di test. Un approccio consiste nell'usare la funzione di ricerca per trovare tutte le istanze di una parola o frase all’interno dei dati così e verificare se queste sono etichettate correttamente.

  • Etichettare i dati di test sia per le entità che non dispongono del componente appreso sia per le entità che ne dispongono. Questa procedura consente di verificare l’accuratezza delle metriche di valutazione.

Usare il Training standard prima del Training avanzato

Il training standard è gratuito e veloce rispetto a quello avanzato. Consente di comprendere rapidamente l'effetto della modifica del set di training o dello schema durante la compilazione del modello. Una volta soddisfatti dello schema, è consigliabile usare il training avanzato per ottenere la migliore qualità possibile del modello.

Usare la funzionalità di valutazione

Nella compilazione di un'applicazione, spesso è utile rilevare gli errori in anticipo. In genere è consigliabile aggiungere un set di test quando si compila l'app. I risultati di training e valutazione sono utili per identificare gli errori o i problemi nello schema.

Componenti basati su Machine Learning e composizione

Per altre informazioni, vedere Tipi di componenti.

Usare la soglia di punteggio Nessuna

Se viene visualizzato un numero eccessivo di falsi positivi, ad esempio espressioni fuori contesto contrassegnate come finalità valide, vedere Soglia di confidenza per informazioni su come quest'ultima influisce sull'inferenza.

  • I componenti di entità non basate su Machine Learning, come elenchi ed espressioni regolari, sono per definizione non contestuali. Se vengono visualizzate entità elenco o espressioni regolari in posizioni non previste, provare a etichettare i sinonimi dell'elenco come componente basato su Machine Learning.
  • Per le entità, è possibile usare il componente appreso come componente "Obbligatorio" da limitare quando è necessario generare un'entità composta.

Si supponga, ad esempio, di disporre di un'entità denominata Quantità di biglietti che tenta di estrarre il numero di biglietti da riservare nella prenotazione dei voli per espressioni come "Prenota due biglietti per domani per il Cairo."

In genere, si aggiunge un componente predefinito per Quantity.Number che estrae già tutti i numeri inclusi nelle espressioni. Tuttavia, se l'entità è stata definita solo con il componente predefinito, vengono estratti anche altri numeri come parte dell'entità Quantità di biglietti, ad esempio per espressioni come "Prenotare due biglietti per domani per il Cairo alle ore 15:00".

Per risolvere questo problema, etichettare un componente appreso nei dati di training per tutti i numeri destinati a essere una quantità del biglietto. L'entità è quindi costituita da due componenti:

  • Componente predefinito che può interpretare tutti i numeri.
  • Componente appreso che consente di prevedere la posizione della quantità di biglietti all’interno di una frase.

Se è necessario usare il componente appreso, assicurarsi che Quantità di biglietti venga restituito solo quando il componente appreso esegue la previsione nel contesto corretto. Se è necessario usare anche il componente predefinito, è possibile assicurarsi che l'entità Quantità di biglietti restituita sia un numero nella posizione corretta.

Incoerenze del modello di indirizzo

Se il modello è eccessivamente sensibile alle piccole modifiche grammaticali, ad esempio maiuscole e minuscole o segni diacritici, è possibile modificare sistematicamente il set di dati direttamente in Language Studio. Per usare queste funzionalità, selezionare la scheda Impostazioni nel riquadro sinistro e individuare la sezione Impostazioni avanzate progetto.

Screenshot che mostra un esempio di impostazioni avanzate del progetto.

Innanzitutto, è possibile abilitare l'impostazione per Abilita trasformazione dei dati per maiuscole e minuscole, che normalizza l'uso di maiuscole e minuscole delle espressioni durante il training, il test e l'implementazione del modello. Se è stata eseguita la migrazione da LUIS, è possibile riconoscere che LUIS ha eseguito questa normalizzazione per impostazione predefinita. Per accedere alla funzionalità tramite l'API, impostare il parametro normalizeCasing su true. Vedere l'esempio seguente:

{
  "projectFileVersion": "2022-10-01-preview",
    ...
    "settings": {
      ...
      "normalizeCasing": true
      ...
    }
...

In seguito, è anche possibile abilitare l'impostazione per Abilitare l'aumento dei dati per i segni diacritici così da generare variazioni dei dati di training per le possibili variazioni diacritiche usate nel linguaggio naturale. Questa funzionalità è disponibile per tutte le lingue. È particolarmente utile per le lingue germaniche e slava, in cui gli utenti spesso scrivono parole usando caratteri inglesi classici anziché i caratteri corretti. Ad esempio, la frase "Passa al canale sportivo" in francese è "Accédez à la chaîne sportive". Quando la funzionalità è abilitata, nel set di dati di training viene inclusa anche la frase "Accedez a la chaine sportive" (senza caratteri diacritici).

Se si abilita questa funzionalità, aumenta il numero di espressioni del set di training. Per questo motivo, potrebbe essere necessario modificare le dimensioni dei dati di training di conseguenza. Il numero massimo di espressioni corrente dopo l'aumento è 25.000. Per accedere alla funzionalità tramite l'API, impostare il parametro augmentDiacritics su true. Vedere l'esempio seguente:

{
  "projectFileVersion": "2022-10-01-preview",
    ...
    "settings": {
      ...
      "augmentDiacritics": true
      ...
    }
...

Overconfidence del modello di indirizzo

I clienti possono usare la versione della configurazione del traning LoraNorm nel caso in cui il modello sia erroneamente ad attendibilità elevata. Un esempio di questo comportamento può essere simile allo scenario seguente in cui il modello stima la finalità errata con attendibilità del 100%. Questo punteggio rende l'impostazione del progetto della soglia di attendibilità non utilizzabile.

Testo Intento stimato Punteggio di attendibilità
"Chi ha costruito la Torre Eiffel?" Sports 1,00
" Come ti sembro oggi?" QueryWeather 1,00
"Ti auguro una buona serata." Alarm 1,00

Per risolvere questo scenario, usare la versione di configurazione 2023-04-15 che normalizza i punteggi di attendibilità. L'impostazione del progetto della soglia di attendibilità può quindi essere modificata per ottenere il risultato desiderato.

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2023-04-15",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

Dopo aver inviato la richiesta, è possibile tenere traccia dello stato di avanzamento del processo di training in Language Studio come di consueto.

Nota

È necessario ripetere il training del modello dopo aver aggiornato l'impostazione del progetto confidenceThreshold. Successivamente, è necessario pubblicare di nuovo l'applicazione per rendere effettiva la nuova soglia.

Normalizzazione del modello Versione del 15-04-2023

Con la versione del 15-04-2023 la comprensione del linguaggio di conversazione consente la normalizzazione nel livello di inferenza che non influisce sul training.

Il livello di normalizzazione normalizza i punteggi di attendibilità della classificazione in un intervallo limitato. L'intervallo attualmente selezionato è da [-a,a] dove "a" è la radice quadrata del numero di finalità. Di conseguenza, la normalizzazione dipende dal numero di finalità nell'applicazione. Se il numero di finalità è basso, il livello di normalizzazione ha un intervallo ridotto da usare. Con un numero elevato di finalità, la normalizzazione è più efficace.

Se la normalizzazione non è utile alle finalità fuori ambito, per quanto è possibile usare la soglia di attendibilità per escludere le espressioni di ambito, ciò potrebbe essere correlato al numero di finalità nell'applicazione. Prendere in considerazione l'aggiunta di altre finalità all'app. In alternativa, se si usa un'architettura orchestrata, è consigliabile unire le app che appartengono allo stesso dominio insieme.

Eseguire il debug di entità composte

Le entità sono funzioni che generano intervalli nell'input con un tipo associato. Uno o più componenti definiscono la funzione. È possibile contrassegnare i componenti a seconda delle necessità e decidere se abilitare l'impostazione Combina componenti. Nella combinazione di componenti, tutti gli intervalli che si sovrappongono vengono uniti in un unico intervallo. Se l'impostazione non viene abilitata, viene generato ogni singolo intervallo di componenti.

Per comprendere meglio il funzionamento dei singoli componenti, è possibile disabilitare l'impostazione e impostare ogni componente su Non obbligatorio. Questa impostazione consente di esaminare i singoli intervalli generati e provare a rimuovere i componenti in modo che vengano generati solo componenti problematici.

Valutare un modello usando più set di test

I dati in un progetto di comprensione del linguaggio di conversazione possono avere due set di dati: un set di test e un set di training. Per usare più set di test per valutare il modello, è possibile:

  • Assegnare ai set di test nomi diversi (ad esempio "test1" e "test2").
  • Esportare il progetto per ottenere un file JSON con relativi parametri e configurazione.
  • Usare il codice JSON per importare un nuovo progetto. Rinominare il secondo set di test desiderato su "test".
  • Eseguire il training del modello per effettuare la valutazione usando il secondo set di test.

Parametri personalizzati per le applicazioni di destinazione e le applicazioni figlio

Se si usano applicazioni orchestrate, è possibile inviare sostituzioni di parametri personalizzati per varie applicazioni figlio. Il campo targetProjectParameters consente agli utenti di inviare un dizionario che rappresenta i parametri per ogni progetto di destinazione. Si consideri, ad esempio, un'applicazione dell'agente di orchestrazione denominata Orchestrator che esegue l'orchestrazione tra un'applicazione di Comprensione del linguaggio conversazionale denominata CLU1 e un'applicazione di risposta alle domande personalizzata alle domande denominata CQA1. Se si desidera inviare un parametro denominato "top" all'applicazione di risposta alle domande, è possibile usare il parametro precedente.

curl --request POST \
   --url 'https://<your-language-resource>.cognitiveservices.azure.com/language/:analyze-conversations?api-version=2022-10-01-preview' \
   --header 'ocp-apim-subscription-key: <your subscription key>' \
   --data '{
     "kind": "Conversation",
     "analysisInput": {
         "conversationItem": {
             "id": "1",
             "text": "Turn down the volume",
             "modality": "text",
             "language": "en-us",
             "participantId": "1"
         }
     },
     "parameters": {
         "projectName": "Orchestrator",
         "verbose": true,
         "deploymentName": "std",
         "stringIndexType": "TextElement_V8",
"targetProjectParameters": {
            "CQA1": {
                "targetProjectKind": "QuestionAnswering",
                "callingOptions": {
                    "top": 1
                }
             }
         }
     }
 }'

Copiare progetti tra risorse di lingua

È spesso possibile copiare progetti di Comprensione del linguaggio di conversazione da una risorsa a un'altra usando il pulsante Copia in Language Studio. In alcuni casi potrebbe essere più semplice copiare i progetti usando l'API.

Innanzitutto, identificare:

  • Nome del progetto di origine.
  • Nome del progetto di destinazione.
  • Risorsa della lingua di origine.
  • Risorsa della lingua di destinazione, in cui si desidera copiare il progetto.

Chiamare l'API per autorizzare l'azione di copia e ottenere accessTokens per l'operazione di copia effettiva in un secondo momento.

curl --request POST \ 
  --url 'https://<target-language-resource>.cognitiveservices.azure.com//language/authoring/analyze-conversations/projects/<source-project-name>/:authorize-copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>' \ 
  --data '{"projectKind":"Conversation","allowOverwrite":false}' 

Chiamare l'API per completare l'operazione di copia. Usare la risposta ottenuta in precedenza come payload.

curl --request POST \ 
  --url 'https://<source-language-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<source-project-name>/:copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>\ 
  --data '{ 
"projectKind": "Conversation", 
"targetProjectName": "<target-project-name>", 
"accessToken": "<access-token>", 
"expiresAt": "<expiry-date>", 
"targetResourceId": "<target-resource-id>", 
"targetResourceRegion": "<target-region>" 
}'

Indirizzare espressioni out-of-domain

I clienti possono usare la versione della configurazione del training recentemente aggiornata 2024-08-01-preview (in precedenza 2024-06-01-preview) se il modello ha una qualità insufficiente nelle espressioni fuori dominio. Un esempio di questo scenario con la configurazione del training predefinita può essere simile all'esempio seguente in cui il modello ha tre finalità: Sports, QueryWeather e Alarm. Le espressioni di test sono fuori dominio e il modello le classifica come InDomain con un punteggio di attendibilità relativamente elevato.

Testo Intento stimato Punteggio di attendibilità
"Chi ha costruito la Torre Eiffel?" Sports 0.90
" Come ti sembro oggi?" QueryWeather 1,00
"Ti auguro una buona serata." Alarm 0.80

Per risolvere questo scenario, usare la versione di configurazione 2024-08-01-preview compilata specificamente per la risoluzione del problema, mantenendo al contempo una qualità sufficientemente elevata nelle espressioni InDomain.

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2024-08-01-preview",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

Dopo aver inviato la richiesta, è possibile tenere traccia dello stato di avanzamento del processo di training in Language Studio come di consueto.

Avvertenze:

  • Quando si usa questa configurazione del training, la soglia Nessun punteggio per l'app (soglia di attendibilità inferiore per cui topIntent è contrassegnato come None) deve essere impostata su 0. Questa impostazione è utilizzata in quanto questa nuova configurazione del training attribuisce una determinata parte delle probabilità in dominio al di fuori del dominio in modo che il modello non sia erroneamente di elevata attendibilità circa le espressioni in dominio. Di conseguenza, gli utenti potrebbero visualizzare punteggi di attendibilità leggermente ridotti per le espressioni in dominio rispetto alla configurazione del training di produzione.
  • Non è consigliabile usare questa configurazione del training per le app con solo due finalità, ad esempio IntentA e None.
  • Non è consigliabile usare questa configurazione del training per le app con un numero ridotto di espressioni per finalità. È vivamente consigliabile usare almeno 25 espressioni per finalità.