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 alle concepten in intenties probeert te trechteren. Probeer bijvoorbeeld geen Intentie Contoso annuleren te maken die alleen het doel van die specifieke actie heeft. 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 verdelen

Als het gaat om trainingsgegevens, probeert u uw schema goed in balans te houden. Het opnemen van grote hoeveelheden van één intentie en zeer weinig van een andere resulteert in een model dat is vooroordelen ten opzichte van bepaalde intenties.

Om dit scenario aan te pakken, moet u mogelijk de trainingsset omlaag instellen. Of u moet er misschien aan toevoegen. Als u downsample wilt uitvoeren, 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 casing en interpunctiediversiteit 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 utterances

  • 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 oorsprongsstad te onderscheiden, kan zijn dat het woord vaak 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.

De drempelwaarde geen score gebruiken

Als er te veel fout-positieven worden weergegeven, zoals out-of-context-utterances die als geldige intenties worden gemarkeerd, raadpleegt u de betrouwbaarheidsdrempel voor informatie over hoe dit van invloed is op deductie.

  • 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 vooraf samengesteld onderdeel toe waarmee Quantity.Number al alle getallen in utterances worden 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 onderdeel in uw trainingsgegevens voor alle nummers die bedoeld zijn om een tickethoeveelheid te zijn. 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 inschakelen voor Gegevenstransformatie inschakelen voor hoofdletters, waarmee de behuizing 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
      ...
    }
...

Overconfidence van adresmodel

Klanten kunnen de loraNorm-configuratieversie gebruiken als het model onjuist 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.

Sms verzenden 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 geselecteerde bereik is momenteel waaruit [-a,a] '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 spanten in uw invoer met een gekoppeld type verzenden. 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 onderdeelspanne verzonden.

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 spanten inspecteren die worden verzonden en experimenteren met het verwijderen van onderdelen, zodat alleen problematische onderdelen 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 met de naam Orchestrator orchestrating tussen een conversationele taal die app begrijpt met de naam CLU1 en een aangepaste vraag die een app beantwoordt 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 het begrip van gesprekstalen van de ene resource naar de andere kopiëren 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.
  • Brontaalresource.
  • Doeltaalresource waarnaar u deze wilt kopiëren.

Roep de API aan om de kopieeractie te autoriseren en deze later te verkrijgen accessTokens 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 nettolading.

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-utterances adresseringen

Klanten kunnen de zojuist bijgewerkte versie van de trainingsconfiguratie 2024-08-01-preview (voorheen 2024-06-01-preview) gebruiken als het model slechte kwaliteit heeft voor out-of-domain-utterances. 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 u ook redelijk goede kwaliteit InDomain voor utterances behoudt.

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 Geen-score voor de app (betrouwbaarheidsdrempel die topIntent is gemarkeerd als None) wanneer u deze trainingsconfiguratie gebruikt, moet worden ingesteld op 0. Deze instelling wordt gebruikt omdat deze nieuwe trainingsconfiguratie een bepaald gedeelte van de waarschijnlijkheden in het domein naar buiten domein toebedeelt, zodat het model niet ten onrechte te groot is voor utterances in het domein. Als gevolg hiervan zien gebruikers mogelijk iets minder betrouwbaarheidsscores voor uitingen in het domein in vergelijking met de configuratie van de prod-training.
  • 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 ten zeerste aan minimaal 25 utterances per intentie te gebruiken.