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.
- Dokładne frazy.
- Wzorce z większą ilością jednostek.
- Wzorce z jednostkami całkowitymi.
- Wzorce z jednostkami listy.
- Wzorce z dowolnymi jednostkami.
- 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
- Zacznij od prostego dopasowania wzorca.
- Popraw dopasowywanie wzorca przy użyciu jednostek niestandardowych.
- Zapoznaj się z naszymi przykładami usługi GitHub.