Co je porovnávání vzorů?

Porovnávání vzorů lze přizpůsobit tak, aby seskupila záměry vzorů a entity uvnitř objektu PatternMatchingModel. Pomocí tohoto seskupení je možné získat přístup k pokročilejším typům entit, které vám pomůžou přesněji rozpoznat záměr.

Podporovaná národní prostředí najdete tady.

Vzory a přesné fráze

V nástroji pro porovnávání vzorů se používají dva typy řetězců: "přesné fráze" a "vzory". Je důležité pochopit rozdíly.

Přesné fráze jsou řetězce přesných slov, která chcete shodovat. Příklad:

"Vezmi mě do patra sedm".

Vzor je fráze, která obsahuje označenou entitu. Entity jsou označené symbolem "{}" pro definování místa uvnitř vzoru a text uvnitř{} "" odkazuje na ID entity. Vzhledem k předchozímu příkladu byste možná chtěli extrahovat název podlahy v entitě s názvem floorName. Uděláte to takhle:

"Vezměte mě do podlahy {floorName}"

Osnova modelu PatternMatchingModel

Obsahuje PatternMatchingModel ID pro odkazování na tento model podle, seznam PatternMatchingIntent objektů a seznam PatternMatchingEntity objektů.

Záměry porovnávání vzorů

PatternMatchingIntent objekty představují kolekci frází, které se používají k vyhodnocení řeči nebo textu v objektu IntentRecognizer. Pokud se fráze shodují, IntentRecognitionResult vrátí se ID odpovídajícího výrazu PatternMatchingIntent .

Entity porovnávání vzorů

PatternMatchingEntity objekty představují odkaz na jednotlivou entitu a její odpovídající vlastnosti, které říkají IntentRecognizer , jak s nimi zacházet. Všechny PatternMatchingEntity objekty musí mít ID, které je přítomné ve frázi nebo jinak neodpovídá.

Omezení pojmenování entit

Názvy entit obsahující znaky :přiřadí entitě roli.

Typy entit

Libovolná entita

Entita Any odpovídá libovolnému textu, který se v daném slotu zobrazí bez ohledu na text, který obsahuje. Pokud se podíváme na náš předchozí příklad s použitím vzoru "Take me to floorName}" (Převést mě do podlahy {floorName}), může uživatel říct něco takového:

"Vezmi mě na parkoviště 2

V tomto případě by entita floorName odpovídala "parking 2".

Tyto entity jsou opožděné shody, které se pokusí co nejvíce spárovat s několika slovy, pokud se nezobrazí na začátku nebo konci promluvy. Představte si následující vzor:

"Vezměte mě na podlahu {floorName1} {floorName2}"

V tomto případě by se promluva "Take me to the floor parking 2" (Přeneste mě na parkoviště 2) shodovala a vrátila podlahuName1 = "parking" a floorName2 = "2".

Zpracování nadbytečného zachyceného textu může být složité. Možná, že uživatel mluvil a promluva zachytila více než jeho příkaz. "Vezmi mě na parkoviště 2 ano Janice, slyšel jsem o tom, že pojďme". V tomto případě by podlahaName1 byla správná, ale floorName2 by = "2 ano Janice jsem slyšel o tom, že pojďme". Je důležité si uvědomit, jak se entity shodují, a odpovídajícím způsobem upravit váš scénář. Typ jakékoli entity je nejzásadnější a nejpřesnější typ shodných shod.

Entita seznamu

Entita "List" je tvořena seznamem frází, které vedou modul o tom, jak ho spárovat. Entita Seznam má dva režimy. "Striktní" a "Fuzzy".

Předpokládejme, že máme seznam podlah pro náš výtah. Vzhledem k tomu, že pracujeme s řečí, přidáváme také položky pomocí lexikálního formátu.

"1", "2", "3", "lobby", "ground floor", "one", "two", "three"

Pokud je entita typu ID "List" použita v režimu Striktní, modul se shoduje pouze v případě, že se text v slotu zobrazí v seznamu.

"Vezmi mě do patra", bude se shodovat.

"Vezmi mě do patra 5", ne.

Je důležité si uvědomit, že celý záměr se neshoduje, nejen entita.

Pokud se entita typu ID "List" použije v režimu "Přibližná", modul stále odpovídá záměru a vrátí text, který se v promluvě objevil v slotu, i když není v seznamu. Tato shoda je užitečná na pozadí, aby bylo rozpoznávání řeči lepší.

Upozorňující

Entity seznamu přibližných shod jsou implementovány, ale nejsou integrovány do části rozpoznávání řeči. Proto budou odpovídat entitě, ale nezlepší rozpoznávání řeči.

Předem připravená celočíselná entita

Entita PrebuiltInteger se používá, když očekáváte, že v daném slotu získáte celé číslo. Pokud se celé číslo nenajde, nebude se shodovat se záměrem. Vrácená hodnota je řetězcová reprezentace čísla.

Příklady platné shody a vrácených hodnot

"Dva tisíce sto a padesát pět" -> "2155"

"první" -> "1"

"a" -> "1"

"čtyři oh sedm jedna" -> "4071"

Pokud je text, který není rozpoznatelný jako číslo, entita a záměr se neshoduje.

Příklady neplatné shody

"třetí"

"První patro myslím"

"druhý plus tři"

"Třicet-tři a stejně"

Podívejte se na náš příklad výtahu.

"Vezměte mě do podlahy {floorName}"

Pokud je "floorName" předem připravená celočíselná entita, očekává se, že jakýkoli text uvnitř slotu představuje celé číslo. Číslo patra by se shodovalo dobře, ale podlaha s názvem, jako je například "lobby", by ne.

Seskupování povinných a nepovinných položek

Ve vzoru je možné do promluvy zahrnout slova nebo entity, které mohou být v promluvě přítomny. To je užitečné zejména pro určení, jako je "the", "a" nebo "an". To nemá žádný funkční rozdíl od pevného kódování mnoha kombinací, ale může pomoct snížit počet potřebných vzorů. Označte volitelné položky pomocí "[" a "]". Uveďte požadované položky pomocí "(" a ")". Více položek ve stejné skupině můžete zahrnout tak, že je oddělíte znakem |.

Pokud chcete zjistit, jak by se snížil počet potřebných vzorů, zvažte následující sadu:

"Take me to {floorName}"

"Take me the {floorName}"

"Take me {floorName}"

"Vezměte mě na {floorName} prosím"

"Vezměte mi {floorName} prosím"

"Vezměte mě {floorName} prosím"

"Přines mi {floorName} prosím"

"Přiveďte mě do {floorName} prosím"

Všechny tyto možnosti lze omezit na jeden vzor seskupováním a volitelnými položkami. Nejprve je možné seskupit "komu" a "the" dohromady jako volitelná slova, jako například: "[to | "", a druhý můžeme také "prosím" volitelné. Nakonec můžeme podle potřeby seskupit "přines" a "vzít".

"(Přineste | Take) me [to | the] {floorName} [please]"

Je také možné zahrnout volitelné entity. Představte si, že existuje více úrovní parkování a chcete slovo před {floorName} spárovat. Můžete to udělat s tímto vzorem:

"Take me to [{floorType}] {floorName}"

Volitelné funkce jsou užitečné také v případě, že používáte rozpoznávání klíčových slov a funkci push-to-talk. To znamená, že někdy je klíčové slovo přítomné a někdy to nebude. Za předpokladu, že vaše klíčové slovo bylo "počítač", vypadalo by něco takového.

"[Počítač] Převezm mě do {floorName}"

Poznámka:

I když je užitečné používat volitelné položky, zvyšuje se pravděpodobnost kolizí vzorů. V tomto případě můžou dva vzory odpovídat stejné mluvené frázi. Pokud k tomu dojde, může být někdy vyřešen oddělením volitelných položek do samostatných vzorů.

Role entit

Uvnitř vzoru může existovat scénář, ve kterém chcete stejnou entitu použít vícekrát. Představte si scénář rezervace letu z jednoho města do jiného. V tomto případě je seznam měst stejný, ale je nutné vědět, ze kterého města pochází uživatel a které město je cílem. K tomu můžete použít roli přiřazenou k entitě pomocí :.

"Rezervovat let z {city:from} do {city:destination}"

Vzhledem k tomuto vzoru budou ve výsledku dvě entity označené "city:from" a "city:destination", ale obě budou odkazovat na entitu "město" pro odpovídající účely.

Priorita porovnávání záměrů

Někdy několik vzorů odpovídá stejné promluvě. V tomto případě dává motor přednost vzorům následujícím způsobem.

  1. Přesné fráze.
  2. Vzory s více entitami
  3. Vzory s celočíselnou entitou
  4. Vzory s entitami seznamu
  5. Vzory s libovolnými entitami
  6. Vzory s více bajty se shodují.
    • Příklad: Vzorek "select {something} na levé straně" bude vyšší priorita než "select {something}".

Další kroky

  • Začněte jednoduchým porovnávání vzorů.
  • Vylepšete porovnávání vzorů pomocí vlastních entit.
  • Projděte si ukázky GitHubu.