Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Voor IVR-toepassingen (Interactive Voice Response) en bredere spraakherkenningstaken voor spraaktoepassingen biedt een beperkte lijst of op grammatica gebaseerde herkenning aanzienlijke voordelen. Het presteert veel beter dan de traditionele semantische spraakherkenning, die wordt gebruikt in moderne STT-AI-engines (spraak-naar-tekst) op het gebied van nauwkeurigheid, prestaties en kosten. Deze prestatieverbetering ontstaat doordat op grammatica gebaseerde herkenning de herkenningsuitvoer kan beperken tot een vooraf gedefinieerde set regels. Dit vergroot de nauwkeurigheid.
Grammatica's voldoen aan de SRGS (Speech Recognition Grammar Specification), zoals beschreven in de W3C-specificatie. Wanneer een aanvraag in de engine binnenkomt, wordt gesproken audio ('uitingen') geconverteerd naar tekst. De engine vergelijkt vervolgens de herkende tekst met de grammatica en eventuele bijbehorende artefacten, zoals uitspraaklexicons. Dit proces biedt een letterlijke transcriptie of een interpretatie die door de grammatica wordt beperkt tot de informatie die daarin is opgenomen. Extra logica, zoals ECMAScript ingebouwd in de grammatica, kan de interpretatie verder verfijnen.
Beperkte spraakherkenning is ideaal voor:
Beperkte lijsten herkennen (adressen, aandelentickers, postcodes en afdelingsnamen en dergelijke).
Alfanumerieke tekenreeksherkenning (volgnummers, accountnummers, bevestigingscodes en dergelijke).
- Inclusief positionele beperkingen. De eerste twee tekens van de lid-id beginnen bijvoorbeeld met AN, FD, NT. Een ander voorbeeld van positionele beperkingen is een voertuigidentificatienummer.
Alfanumerieke of cijferherkenning met controlesommen of soortgelijke beperkingen. Bijvoorbeeld creditcardnummers met een Luhn-controlesom.
Gerichte dialoogvenstertoepassingen, waarbij specifieke woorden of zinnen moeten worden uitgesproken.
Spraakgrammatica's creëren
Beperkte spraak grammatica's schrijven met behulp van Grammar XML (GrXML). Net als elk XML-document moet een grammaticabestand beginnen met een header, die bepaalde kenmerken van de grammatica aangeeft. De hoofdtekst van een grammaticabestand bestaat uit grammaticaregels waarmee de gesproken woorden worden gedefinieerd die worden herkend door de grammatica en de bijbehorende variabele waarden die door de herkende items worden geretourneerd.
Header van grammaticabestand
De header in een grammaticabestand bestaat uit de XML-declaratie en het element <grammar>, dat de documenttaal, hoofdmap en naamruimte opgeeft.
<?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-declaratie en coderingstype
Het eerste element in de header is altijd de XML-declaratie. Dit element geeft de XML-versie op die in het document wordt gebruikt (1.0 of 1.1). Ook wordt de codering opgegeven die van toepassing is op het document, waarmee wordt bepaald welke talen wel of niet kunnen worden gebruikt.
De versie en codering zijn vereiste kenmerken. Gebruik alle coderingen die geschikt zijn voor uw voorkeuren (bijvoorbeeld de installatie van uw computer, de toepassing voor tekstverwerking, enzovoort). De engine voor beperkte spraakherkenning geeft niet aan welke codering u gebruikt.
In de volgende tabel ziet u een korte lijst met typische coderingen voor verschillende talen:
| Encoding | Description |
|---|---|
| ISO-8859-1 | Latin-1. Wordt gebruikt voor Engels, Frans, Duits en Spaans. |
| UTF-8 | Wordt gebruikt voor alle talen. |
| UTF-16 | Wordt gebruikt voor alle talen. |
| Big5 | Wordt gebruikt voor Kantonees (ce-HK). |
| GB | Wordt gebruikt voor Mandarijn (zh-TW). |
| Shift-JIS en EUC-JP | Wordt gebruikt voor Japans. |
| KSC en EUC-KR | Wordt gebruikt voor Koreaans. |
De meeste talen kunnen in meer dan één codering worden weergegeven.
Tijdens runtime converteert het systeem automatisch de codering van grammaticabestanden naar UTF-16-indeling met behulp van de ICU-bibliotheken (International Components for Unicode). De officiële website van het Unicode-consortium is http://site.icu-project.org/.
Taal-, naamruimte- en semantische code-indeling
Het tweede element in de header is het element <grammar>, waarvan de kenmerken standaardinformatie voor het document opgeven. De vereiste kenmerken zijn:
xml:lang: Hiermee geeft u de id op voor de standaard menselijke taal die moet worden gebruikt, zoals gedefinieerd in het RFC-document RFC 3066 op de IETF-webpagina.Microsoft ondersteunt een breed scala aan talen. De taal die u kiest, moet compatibel zijn met het coderingstype grammatica.
version: hiermee geeft u de versie van GrXML (1.0).xmlns: wijst de naamruimte van de grammatica aan. Voor GrXML-grammatica's is deze aanduiding altijdhttp://www.w3.org./2001/06/grammar.tag-format: definieert de indeling die wordt gebruikt voor scripts binnen<tag>-elementen in de hoofdtekst van de grammatica, om waarden toe te wijzen.
De tagindeling moet een van deze tekenreeksen zijn:
| Waarde | Opmaak van semantische codes |
|---|---|
| swi-semantics/1.0 | Codesyntaxis (gebruikt als code-indeling niet is gedefinieerd). Deze syntaxis staat bekend als swi syntax (voor SpeechWorks International). |
| semantics/1.0 | W3C-scriptcodesyntaxis. |
| semantics/1.0-literals | Codesyntaxis van letterlijke W3C-reeksen. |
Opmerking
Strikt genomen is het kenmerk code-indeling niet vereist als uw grammatica het element
<tag>niet gebruikt. De meeste grammatica's gebruiken<tag>echter om waarden toe te wijzen, dus Microsoft raadt u ten zeerste aan de tag-indeling op te geven.Wijs Altijd GrXML-kenmerken en -elementen aan, zoals
xmlns, naar de naamruimte<http://voicexml.site.com/grammar>.
Woordenboeken
In sommige gevallen moet de grammatica mogelijk woorden of zinnen bevatten, die niet normaal kunnen worden geparseerd door de engine voor beperkte spraakherkenning. Een naam kan bijvoorbeeld anders worden gezegd en anders gespeld, zoals de stad 'Worcester', die kan worden uitgesproken als 'wih-sta'.
Gebruik het <lexicon> element om woordenlijsten te importeren die uitingen toewijzen aan overeenkomende tekst in het grammaticabestand.
Hoofdtekst van grammaticabestand
De hoofdsectie van een grammaticabestand bevat de regels waarmee de grammatica wordt gedefinieerd: de gesproken woorden en zinnen die moeten worden herkend en de waarden die moeten worden geretourneerd naar de hoofdtoepassing voor elk herkend item.
Regels
De hoofdtekst van een grammaticabestand bestaat uit regels die zijn gedefinieerd met behulp van het GrXML-element <rule> . Elke regel heeft een unieke id. Elke regel bevat de woorden en zinnen die worden herkend als tekst binnen een <item>-element of <token>-element. Deze elementen kunnen worden genest binnen andere GrXML-elementen:
Het
<one-of>element bevat een lijst met acceptabele alternatieven en er is slechts één alternatief vereist om de regel te activeren.Het element
<ruleref>verwijst naar een andere regel, met betrekking tot een subroutine.Het
<tag>element geeft acties op die moeten worden uitgevoerd of waarden die moeten worden toegewezen aan een variabele. Het kan een script bevatten dat is geschreven in de tagformaat-taal.
Wanneer de gebruiker een woord of woordgroep uitgeeft waarop de regel betrekking heeft, voert de regel de acties, waardetoewijzingen of andere code uit die uiting.
Hoofdregel
De hoofdregel is de eerste regel in het bestand, tenzij de header anders opgeeft. Deze fungeert als de standaardregel op het hoogste niveau. Wanneer naar de grammatica wordt verwezen zonder de regel op te geven die moet worden opgezocht, is deze hoofdregel de eerste die wordt geraadpleegd.
Regelbereik
Wijs elke regel in de hoofdtekst van een grammaticabestand toe als een scope. Het bereik geeft aan of u onafhankelijk van externe bestanden (openbaar) naar de regel kunt verwijzen of alleen door een andere regel binnen dezelfde grammatica (privé). Alle regels zijn standaard privé, tenzij u ze definieert als openbaar.
Wanneer de regel openbaar is, kunt u het id-kenmerk als anker gebruiken voor verwijzingen uit andere documenten. Neem bijvoorbeeld de volgende syntaxis:
<grammar src="../grammars/universals.grxml#YesNo"/>
Wanneer u dit grammatica-element aanroept, verwijst het rechtstreeks naar de openbare 'YesNo'-regel in het universals.grxml-bestand , ongeacht of het de hoofdregel van het bestand is.
Opmerking
De hoofdregel van een grammaticabestand is mogelijk privé. Er kan niet onafhankelijk naar deze regel worden verwezen. Het wordt echter standaard gebruikt als het toegangspunt voor de grammatica wanneer u het grammaticabestand zelf aanroept.
Betekenis extraheren en resultaten retourneren
Opmerking
De SWI_meaning sleutel moet de informatie bevatten die wordt geretourneerd naar de spraakagent die werkt in Copilot Studio.
De SWI_meaning sleutel bevat de semantische betekenis van een herkende zin. U kunt deze alleen instellen voor de hoofdregel. Deze sleutel wordt standaard opgenomen in de swirec_extra_nbest_keys lijst, dus deze wordt weergegeven in het XML-resultaat als uw grammatica deze sleutel instelt.
SWI_meaning filtert overbodige antwoorden zodat vermeldingen in de n-best-lijst echt uniek zijn. Het elimineren van redundantie verbetert betrouwbaarheidsscores en de bruikbaarheid van de n-beste lijst.
Wanneer een herkende zin vergelijkbaar is met een andere in de grammatica, heeft deze vaak een lage betrouwbaarheidsscore, omdat de engine voor beperkte spraakherkenning niet zeker weet welke zin juist is. Wanneer u SWI_meaning correct gebruikt, groepeert de engine voor beperkte spraakherkenning redundante interpretaties in dezelfde slot in de n-best list. In het volgende voorbeeld wordt SWI_meaning ingesteld op 'directe aanroepen thuis' of de herkende zin is 'mijn oproepen doorsturen naar huis' of 'stuur mijn oproepen naar huis'.
Zonder SWI_meaning kan de grammatica de volgende n-best-lijst produceren:
| N | Tekst |
|---|---|
| 1 | mijn oproepen naar mijn autotelefoon doorsturen |
| 2 | oproepen naar mijn auto doorsturen |
| 3 | oproepen naar huis verzenden |
| 4 | stuur mijn oproepen naar het kantoor |
| 5 | mijn oproepen naar het kantoor doorsturen |
| 6 | oproepen naar mijn huis doorsturen |
Wanneer u SWI_meaning gebruikt, rangschikt de engine voor beperkte spraakherkenning de n-bestelijst op basis van de betekenis van de interpretatie in plaats van de exacte woordgroep die wordt gesproken, zodat vermeldingen in de n-bestelijst echt uniek zijn:
| N | Tekst | Sleutel voor SWI_meaning op het hoogste niveau |
|---|---|---|
| 1 | mijn oproepen naar mijn autotelefoon doorsturen | oproepen doorsturen naar auto |
| oproepen naar mijn auto doorsturen | oproepen doorsturen naar auto | |
| 2 | oproepen naar huis verzenden | oproepen naar huis doorsturen |
| oproepen naar mijn huis doorsturen | oproepen naar huis doorsturen | |
| 3 | stuur mijn oproepen naar het kantoor | oproepen naar werk doorsturen |
| mijn oproepen naar het kantoor doorsturen | oproepen naar werk doorsturen |
De engine voor beperkte spraakherkenning stelt zichzelf automatisch in SWI_meaning, zelfs als u het niet expliciet instelt in een script binnen de grammatica.
Als u SWI_meaning niet expliciet definieert op de root, wordt het samengesteld door alle sleutels die op de root zijn gedefinieerd, en hun overeenkomende waarden, aan elkaar te schakelen. Deze constructie is echter niet van toepassing op sleutels die beginnen met SWI_, zoals SWI_literal. De sleutel-/waardeparen worden eerst alfabetisch gesorteerd. De redenering is dat wat de toepassing betreft, de set sleutels die worden geretourneerd, de betekenis vormt van de zin.
Als er geen sleutels zijn, zijn de resultaten afhankelijk of u SISR- of SWI-semantiek gebruikt. Met SISR wordt de SWI_meaning sleutel niet ingesteld als er geen sleutels zijn. Met SWI-semantiek wordt SWI_meaning daarentegen ingesteld op het volgende:
{SWI_literal:<literal>}
Als SWI_meaning een object is, wordt het geconverteerd naar een tekenreeksweergave.
Hoewel de toepassing toegang SWI_meaningheeft, worden er vaker andere sleutel-/waardeparen gebruikt die specifiek voor de toepassing zijn gedefinieerd.
Grammatica van spraak hosten via Azure Storage
Copilot Studio biedt ondersteuning voor beperkte spraakherkenning via spraak grammatica. Het biedt echter geen ondersteuning voor het rechtstreeks ontwerpen, testen of hosten van deze grammaticas. Voor het hosten van grammatica's gebruikt u Microsoft Azure Storage om een vertrouwde en beveiligde verbinding te maken tussen de spraakagent en grammaticaopslag.
Een Azure Storage-account instellen
Maak een Azure-opslagaccount. Zorg ervoor dat het abonnement, de resourcegroep, de regio en de resourcenaam van het nieuwe opslagaccount voldoen aan het beleid van uw organisatie. Gebruik de volgende instellingen:
Voor de Primaire service selecteert u Azure Blob Storage of Azure Data Lake Storage Gen 2.
Selecteer Premium voor de prestaties.
Meer informatie vindt u in Een Azure-opslagaccount maken.
De opslagcontainer instellen
Gebruik de statische website als de opslagcontainer voor uw geüploade grammaticabestanden. De opslagcontainer biedt het primaire eindpunt en het secundaire eindpunt voor de website.
Nadat u het grammaticabestand hebt geüpload, selecteert u het bestand in de map om de eigenschappen en details van het bestand weer te geven. Sla de URL voor het bestand op. Deze moet de volgende indeling hebben:
https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}
Meer informatie vindt u in Een container maken.
De engine voor beperkte spraakherkenning verifiëren
Voor beperkte spraakherkenningsfunctionaliteit moet het systeem worden geauthenticeerd door gebruik te maken van het opslagaccount dat in de vorige stap is aangemaakt als een vertrouwde locatie. Voor deze verificatie is de rol Opslagblobgegevenslezer vereist.
Meer informatie vindt u in Assign Azure roles using the Azure portal.
Meld u aan bij Azure Portal, open een Azure Cloud Shell-sessie en voer de volgende opdracht uit om een service-principal voor de spraakherkenningsengine in uw tenant te maken.
az ad sp create --id e0e7bef0-777c-40ef-86aa-79d83ba643c7
Opmerking
Wanneer u naar een service-principal zoekt, ziet u dat deze 'NRaaS' bevat in de naam.
Beperkte spraak gebruiken in Copilot Studio
Een externe entiteit maken
U kunt een entiteit in Copilot Studio beschouwen als een informatie-eenheid die een bepaald type echt onderwerp vertegenwoordigt. Bijvoorbeeld een telefoonnummer, postcode, plaats of zelfs de naam van een persoon. Met behulp van entiteiten kan een agent de relevante informatie van een gebruikersinvoer herkennen en opslaan voor later gebruik. In dit scenario voert een beperkte spraak grammatica de herkenning uit.
Externe entiteiten gebruiken om te verwijzen naar spraak grammatica. Als u een externe entiteit wilt maken, opent u uw agent met spraakfunctionaliteit en gaat u naarInstellingentiteiten>>Toevoegen van een entiteit>Een externe entiteit registreren.
Opmerking
Wanneer u uw entiteit maakt, gebruikt u een globale of een systeemvariabele en niet een omgevingsvariabele. Als u een omgevingsvariabele moet gebruiken, maakt u een globale variabele aan en wijst u deze de waarde van de omgevingsvariabele toe. Vervolgens kan deze globale variabele worden gebruikt in de grammatica-ULR ter referentie.
Voer de volgende gegevens in:
Naam: Grammatica-URL in de vorm van
https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=trueOpmerking
De URL hoofdlettergevoelig.
De standaardherkenningsmodus is alleen Spraak. Zie de volgende tabel voor alternatieve grammaticaconfiguraties:
| Typologie | Queryparameter | Example |
|---|---|---|
| Alleen spraak | Geen | 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 |
| Spraak of DTMF (Hetzelfde grammaticabestand) |
&mode=speechdtmf |
https://{resourceName}.blob.core.windows.net/\$web/{grammarFileName}?constrainedrequired=true&mode=speechdtmf |
| Spraak of DTMF (Verschillende grammaticabestanden) | &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} |
Opmerking
URL's kunnen ook namen van directe variabelen bevatten in Copilot Studio.
Stel dat er twee identieke grammaticasets zijn, één voor Engels en één voor Spaans, en dat elk in een andere submap wordt opgeslagen. De meertalige agent moet de Engelse grammatica kunnen gebruiken bij het communiceren in het Engels en op dezelfde manier in het Spaans. In dit geval is de grammatica-URL: {Env.BaseURL}/common/**{System.User.Language}**/{grammarFileName}?
Waar System.User.Languageen_US of es_US is en verandert wanneer de taal van je agent schakelt.
Beschrijving: Een eenvoudige beschrijving van de grammatica, waarop de selector op het canvas de naam van de entiteit baseert. Bijvoorbeeld 'creditcardnummer'.
Gegevenstype: kies het gegevenstype Record en definieer het schema van de verwachte codes in het antwoord. Als de grammatica bijvoorbeeld
SWI_meaningen plaats retourneert, ziet het schema Record er als volgt uit:kind: Record properties: city: String SWI_meaning: String
Nadat u Opslaan hebt geselecteerd, wordt de entiteit weergegeven in de lijst. Ga in het ontwerpcanvas naar een Vraagknooppunt. Net als bij traditionele entiteiten selecteert u de externe entiteit (gekoppeld aan een grammatica), die de agent moet herkennen als gevolg van het antwoord van de gebruiker op de prompt.
Runtimegedrag
Wanneer een spraakgestuurde agent wordt uitgevoerd en de logica tegenkomt die een externe grammatica gebruikt, neemt de agent contact op met het Azure-opslagaccount en haalt de grammatica op voor interpretatie. De agent stemt vervolgens de uiting van de gebruiker af op de beperking die in de grammatica is toegepast. Als een overeenkomst slaagt, retourneert het systeem het antwoord in de variabele Record, volgens het schema dat is gedefinieerd in de externe entiteit.
Canvas-logica
Het resultaat dat is opgeslagen in de variabele van het knooppunt, is altijd een recordtype zoals gedefinieerd in het schema van de externe entiteit. Auteurs kunnen deze recordvariabele gebruiken om toegang te krijgen tot sleutels zoals gedefinieerd in het schema, zoals variableName.SWI_meaning of variableName.city via punt notatie.
Fouten opsporen
Foutcodes
| Error | Definition |
|---|---|
| 400 | Foutieve aanvraag |
| 401 | Niet-geverifieerd |
| 403 | Verboden |
| 404 | Geen spraak |
| 408 | Geen time-out voor invoer |
| 418 | Sessietime-out |
| 419 | Geen actieve resources - ontbrekende grammatica |
| 500 | Interne fout: rapporteren aan Microsoft in een ondersteuningsticket |
SWI_Literal
Voor veel grammatica's die werken met de engine voor beperkte spraakherkenning, retourneert de SWI_Literal-functie de letterlijke uitspraak van de gebruiker, niet het geïnterpreteerde resultaat. Registreer deze waarde als een van de uitvoer in Copilot Studio om te helpen bij het opsporen van fouten.
Bekende beperkingen
De oplossing heeft de volgende beperkingen:
- Maximale grootte van een afzonderlijk grammaticabestand, dat momenteel beperkt is tot 100 MB.
- Het doorgeven van variabelen wordt niet ondersteund.
- Het opslagaccount moet worden geplaatst in dezelfde tenant als de agent.
- De grootte van de URL mag niet langer zijn dan 500 tekens.
- Alleen eindpunten voor Azure Storage-accounts zijn toegestaan.
- Subgrammatica's kunnen alleen worden gehost in hetzelfde opslagaccount (met dezelfde FPA voor autorisatie).
- Beveiligde XML-parser (DTD is niet toegestaan en moet worden gevalideerd op basis van SRGS/SISR-schema).
- Alleen de NLSML-uitvoerindeling wordt intern ondersteund.
- De verouderde
swirec_simple_result_key-parameter heeft geen effect en alle codes worden geretourneerd.
Legal
De Microsoft Dynamics-service verwerkt beperkte spraakherkenningssystemen. Door deze ervaring te gebruiken, gaat u akkoord met de Dynamics-voorwaarden.