Co to jest dopasowywanie wzorców?

Dopasowanie wzorca można dostosować w celu grupowania intencji wzorców i jednostek wewnątrz elementu PatternMatchingModel. Korzystając z tego grupowania, można uzyskać dostęp do bardziej zaawansowanych typów jednostek, które ułatwiają bardziej precyzyjne rozpoznawanie intencji.

Aby uzyskać informacje o obsługiwanych ustawieniach regionalnych, zobacz tutaj.

Wzorce a dokładne frazy

Istnieją dwa typy ciągów używanych w dopasowywaniu wzorców: "dokładne frazy" i "wzorce". Ważne jest, aby zrozumieć różnice.

Dokładne frazy to ciągi dokładnych słów, które chcesz dopasować. Na przykład:

"Zabrać mnie na podłogę siedem".

Wzorzec to fraza zawierająca oznaczoną jednostkę. Jednostki są oznaczone znakiem "{}", aby zdefiniować miejsce wewnątrz wzorca i tekst wewnątrz{} "" odwołuje się do identyfikatora jednostki. Biorąc pod uwagę poprzedni przykład, być może chcesz wyodrębnić nazwę podłogi w jednostce o nazwie "floorName". Należy to zrobić za pomocą wzorca w następujący sposób:

"Weź mnie na podłogę {floorName}"

Konspekt wzorcaMatchingModel

Zawiera PatternMatchingModel identyfikator odwołujący się do tego modelu, listę PatternMatchingIntent obiektów i listę PatternMatchingEntity obiektów.

Wzorce pasujące intencje

PatternMatchingIntent obiekty reprezentują kolekcję fraz używanych do oceny mowy lub tekstu w obiekcie IntentRecognizer. Jeśli frazy są zgodne, IntentRecognitionResult zwrócony identyfikator ma identyfikator PatternMatchingIntent , który został dopasowany.

Jednostki pasujące do wzorca

PatternMatchingEntity obiekty reprezentują odwołanie do pojedynczej jednostki i odpowiadające jej właściwości, które informują o IntentRecognizer sposobie jego traktowania. Wszystkie PatternMatchingEntity obiekty muszą mieć identyfikator, który znajduje się w frazie lub nie jest zgodny.

Ograniczenia nazewnictwa jednostek

Nazwy jednostek zawierające znaki ":" przypisują rolę do jednostki.

Typy jednostek

Dowolna jednostka

Jednostka "Dowolne" pasuje do dowolnego tekstu wyświetlanego w tym miejscu niezależnie od tekstu, który zawiera. Jeśli rozważymy nasz poprzedni przykład, używając wzorca "Take me to floor {floorName}", użytkownik może powiedzieć coś podobnego:

"Zabrać mnie na parking 2 piętro

W takim przypadku jednostka "floorName" będzie zgodna z "parking 2".

Te jednostki są leniwe dopasowania, które próbują dopasować jak najmniej słów, chyba że pojawia się na początku lub na końcu wypowiedzi. Rozważmy następujący wzorzec:

"Weź mnie na podłogę {floorName1} {floorName2}"

W tym przypadku wypowiedź "Take me to the floor parking 2" będzie pasować i zwracać floorName1 = "parking" i floorName2 = "2".

Może to być trudne do obsługi dodatkowego przechwyconego tekstu. Być może użytkownik ciągle mówił, a wypowiedź przechwyciła więcej niż ich polecenie. "Weź mnie na parking 2 tak Janice usłyszałem o tym let's". W tym przypadku floorName1 byłoby poprawne, ale floorName2 = "2 tak Janice słyszałem o tym let's". Ważne jest, aby pamiętać o sposobie dopasowania jednostek i odpowiednio dostosować swój scenariusz. Dowolny typ jednostki jest najbardziej podstawowym i najmniej precyzyjnym typem dopasowania wykonanego.

Jednostka listy

Jednostka "Lista" składa się z listy fraz, które kierują aparatem, jak go dopasować. Jednostka "Lista" ma dwa tryby. "Strict" i "Rozmyte".

Załóżmy, że mamy listę podłóg dla naszej windy. Ponieważ mamy do czynienia z mową, dodajemy również wpisy przy użyciu formatu leksyktycznego.

"1", "2", "3", "lobby", "parter", "jeden", "dwa", "trzy"

Gdy jednostka typu "Lista" jest używana w trybie "Strict", aparat jest zgodny tylko wtedy, gdy tekst w miejscu pojawi się na liście.

"zabierze mnie na podłogę jeden" będzie pasować.

"Zabrać mnie na podłogę 5" nie będzie.

Należy pamiętać, że cała intencja nie będzie zgodna, a nie tylko jednostka.

Gdy jednostka typu "Lista" jest używana w trybie "Rozmyte", aparat nadal pasuje do intencji i zwraca tekst, który pojawił się w miejscu w wypowiedzi, nawet jeśli nie znajduje się na liście. To dopasowanie jest przydatne w tle, aby ułatwić rozpoznawanie mowy.

Ostrzeżenie

Jednostki listy rozmyte są implementowane, ale nie są zintegrowane z częścią rozpoznawania mowy. W związku z tym będą one zgodne z jednostkami, ale nie poprawią rozpoznawania mowy.

Wstępnie utworzona jednostka całkowita

Jednostka "Wstępnie skompilowana liczba całkowita" jest używana, gdy spodziewasz się, że w tym miejscu uzyskasz liczbę całkowitą. Nie będzie on zgodny z intencją, jeśli nie można odnaleźć liczby całkowitej. Wartość zwracana jest ciągiem reprezentującym liczbę.

Przykłady prawidłowego dopasowania i zwracanych wartości

"Dwa tysiące sto pięćdziesiąt pięć" -> "2155"

"first" —> "1"

"a" —> "1"

"cztery o siedem jeden" -> "4071"

Jeśli istnieje tekst, który nie jest rozpoznawalny jako liczba, jednostka i intencja nie będą zgodne.

Przykłady nieprawidłowego dopasowania

"trzeci"

"pierwsze piętro myślę"

"drugi plus trzy"

"trzydzieści trzy i tak"

Rozważmy nasz przykład windy.

"Weź mnie na podłogę {floorName}"

Jeśli wyrażenie "floorName" jest wstępnie utworzoną jednostką całkowitą, oczekuje się, że dowolny tekst znajduje się wewnątrz miejsca reprezentuje liczbę całkowitą. Tutaj numer podłogi dobrze pasuje, ale podłoga o nazwie takiej jak "lobby" nie.

Grupowanie wymaganych i opcjonalnych elementów

We wzorcu można uwzględnić wyrazy lub jednostki, które "mogą" znajdować się w wypowiedzi. Jest to szczególnie przydatne w przypadku metod określania, takich jak "the", "a" lub "an". Nie ma to żadnej różnicy funkcjonalnej od kodowania wielu kombinacji, ale może pomóc zmniejszyć liczbę potrzebnych wzorców. Wskaż opcjonalne elementy z elementami "[" i "]". Wskaż wymagane elementy z elementami "(" i ")". Możesz uwzględnić wiele elementów w tej samej grupie, oddzielając je znakiem '|'.

Aby zobaczyć, jak zmniejszy to liczbę potrzebnych wzorców, należy wziąć pod uwagę następujący zestaw:

"Weź mnie do {floorName}"

"Weź mnie za {floorName}"

"Weź mnie {floorName}"

"Weź mnie do {floorName} proszę"

"Weź mnie za {floorName} proszę"

"Weź mnie {floorName} proszę"

"Przynieś mnie {floorName} proszę"

"Przynieś mnie do {floorName} proszę"

Wszystkie te elementy można zmniejszyć do jednego wzorca z grupowaniem i opcjonalnymi elementami. Najpierw można grupować wyrazy "do" i "the" jako opcjonalne wyrazy w następujący sposób: "[to | the]", a po drugie możemy również ustawić "proszę" opcjonalne. Na koniec możemy pogrupować "bring" i "take" zgodnie z potrzebami.

"(Przynieś | Weź) mnie [do | {floorName} [proszę]"

Można również uwzględnić jednostki opcjonalne. Wyobraź sobie, że istnieje wiele poziomów parkingu i chcesz dopasować słowo przed {floorName}. Można to zrobić za pomocą wzorca w następujący sposób:

"Przejdź do mnie do [{floorType}] {floorName}"

Opcjonalne są również przydatne, jeśli możesz używać funkcji rozpoznawania słów kluczowych i funkcji push-to-talk. Oznacza to, że czasami słowo kluczowe jest obecne, a czasami nie. Zakładając, że słowo kluczowe to "komputer", twój wzorzec będzie wyglądać mniej więcej tak.

"[Komputer] Przejdź do mnie do {floorName}"

Uwaga

Chociaż warto używać elementów opcjonalnych, zwiększa prawdopodobieństwo kolizji wzorców. W tym miejscu dwa wzorce mogą odpowiadać tej samej frazie mówionej. W takim przypadku czasami można rozwiązać ten problem, oddzielając opcjonalne elementy na oddzielne wzorce.

Role jednostki

Wewnątrz wzorca może istnieć scenariusz, w którym chcesz wielokrotnie używać tej samej jednostki. Rozważmy scenariusz rezerwacji lotu z jednego miasta do drugiego. W takim przypadku lista miast jest taka sama, ale należy wiedzieć, z którego miasta pochodzi użytkownik i które miasto jest miejscem docelowym. W tym celu można użyć roli przypisanej do jednostki przy użyciu elementu ":".

"Zarezerwuj lot z {city:from} do {city:destination}"

Biorąc pod uwagę wzorzec podobny do tego, w wyniku będą znajdować się dwie jednostki oznaczone etykietą "city:from" i "city:destination", ale oba te jednostki będą odwoływać się do jednostki "city" na potrzeby dopasowania.

Priorytet dopasowania intencji

Czasami wiele wzorców pasuje do tej samej wypowiedzi. W takim przypadku aparat daje priorytet wzorom w następujący sposób.

  1. Dokładne frazy.
  2. Wzorce z większą ilością jednostek.
  3. Wzorce z jednostkami całkowitymi.
  4. Wzorce z jednostkami listy.
  5. Wzorce z dowolnymi jednostkami.
  6. Wzorce z większą większa większa liczba bajtów.
    • Przykład: Wzorzec "select {something} po lewej stronie" będzie wyższy priorytet niż "select {something}".

Następne kroki