Bruke eksterne talegrammatikker

For Interactive Voice Response-programmer (IVR) og bredere talegjenkjenningsoppgaver for taleprogrammer gir en begrenset liste eller grammatikkbasert gjenkjenning betydelige fordeler. Det overgår langt tradisjonell semantisk-basert talegjenkjenning som brukes i moderne tale-til-tekst (STT) AI-motorer når det gjelder nøyaktighet, ytelse og kostnader. Denne ytelsesøkningen er fordi grammatikkbasert gjenkjenning kan begrense gjenkjenningsutdataene til et forhåndsdefinert sett med regler, noe som styrker nøyaktigheten.

Grammatikker følger spesifikasjonen for grammatikk for talegjenkjenning (SRGS), som beskrevet i W3C-spesifikasjonen. Når en forespørsel kommer inn i motoren, konverterer den muntlig lyd («ytringer») til tekst. Motoren sammenligner deretter den gjenkjente teksten med grammatikken og eventuelle tilknyttede artefakter, for eksempel uttaleleksikoner. Denne prosessen gir enten en litteral transkripsjon eller en tolkning som grammatikken begrenser til informasjonen i grammatikken. Ekstra logikk, for eksempel ECMAScript innebygd i grammatikken, kan ytterligere begrense tolkningen.

Begrenset talegjenkjenning er ideell for:

  • Gjenkjenne begrensede lister (adresser, aksjekoder, postnumre, avdelingsnavn og lignende).

  • Alfanumerisk strenggjenkjenning (sporingsnumre, kontonumre, bekreftelseskoder og slikt).

    • Inkludert å ha posisjonsbegrensninger. De to første tegnene i medlems-ID starter for eksempel med AN, FD, NT. Et annet eksempel på posisjonsbegrensninger er et kjøretøyidentifikasjonsnummer.
  • Alfanumerisk eller siffergjenkjenning med kontrollsummer eller lignende begrensninger. Kredittkortnumre der det for eksempel er en Luhn-sjekksum.

  • Regisserte dialogboksprogrammer der bestemte ord eller uttrykk skal uttales.

Utvikle talegrammatikk

Skriv begrensede tale grammatikker ved hjelp av Grammar XML (GrXML). Som alle XML-dokumenter må en grammatikkfil begynne med en topptekst som angir bestemte egenskaper for grammatikken. Hovedteksten i en grammatikkfil består av grammatikkregler som definerer de talte ordene som gjenkjennes av grammatikken, og de tilsvarende variable verdiene som de gjenkjente elementene returnerer.

Topptekst for grammatikkfil

Toppteksten i en grammatikkfil består av XML-deklarasjonen, og <grammar> elementet som angir dokumentspråket, roten og navneområdet.

<?xml version="1.0" encoding="UTF-8" ?>

<grammar xmlns="http://www.w3.org/2001/06/grammar"

version="1.0" xml:lang="en-US" root="YesNo"

tag-format="swi-semantics/1.0">

XML-deklarasjon og kodingstype

Det første elementet i toppteksten er alltid XML-deklarasjonen. Dette elementet angir versjonen av XML som brukes i dokumentet (1.0 eller 1.1). Den angir også kodingen som gjelder for dokumentet, som bestemmer språkene som kan eller ikke kan brukes.

Versjonen og kodingen er obligatoriske attributter. Bruk hvilken som helst koding som passer til innstillingene dine (for eksempel datamaskinoppsettet, tekstbehandlingsprogrammet og så videre). Den begrensede talegjenkjenningsmotoren bryr seg ikke om hvilken koding du bruker.

En kort liste over vanlige kodinger for ulike språk vises i tabellen nedenfor:

Encoding Description
ISO-8859-1 Latin-1. Brukes for engelsk, fransk, tysk og spansk.
UTF-8 Brukes for alle språk.
UTF-16 Brukes for alle språk.
Big5 Brukes for kantonesisk (ce-HK).
GB Brukes for Mandarin-språk (zh-TW).
Shift-JIS og EUC-JP Brukes for japansk.
KSC og EUC-KR Brukes for koreansk språk.

De fleste språk kan representeres i mer enn én koding.

Ved kjøring konverterer systemet automatisk grammatikkfilkodingen til UTF-16-format ved hjelp av internasjonale komponenter for Unicode-biblioteker (ICU). Det offisielle nettstedet til Unicode-konsortiet er http://site.icu-project.org/.

Språk, navneområde og semantisk merkeformat

Det andre elementet i toppteksten <grammar> er elementet, der attributtene angir standardinformasjon for dokumentet. De nødvendige attributtene er:

  • xml:lang: Angir identifikatoren for standardspråket for menneskelig språk som skal brukes, som definert i RFC-dokumentet (Request For Comments) rfc 3066 på IETF-nettstedet.

  • Microsoft støtter et bredt spekter av språk. Språket du velger, må være kompatibelt med typen grammatikkkoding.

  • version: Angir versjonen av GrXML (1.0).

  • xmlns: Angir grammatikknavneområdet. For GrXML-grammatikker er denne betegnelsen alltid http://www.w3.org./2001/06/grammar.

  • tag-format: Definerer formatet som brukes for skript i <tag> elementer i hoveddelen av grammatikken for å tilordne verdier.

Kodeformatet må være én av disse strengene:

Verdi Format av semantiske etiketter
swi-semantics/1.0 Kodesyntaks (brukes hvis kodeformat ikke er definert). Denne syntaksen kalles swi syntax (for SpeechWorks International).
semantikk/1.0 Syntaks for W3C-script-tag.
semantikk/1,0-litteraler Syntaks for W3C-strenglitteraler.

Bemerkning

  • Kort tatt er ikke attributtet for kodeformat nødvendig hvis grammatikken <tag> ikke bruker elementet. De fleste grammatikker bruker <tag> imidlertid til å tilordne verdier, så Microsoft anbefaler på det sterkeste at du angir merkeformatet.

  • Pek alltid GrXML-attributter og elementer, for eksempel xmlns, til navneområdet <http://voicexml.site.com/grammar>.

Ordbøker

I noen tilfeller kan det hende at grammatikken må inneholde ord eller uttrykk som den begrensede talegjenkjenningsmotoren ikke kan analysere normalt. For eksempel kan et navn sies og staves annerledes, som byen "Worcester", som kan uttales "wih-sta."

<lexicon> Bruk elementet til å importere ordlister som tilordner ytringer til samsvarende tekst i grammatikkfilen.

Hovedtekst for grammatikkfil

Hoveddelen av en grammatikkfil inneholder reglene som faktisk definerer grammatikken: de talte ordene og uttrykkene som gjenkjennes, og verdiene som skal returneres til hovedprogrammet for hvert gjenkjent element.

Regler

Hovedteksten i en grammatikkfil består av regler som er definert ved hjelp av GrXML-elementet <rule> . Hver regel har en unik identifikator. Hver regel viser ordene og uttrykkene den gjenkjenner som tekst i et <item> element eller <token> element. Disse elementene kan være nestet i andre GrXML-elementer:

  • Elementet <one-of> presenterer en liste over akseptable alternativer, og bare ett alternativ kreves for å aktivere regelen.

  • Elementet <ruleref> refererer til en annen regel, om en underrutin.

  • Elementet <tag> angir handlinger som skal utføres eller verdier som skal tilordnes til en variabel. Det kan inneholde et skript som er skrevet på kodeformatspråket.

Når brukeren uttaler et ord eller uttrykk som regelen dekker, utfører regelen handlingene, verditilordningene eller annen kode som er definert for denne ytringen.

Rotregel

Rotregelen er den første regelen i filen, med mindre toppteksten angir noe annet. Den fungerer som standardregel for op-nivå. Når grammatikken refereres til uten å angi regelen som skal slås opp, er denne rotregelen den første som blir konsultert.

Regelomfang

Tilordne hver regel i hoveddelen av en grammatikkfil som et omfang. Omfanget angir om du kan referere til regelen uavhengig av eksterne filer (offentlig) eller bare av en annen regel innenfor samme grammatikk (privat). Alle regler er private som standard, med mindre du definerer dem som offentlige.

Når regelen er offentlig, kan du bruke ID-attributtet som anker for referanser fra andre dokumenter. Vurder for eksempel følgende syntaks:

<grammar src="../grammars/universals.grxml#YesNo"/>

Når du aktiverer dette grammatikkelementet, refererer det direkte til den offentlige «YesNo»-regelen i universals.grxml-filen , uavhengig av om det er filens rotregel.

Bemerkning

Rotregelen for en grammatikkfil kan være privat. Denne regelen kan ikke refereres uavhengig av hverandre. Den brukes imidlertid som standard som inngangspunkt til grammatikken når du aktiverer selve grammatikkfilen.

Trekke ut mening og returnere resultater

Bemerkning

Nøkkelen SWI_meaning skal inneholde informasjonen som returneres til den stemmeaktiverte agenten som opererer i Copilot Studio.

Nøkkelen SWI_meaning inneholder den semantiske betydningen av et gjenkjent uttrykk. Du kan angi den kun for rotregelen. Denne nøkkelen er inkludert i swirec_extra_nbest_keys listen som standard, slik at den vises i XML-resultatet hvis grammatikken angir denne nøkkelen.

SWI_meaning filtrerer ut overflødige svar, slik at oppføringer på den n-beste listen er tydelige. Å eliminere redundans forbedrer tillitspoeng og nytten av n-bestelisten.

Når et gjenkjent uttrykk ligner på et annet i grammatikken, har det ofte en lav konfidenspoengsum, fordi den begrensede talegjenkjenningsmotoren er usikker på hvilket uttrykk som er riktig. Når du bruker SWI_meaning riktig, grupperer den begrensede talegjenkjenningsmotoren overflødige tolkninger i samme spor på den n-beste listen. I eksemplet SWI_meaning nedenfor settes det til «direkte anrop hjem» om det gjenkjente uttrykket er «direkte anrop hjem» eller «send anropene mine hjem».

Uten SWI_meaningkan grammatikken produsere følgende n-beste liste:

N Tekst
1 diriger anropene mine til biltelefonen min
2 direkte anrop til bilen min
3 send anrop hjem
4 Videresend anropene mine til kontoret
5 Sende samtalene mine til kontoret
6 direkte anrop til hjemmet mitt

Når du bruker SWI_meaning, ordner den begrensede talegjenkjenningsmotoren den n-beste listen etter betydningen av tolkningen i stedet for det nøyaktige uttrykket som snakkes, slik at oppføringer på den n-beste listen er tydelige:

N Tekst Toppnivå SWI_meaning-nøkkel
1 diriger anropene mine til biltelefonen min Direkte anrop til bil
direkte anrop til bilen min Direkte anrop til bil
2 send anrop hjem direkte anrop hjem
direkte anrop til hjemmet mitt direkte anrop hjem
3 Videresend anropene mine til kontoret Direktekall fungerer
Sende samtalene mine til kontoret Direktekall fungerer

Den begrensede talegjenkjenningsmotoren angir SWI_meaning automatisk, selv om du ikke eksplisitt angir det i et skript i grammatikken.

Hvis du ikke eksplisitt definerer SWI_meaning roten, konstrueres den ved å sette sammen alle nøklene som er definert i roten og verdiene. Denne konstruksjonen gjelder imidlertid ikke for noen nøkler som begynner med SWI_, for eksempel SWI_literal. Nøkkel-/verdiparene sorteres først alfabetisk. Begrunnelsen er at når det gjelder programmet, er settet med nøkler som returneres, setningens betydning.

Hvis det ikke finnes noen nøkler, avhenger resultatene av om du bruker SISR- eller SWI-semantikk. Med SISR SWI_meaning er ikke nøkkelen angitt hvis det ikke er noen nøkler. Derimot, med SWI-semantikk, SWI_meaning er satt til følgende:

{SWI_literal:<literal>}

Hvis SWI_meaning det er et objekt, konverteres det til en strengpresentasjon.

Selv om programmet har tilgang til SWI_meaningdet, bruker det oftere andre nøkkel-/verdipar som er definert spesielt for det.

Hoste talekonfigurasjoner via Azure Storage

Copilot Studio støtter begrenset talegjenkjenning gjennom tale grammatikker. Det støtter imidlertid ikke direkte redigering, testing eller vert for disse grammatikkene. Bruk Microsoft Azure Storage for å opprette en sikker og pålitelig tilkobling mellom den stemmeaktiverte agenten og grammatikk-lagringen.

Konfigurere en Azure-lagringskonto

Opprett en Azure-lagringskonto. Sørg for at abonnementet, ressursgruppen, området og ressursnavnet til den nye lagringskontoen følger organisasjonens policyer. Bruk følgende innstillinger:

  • Velg Azure Blob Storage eller Azure Data Lake Storage Gen 2 forPrimærtjeneste.

  • Velg Premium for ytelsen.

Finn ut mer i Opprett en Azure-lagringskonto.

Konfigurere lagringsbeholderen

Bruk statisk nettsted som lagringsbeholder for de opplastede grammatikkfilene. Lagringsbeholderen inneholder det primære endepunktet og det sekundære endepunktet for nettstedet.

Når du har lastet opp grammatikkfilen, velger du filen fra katalogen for å vise egenskapene og detaljene for filen. Lagre URL-adressen for filen, som skal være i følgende format:

https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}

Finn ut mer i Opprett en beholder.

Godkjenne den begrensede talegjenkjenningsmotoren

For at begrenset talegjenkjenning skal fungere i en stemmeaktivert agent, må systemet godkjennes ved hjelp av lagringskontoen som ble opprettet i forrige trinn som en klarert plassering. Denne godkjenningen krever rollen Lagringsblob-dataleser.

Finn ut mer i Tilordning Azure roller ved hjelp av Azure-portalen.

Logg på Azure-portalen, åpne en Azure Cloud Shell-økt, og kjør følgende kommando for å opprette en avgrenset tjenestekontohaver for talegjenkjenningsmotor i leieren.

az ad sp create --id e0e7bef0-777c-40ef-86aa-79d83ba643c7

Bemerkning

Når du søker etter tjenestekontohaveren, ser du at den inneholder NRaaS i navnet.

Bruk avgrenset tale i Copilot Studio

Opprette en ekstern enhet

Du kan tenke på en enhet i Copilot Studio som en informasjonsenhet som representerer en bestemt type ekte emne. Eksempel: et telefonnummer, et postnummer, en poststed eller til og med navnet på en person. Ved hjelp av enheter kan en agent gjenkjenne relevant informasjon fra en brukerinndata og lagre den til senere bruk. I dette scenarioet utfører en begrenset tale grammatikk gjenkjenningen.

Bruk eksterne enheter til å referere til tale grammatikk. Hvis du vil opprette en ekstern enhet, åpner du den stemmeaktiverte agenten og går til Innstillinger-enheter>Legg til en enhet>Registrer>en ekstern enhet.

Bemerkning

Når du konstruerer enheten, bruker du enten en global eller en systemvariabel , og ikke en miljøvariabel . Hvis du må bruke en miljøvariabel, oppretter du en global variabel som tilordner den verdien til miljøvariabelen. Deretter kan denne globale variabelen brukes i grammatikk ulr for referanse.

Angi følgende informasjon:

  • Navn: URL-adresse for grammatikk i form av https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true

    Bemerkning

    URL-en skiller mellom store og små bokstaver.

Standardgjenkjenningsmodus er Bare tale. Hvis du vil ha alternative grammatikkkonfigurasjoner, kan du se følgende tabell:

Type Spørringsparameter Eksempel
Bare tale Ingen https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true
DTMF &mode=dtmf https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true&mode=dtmf
Talestyring eller DTMF
(Samme grammatikkfil)
&mode=speechdtmf https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true&mode=speechdtmf
Tale eller DTMF (forskjellige grammatikfiler) &mode=speechdtmf&dtmfgrammar={grammarURL} https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true&mode=speechftmf&dtmfgrammar=https://{resourceName}.blob.core.windows.net/\$web/{DTMFgrammarFileName}

Bemerkning

URL-adresser kan også inneholde direkte variabelnavn i Copilot Studio.

Anta for eksempel at det finnes to identiske sett med grammatikker, ett for engelsk og én for spansk, og at hver av dem er lagret i en annen underkatalog. Den flerspråklige agenten skal kunne bruke de engelske grammatikkene når du snakker på engelsk og på samme måte på spansk. I dette tilfellet vil url-adressen for grammatikk være: {Env.BaseURL}/common/**{System.User.Language}**/{grammarFileName}?

Hvor System.User.Language er en_US eller es_US og endres når språket bytter i agenten din.

  • Beskrivelse: En enkel beskrivelse av grammatikken, som velgeren på lerretet refererer til som enhetsnavn. For eksempel «kredittkortnummer».

  • Datatype: Velg postdatatypen , og definer skjemaet for de forventede kodene som svar. Hvis for eksempel grammatikken returnerer SWI_meaning og by, ser Record-skjemaet slik ut:

    kind: Record
    properties:
      city: String
      SWI_meaning: String
    

Når du har valgt Lagre, vises enheten i listen. Gå til en spørsmålsnode i redigeringslerretet. Akkurat som med tradisjonelle enheter, velger du den eksterne enheten (knyttet til en grammatikk) som du vil at agenten skal gjenkjenne som et resultat av brukerens svar på ledeteksten.

Kjøretidsvirkemåte

Når en stemmeaktivert agent kjører og støter på logikken som bruker en ekstern grammatikk, kommer den stemmeaktiverte agenten ut til Azure-lagringskontoen og henter grammatikken for tolkning. Agenten samsvarer deretter med det brukeren sa mot begrensningen som brukes i grammatikken. Hvis et treff lykkes, returnerer systemet svaret i postvariabelen, i henhold til skjemaet som er definert i den eksterne enheten.

Lerretslogikk

Resultatet som lagres i nodens variabel, er alltid en posttype som definert i skjemaet til den eksterne enheten. Forfattere kan bruke denne postvariabelen til å få tilgang til nøkler som definert i skjemaet, for eksempel variableName.SWI_meaning eller variableName.city gjennom punkt notasjon.

Feilsøking

Feilkoder

Feil Definisjon
400 Ugyldig forespørsel
401 Uautorisert
403 Forbudt
404 Ingen tale
408 Ingen tidsavbrudd for inndata
418 Tidsavbrudd for økt
419 Ingen aktive ressurser – mangler grammatikk
500 Intern feil – rapporter til Microsoft i en støtteforespørsel

SWI_Literal

For mange grammatikker som fungerer med den begrensede talegjenkjenningsmotoren SWI_Literal , returnerer funksjonen den litterale setningen brukeren uttalte, ikke det tolkede resultatet. Logg denne verdien som en av utdataene i Copilot Studio for å hjelpe deg med feilsøking.

Kjente begrensninger

Løsningen har følgende begrensninger:

  • Maksimal størrelse på den individuelle grammatikkfilen, som for øyeblikket er begrenset til 100 MB.
  • Variabel passering støttes ikke.
  • Lagringskontoen må være plassert i samme leier som agenten.
  • Størrelsen på URL-adressen kan ikke overskride 500 tegn.
  • Bare endepunkter for Azure-lagringskonto er tillatt.
  • Delgrammarer kan bare driftes i samme lagringskonto (ved hjelp av samme FPA for godkjenning).
  • Sikker XML-parser (det vil si at DTD ikke er tillatt, og må validere mot SRGS/SISR-skjema).
  • Bare NLSML-utdataformat støttes internt.
  • Den eldre swirec_simple_result_key paramen har ingen effekt, og alle koder returneres.

Microsoft Dynamics-tjenesten behandler begrensede talegjenkjenningssystemer. Ved å bruke denne opplevelsen godtar du dynamics-vilkårene.