Delen via


Aanbevolen procedures voor het begrijpen van gesprekstalen

Gebruik de volgende richtlijnen om de best mogelijke projecten te maken in conversationele taalkennis.

Een consistent schema kiezen

Schema is de definitie van uw intenties en entiteiten. Er zijn verschillende benaderingen die u kunt gebruiken wanneer u definieert wat u moet maken als een intentie versus een entiteit. Stel uzelf de volgende vragen:

  • Welke acties of query's probeer ik vast te leggen van mijn gebruiker?
  • Welke stukjes informatie zijn relevant voor elke actie?

Doorgaans kunt u acties en query's beschouwen als intenties, terwijl de informatie die nodig is om aan deze query's te voldoen entiteiten zijn.

Stel dat u wilt dat uw klanten abonnementen opzeggen voor verschillende producten die u via uw chatbot aanbiedt. U kunt een annuleringsintentie maken met verschillende voorbeelden, zoals 'De Contoso-service annuleren' of 'Stop met het opladen van mij voor het Fabrikam-abonnement'. De bedoeling van de gebruiker is om te annuleren en de Contoso-service of het Fabrikam-abonnement zijn de abonnementen die ze willen annuleren.

Als u wilt doorgaan, maakt u een entiteit voor abonnementen. Vervolgens kunt u uw hele project modelleren om acties vast te leggen als intenties en entiteiten gebruiken om deze acties in te vullen. Met deze aanpak kunt u alles wat u definieert als entiteit annuleren, zoals andere producten. U kunt vervolgens intenties hebben voor het registreren, verlengen en upgraden die allemaal gebruikmaken van de abonnementen en andere entiteiten.

Met het voorgaande schemaontwerp kunt u eenvoudig bestaande mogelijkheden uitbreiden (annuleren, upgraden of registreren) naar nieuwe doelen door een nieuwe entiteit te maken.

Een andere benadering is het modelleren van de informatie als intenties en de acties als entiteiten. Laten we hetzelfde voorbeeld nemen van het toestaan van uw klanten om abonnementen via uw chatbot te annuleren.

U kunt een intentie maken voor elk abonnement dat beschikbaar is, zoals Contoso, met uitingen zoals 'Contoso annuleren', 'Stop met het opladen van contoso-services' en 'Het Contoso-abonnement annuleren'. Vervolgens maakt u een entiteit om de annuleringsactie vast te leggen. U kunt verschillende entiteiten definiëren voor elke actie of acties samenvoegen als één entiteit met een lijstonderdeel om onderscheid te maken tussen acties met verschillende sleutels.

Met dit schemaontwerp kunt u eenvoudig nieuwe acties uitbreiden naar bestaande doelen door nieuwe actie-entiteiten of entiteitsonderdelen toe te voegen.

Zorg ervoor dat u niet probeert om alle concepten in intenties onder te brengen. Probeer bijvoorbeeld geen Annuleer Contoso intentie te maken die alleen voor dat ene specifieke doel is. Intenties en entiteiten moeten samenwerken om alle vereiste gegevens van de klant vast te leggen.

U wilt ook voorkomen dat u verschillende schemaontwerpen combineert. Bouw niet de helft van uw toepassing met acties als intenties en de andere helft met informatie als intenties. Om de mogelijke resultaten te verkrijgen, moet u ervoor zorgen dat deze consistent is.

Trainingsgegevens balanceren

Als het gaat om trainingsgegevens, probeert u uw schema goed in balans te houden. Het opnemen van grote hoeveelheden van één intent en zeer weinig van een andere resulteert in een model dat vooringenomen is tegenover bepaalde intenten.

Om dit scenario aan te pakken, moet u mogelijk uw trainingsset verkleinen. Misschien moet u er aan toevoegen. Als u wilt downsamplen, kunt u het volgende doen:

  • Verwijder willekeurig een bepaald percentage van de trainingsgegevens.
  • Analyseer de gegevensset en verwijder oververtegenwoordigde dubbele vermeldingen. Dit is een systematischere manier.

Als u wilt toevoegen aan de trainingsset, selecteert u in Language Studio op het tabblad Gegevenslabeling de optie Uitingen voorstellen. Conversational Language Understanding verzendt een aanroep naar Azure OpenAI om vergelijkbare uitingen te genereren.

Schermopname van een uitingsuggestie in Language Studio.

U moet ook zoeken naar onbedoelde 'patronen' in de trainingsset. Kijk bijvoorbeeld of de trainingsset voor een bepaalde intentie allemaal kleine letters is of begint met een bepaalde woordgroep. In dergelijke gevallen kan het model dat u traint deze onbedoelde vooroordelen in de trainingsset leren in plaats van te generaliseren.

We raden u aan om diversiteit in hoofdlettergebruik en interpunctie in de trainingsset te introduceren. Als uw model variaties moet verwerken, moet u een trainingsset hebben die ook die diversiteit weerspiegelt. Neem bijvoorbeeld enkele uitingen op in de juiste behuizing en sommige in kleine letters.

Duidelijk labelen van uitingen

  • Zorg ervoor dat de concepten waarnaar uw entiteiten verwijzen goed zijn gedefinieerd en kunnen worden gescheiden. Controleer of u de verschillen op betrouwbare wijze kunt bepalen. Als u dat niet kunt, kan dit gebrek aan onderscheid erop wijzen dat het geleerde onderdeel ook problemen ondervindt.

  • Als er een overeenkomst is tussen entiteiten, moet u ervoor zorgen dat er een bepaald aspect van uw gegevens is dat een signaal biedt voor het verschil tussen deze entiteiten.

    Als u bijvoorbeeld een model hebt gebouwd om vluchten te boeken, kan een gebruiker een uiting gebruiken zoals 'Ik wil een vlucht van Boston naar Seattle'. De oorspronkelijke plaats en bestemmingsstad voor dergelijke uitingen zouden naar verwachting vergelijkbaar zijn. Een signaal om de oorsprongsstad te onderscheiden, kan zijn dat het woord van er vaak aan voorafgaat.

  • Zorg ervoor dat u alle exemplaren van elke entiteit labelt in zowel uw trainings- als testgegevens. Een benadering is om de zoekfunctie te gebruiken om alle exemplaren van een woord of woordgroep in uw gegevens te vinden om te controleren of ze correct zijn gelabeld.

  • Labeltestgegevens voor entiteiten die geen geleerd onderdeel hebben en ook voor de entiteiten die dat doen. Deze procedure helpt ervoor te zorgen dat uw metrische evaluatiegegevens nauwkeurig zijn.

Standaardtraining gebruiken vóór geavanceerde training

Standaardtraining is gratis en sneller dan geavanceerde training. Het kan u helpen snel inzicht te verkrijgen in het effect van het wijzigen van uw trainingsset of schema terwijl u het model bouwt. Nadat u tevreden bent met het schema, kunt u overwegen geavanceerde training te gebruiken om de beste modelkwaliteit te verkrijgen.

De evaluatiefunctie gebruiken

Wanneer u een app bouwt, is het vaak handig om fouten vroeg te ondervangen. Het is meestal een goede gewoonte om een testset toe te voegen wanneer u de app bouwt. Trainings- en evaluatieresultaten zijn handig bij het identificeren van fouten of problemen in uw schema.

Machine learning-onderdelen en -samenstelling

Zie Onderdeeltypen voor meer informatie.

Gebruik de drempelwaarde 'Geen score'

Als u te veel vals-positieven ziet, zoals uitingen buiten de context die als geldige intenties worden gemarkeerd, raadpleeg de betrouwbaarheidsdrempel voor informatie over hoe dit van invloed is op afleiding.

  • Niet-machine learning-entiteitsonderdelen, zoals lijsten en regex, zijn per definitie niet contextueel. Als u lijst- of regex-entiteiten op onbedoelde plaatsen ziet, kunt u proberen de lijst synoniemen te labelen als het machine learning-onderdeel.
  • Voor entiteiten kunt u het geleerde onderdeel als het vereiste onderdeel gebruiken om te beperken wanneer een samengestelde entiteit moet worden geactiveerd.

Stel dat u een entiteit hebt met de naam Ticket Quantity waarmee wordt geprobeerd het aantal tickets te extraheren dat u wilt reserveren voor boekingsvluchten, voor uitingen zoals 'Boek twee tickets morgen naar Cairo'.

Normaal gesproken voegt u een kant-en-klaar onderdeel toe waarmee Quantity.Number al alle getallen in uitingen wordt geëxtraheerd. Als uw entiteit echter alleen is gedefinieerd met het vooraf samengestelde onderdeel, worden ook andere nummers geëxtraheerd als onderdeel van de entiteit Tickethoeveelheid , zoals 'Boek twee tickets morgen naar Cairo om 15:00 uur'.

Om dit probleem op te lossen, labelt u een geleerd component in uw trainingsgegevens voor alle getallen die bedoeld zijn om een aantal tickets aan te geven. De entiteit heeft nu twee onderdelen:

  • Het vooraf gemaakte onderdeel dat alle getallen kan interpreteren.
  • Het geleerde onderdeel dat voorspelt waar de tickethoeveelheid zich in een zin bevindt.

Als u het geleerde onderdeel nodig hebt, moet u ervoor zorgen dat tickethoeveelheid alleen wordt geretourneerd wanneer het geleerde onderdeel dit in de juiste context voorspelt. Als u ook het vooraf samengestelde onderdeel nodig hebt, kunt u garanderen dat de entiteit geretourneerde tickethoeveelheid zowel een getal als de juiste positie heeft.

Inconsistenties van het adresmodel

Als uw model te gevoelig is voor kleine grammaticale wijzigingen, zoals hoofdletters of diakritische tekens, kunt u uw gegevensset systematisch rechtstreeks bewerken in Language Studio. Als u deze functies wilt gebruiken, selecteert u het tabblad Instellingen in het linkerdeelvenster en zoekt u de sectie Geavanceerde projectinstellingen .

Een schermopname met een voorbeeld van geavanceerde projectinstellingen.

Eerst kunt u de instelling Gegevenstransformatie inschakelen voor hoofdlettergebruik inschakelen, waarmee het hoofdlettergebruik van uitingen wordt genormaliseerd bij het trainen, testen en implementeren van uw model. Als u bent gemigreerd vanuit LUIS, herkent u mogelijk dat LUIS deze normalisatie standaard heeft uitgevoerd. Als u deze functie wilt openen via de API, stelt u de normalizeCasing parameter in op true. Zie het volgende voorbeeld:

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

Ten tweede kunt u ook de instelling inschakelen voor gegevensvergroting inschakelen voor diakritische tekens om variaties van uw trainingsgegevens te genereren voor mogelijke diakritische variaties die in natuurlijke taal worden gebruikt. Deze functie is beschikbaar voor alle talen. Het is vooral handig voor Duits- en Slavic-talen, waarbij gebruikers vaak woorden schrijven met klassieke Engelse tekens in plaats van de juiste tekens. De zin 'Navigeren naar het sportkanaal' in het Frans is bijvoorbeeld 'Accédez à la chaîne sportive'. Wanneer deze functie is ingeschakeld, wordt de woordgroep Accedez a la chaine sportief (zonder diakritische tekens) ook opgenomen in de trainingsgegevensset.

Als u deze functie inschakelt, neemt het aantal uitingen van uw trainingsset toe. Daarom moet u mogelijk de grootte van uw trainingsgegevens dienovereenkomstig aanpassen. Het huidige maximumaantal uitingen na augmentatie is 25.000. Als u deze functie wilt openen via de API, stelt u de augmentDiacritics parameter in op true. Zie het volgende voorbeeld:

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

Aanpakken van overmatige zelfverzekerdheid in adresmodellen

Klanten kunnen de LoraNorm-trainingsconfiguratieversie gebruiken als het model onterecht te zelfverzekerd is. Een voorbeeld van dit gedrag kan zijn als in het volgende scenario waarin het model de onjuiste intentie voorspelt met een betrouwbaarheid van 100%. Deze score maakt de instelling van het betrouwbaarheidsdrempelproject onbruikbaar.

Tekst Voorspelde intentie Betrouwbaarheidsscore
Wie heeft de Eiffeltoren gebouwd? Sports 1,00
"Zie ik er vandaag goed uit?" QueryWeather 1,00
"Ik hoop dat je een goede avond hebt." Alarm 1,00

Als u dit scenario wilt aanpakken, gebruikt u de 2023-04-15 configuratieversie waarmee betrouwbaarheidsscores worden genormaliseerd. De projectinstelling voor de betrouwbaarheidsdrempel kan vervolgens worden aangepast om het gewenste resultaat te bereiken.

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

Nadat de aanvraag is verzonden, kunt u de voortgang van de trainingstaak in Language Studio volgen zoals gebruikelijk.

Notitie

U moet uw model opnieuw trainen nadat u de confidenceThreshold projectinstelling hebt bijgewerkt. Daarna moet u de app opnieuw publiceren om de nieuwe drempelwaarde van kracht te laten worden.

Normalisatie in modelversie 2023-04-15

Met modelversie 2023-04-15 biedt gesprekstaalbegrip normalisatie in de deductielaag die geen invloed heeft op training.

De normalisatielaag normaliseert de classificatievertrouwensscores tot een beperkt bereik. Het momenteel geselecteerde bereik is vanaf [-a,a], waarbij 'a' de vierkantswortel is van het aantal intenties. Als gevolg hiervan is de normalisatie afhankelijk van het aantal intenties in de app. Als het aantal intenties laag is, heeft de normalisatielaag een klein bereik om mee te werken. Met een groot aantal intenties is de normalisatie effectiever.

Als deze normalisatie niet lijkt te helpen bij intenties die buiten het bereik vallen voor zover de betrouwbaarheidsdrempel kan worden gebruikt om uitingen buiten het bereik te filteren, kan dit betrekking hebben op het aantal intenties in de app. Overweeg om meer intenties toe te voegen aan de app. Als u een indelingsarchitectuur gebruikt, kunt u ook apps samenvoegen die tot hetzelfde domein behoren.

Fouten opsporen in samengestelde entiteiten

Entiteiten zijn functies die spanningen in uw invoer genereren met een gekoppeld type. Een of meer onderdelen definiëren de functie. U kunt indien nodig onderdelen markeren en u kunt bepalen of u de instelling Onderdelen combineren wilt inschakelen. Wanneer u onderdelen combineert, worden alle overlappende onderdelen samengevoegd tot één spanwijdte. Als de instelling niet wordt gebruikt, wordt elke afzonderlijke componentenreeks uitgezonden.

Als u beter wilt weten hoe afzonderlijke onderdelen presteren, kunt u de instelling uitschakelen en elk onderdeel instellen op Niet vereist. Met deze instelling kunt u de afzonderlijke segmenten inspecteren die worden uitgezonden en experimenteren met het verwijderen van componenten, zodat alleen problematische componenten worden gegenereerd.

Een model evalueren met behulp van meerdere testsets

Gegevens in een gesprekstaalkennisproject kunnen twee gegevenssets hebben: een testset en een trainingsset. Als u meerdere testsets wilt gebruiken om uw model te evalueren, kunt u het volgende doen:

  • Geef uw testsets verschillende namen (bijvoorbeeld 'test1' en 'test2').
  • Exporteer uw project om een JSON-bestand met de bijbehorende parameters en configuratie op te halen.
  • Gebruik de JSON om een nieuw project te importeren. Wijzig de naam van de tweede gewenste testset in 'test'.
  • Train het model om de evaluatie uit te voeren met behulp van uw tweede testset.

Aangepaste parameters voor doel-apps en onderliggende apps

Als u ingedeelde apps gebruikt, wilt u mogelijk aangepaste parameteroverschrijvingen verzenden voor verschillende onderliggende apps. Met targetProjectParameters het veld kunnen gebruikers een woordenlijst verzenden die de parameters voor elk doelproject vertegenwoordigt. Denk bijvoorbeeld aan een orchestrator-app genaamd Orchestrator die een verbinding tot stand brengt tussen een gesprekstaalbegrip-app met de naam CLU1 en een aangepaste vraag-en-antwoord-app met de naam CQA1. Als u een parameter met de naam 'top' naar de vraagvraag-app wilt verzenden, kunt u de voorgaande parameter gebruiken.

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

Projecten kopiëren tussen taalbronnen

Vaak kunt u conversational language understanding projecten van de ene resource naar de andere kopiëren met behulp van de knop Kopiëren in Language Studio. In sommige gevallen is het mogelijk eenvoudiger om projecten te kopiëren met behulp van de API.

Identificeer eerst het volgende:

  • Naam van bronproject.
  • Doelprojectnaam.
  • Brontaalhulpmiddel.
  • Doeltaalresource waarnaar u deze wilt kopiëren.

Roep de API aan om de kopieeractie te autoriseren en krijg accessTokens om later te gebruiken voor de werkelijke kopieerbewerking.

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

Roep de API aan om de kopieerbewerking te voltooien. Gebruik het antwoord dat u eerder hebt ontvangen als 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>" 
}'

Out-of-domain-uitingen aanpakken

Klanten kunnen de recent bijgewerkte versie van de trainingsconfiguratie 2024-08-01-preview (voorheen 2024-06-01-preview) gebruiken als het model van slechte kwaliteit is bij uitingen buiten het domein. Een voorbeeld van dit scenario met de standaardtrainingsconfiguratie kan zijn zoals in het volgende voorbeeld waarin het model drie intenties heeft: Sports, QueryWeatheren Alarm. De testuitingen zijn out-of-domain-utterances en het model classificeert deze als InDomain met een relatief hoge betrouwbaarheidsscore.

Sms verzenden Voorspelde intentie Betrouwbaarheidsscore
Wie heeft de Eiffeltoren gebouwd? Sports 0.90
"Zie ik er vandaag goed uit?" QueryWeather 1,00
"Ik hoop dat je een goede avond hebt." Alarm 0.80

Als u dit scenario wilt oplossen, gebruikt u de 2024-08-01-preview configuratieversie die speciaal is gebouwd om dit probleem op te lossen, terwijl ook de kwaliteit van de InDomain-uitingen redelijk goed blijft.

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

Nadat de aanvraag is verzonden, kunt u de voortgang van de trainingstaak in Language Studio volgen zoals gebruikelijk.

Waarschuwingen:

  • De drempelwaarde voor de Geen-score voor de app (de betrouwbaarheidsdrempel waaronder topIntent wordt aangemerkt als None) bij gebruik van deze trainingsconfiguratie, moet op 0 worden ingesteld. Deze instelling wordt gebruikt omdat deze nieuwe trainingsconfiguratie een bepaald gedeelte van de waarschijnlijkheden in het domein toewijst aan het externe domein, zodat het model niet ten onrechte te zelfverzekerd is over uitingen in het domein. Als gevolg hiervan zien gebruikers mogelijk iets lagere zekerheidsscores voor in-domain-uitingen in vergelijking met de prod-trainingsconfiguratie.
  • We raden deze trainingsconfiguratie niet aan voor apps met slechts twee intenties, zoals IntentA en None, bijvoorbeeld.
  • We raden deze trainingsconfiguratie niet aan voor apps met een laag aantal uitingen per intentie. We raden sterk aan om minimaal 25 uitspraken per intentie te gebruiken.