Worum handelt es sich beim Musterabgleich?
Der Musterabgleich kann angepasst werden, um Musterabsichten und -entitäten in einem PatternMatchingModel
zu gruppieren. Mithilfe dieser Gruppierung ist es möglich, auf fortschrittlichere Entitätstypen zuzugreifen, um Ihre Absichtserkennung präziser zu gestalten.
Unterstützte Gebietsschemas finden Sie hier.
Muster und genaue Ausdrücke im Vergleich
Es gibt zwei Arten von Zeichenfolgen, die im Musterabgleich (Matcher) verwendet werden: „genaue Ausdrücke“ und „Muster“. Dabei ist es wichtig, die Unterschiede zu kennen.
Exakte Ausdrücke sind Zeichenfolgen der exakten Wörter, für die eine Übereinstimmung gefunden werden soll. Beispiel:
„Take me to floor seven“.
Ein Muster ist ein Ausdruck, der eine markierte Entität enthält. Entitäten werden mit „{}“ markiert, um die Stelle innerhalb des Musters zu definieren, und der Text innerhalb von „{}“ verweist auf die Entitäts-ID. Im vorherigen Beispiel würden Sie beispielsweise den Namen der Etage in einer Entität mit dem Namen „floorName“ extrahieren. Sie würden dies mit einem Muster wie dem folgenden tun:
„Take me to floor {floorName}“
Gliederung eines PatternMatchingModel
Das PatternMatchingModel
enthält eine ID, über die auf das Modell verwiesen wird, eine Liste mit PatternMatchingIntent
-Objekten und eine Liste mit PatternMatchingEntity
-Objekten.
Musterabgleichsabsichten
PatternMatchingIntent
-Objekte stellen eine Sammlung von Ausdrücken dar, die zum Auswerten von Sprache oder Text in der IntentRecognizer
verwendet werden. Wenn die Ausdrücke übereinstimmen, dann enthält das zurückgegebene IntentRecognitionResult
die ID der PatternMatchingIntent
, die abgeglichen wurde.
Musterabgleichsentitäten
PatternMatchingEntity
-Objekte stellen einen einzelnen Entitätsverweis und die entsprechenden Eigenschaften dar, die IntentRecognizer
mitteilen, wie er behandelt werden soll. Alle PatternMatchingEntity
-Objekte müssen über eine ID verfügen, die in einem Ausdruck vorhanden ist, andernfalls werden sie nicht abgeglichen.
Einschränkungen bei der Entitätsbenennung
Entitätsnamen, die Doppelpunkte (:) enthalten, weisen einer Entität eine Rolle zu.
Typen von Entitäten
Entität vom Typ „Any“
Die Entität „Alle“ stimmt mit jeden Text überein, der in diesem Slot erscheint, unabhängig von dem Text, den er enthält. In unserem vorherigen Beispiel mit dem Muster „Take me to floor {floorName}“ betrachten, könnte der Benutzer beispielsweise Folgendes sagen:
„Take me to the floor parking 2.“
In diesem Fall würde die Entität „floorName“ der Wortfolge „parking 2“ entsprechen.
Bei diesen Entitäten handelt es sich um „Lazy Matches“, die versuchen, möglichst wenige Wörter abzugleichen, es sei denn, sie stehen am Anfang oder Ende einer Äußerung. Bedenken Sie die folgenden Muster:
„Take me to the floor {floorName1} {floorName2}“
In diesem Fall würde die Äußerung „Take me to the floor parking 2“ passen und „floorName1 = "parking"“ sowie „floorName2 = "2"“ zurückgegeben.
Es kann schwierig sein, zusätzlich erfassten Text zu verarbeiten. Vielleicht hat der Benutzer weiter gesprochen, und mit der Äußerung wurde mehr als nur der Befehl erfasst. „Take me to floor parking 2 yes Janice I heard about that let's“. In diesem Fall wäre floorName1 richtig, aber floorName2 wäre = „2 yes Janice I heard about that let's“. Es ist wichtig zu wissen, wie die Entitäten übereinstimmen, und Ihr Szenario entsprechend anzupassen. Der Entitätstyp „Alle“ ist der einfachste und am wenigsten genaueste Übereinstimmungstyp.
Entität vom Typ „List“
Die Entität vom Typ „Liste“ besteht aus einer Liste mit Ausdrücken, die der Engine als Leitfaden für den Abgleich dienen. Die Entität „List“ kann in zwei Modi vorliegen. „Strict“ und „Fuzzy“.
Angenommen, es liegt eine Liste mit Etagen für den Aufzug vor. Da wir es mit Sprache zu tun haben, fügen wir auch Einträge für das lexikalische Format hinzu.
„1“, „2“, „3“, „lobby“, „ground floor“, „one“, „two“, „three“
Wenn eine Entität vom Typ „Liste“ im Modus „Streng“ verwendet wird, findet das Modul nur dann eine Übereinstimmung, wenn der Text im Slot in der Liste angezeigt wird.
„take me to floor one“ ergibt eine Übereinstimmung.
„take me to floor 5“ nicht.
Es ist wichtig zu beachten,dass nicht nur die Entität, sondern auch die gesamte Absicht nicht übereinstimmt.
Wenn sich eine Entität der Typ-ID „Liste“ im Modus „Fuzzy“ befindet, findet das Modul weiterhin eine Übereinstimmung mit der Absicht und gibt den Text zurück, der im Slot in der Äußerung angezeigt wurde, auch wenn er nicht in der Liste enthalten ist. Diese Übereinstimmung ist zur Verbesserung der Spracherkennung im Hintergrund nützlich.
Warnung
Fuzzy-Listenentitäten werden implementiert, aber nicht in den Spracherkennungsteil integriert. Daher stimmen sie Entitäten ab, verbessern jedoch die Spracherkennung nicht.
Entität vom Typ „PrebuiltInteger“
Die Entität „PrebuiltInteger“ wird verwendet, wenn in diesem Slot eine ganze Zahl zu erwarten ist. Damit wird keine Übereinstimmung mit der Absicht gefunden, wenn keine ganze Zahl gefunden wird. Der Rückgabewert ist eine Zeichenfolgendarstellung der Zahl.
Beispiele für eine gültige Übereinstimmung und entsprechende Rückgabewerte
"Two thousand one hundred and fifty-five" > "2155"
"first" > "1"
"a" > "1"
"four oh seven one" > "4071"
Wenn nicht als Zahl erkennbarer Text vorhanden ist, passen Entität und Absicht nicht zusammen.
Beispiele für eine ungültige Übereinstimmung
"the third"
"first floor I think"
"second plus three"
"thirty-three and anyways"
Sehen Sie sich das Beispiel mit dem Aufzug an.
„Take me to floor {floorName}“
Wenn „floorName“ eine vorgefertigte Entität vom Typ „Integer“ ist, wird erwartet, dass aller Text im Slot eine ganze Zahl darstellt. Hier würde eine Etagennummer gut passen, aber eine Etage mit einem Namen wie „Lobby“ jedoch nicht.
Gruppieren erforderlicher und optionaler Elemente
Im Muster dürfen Wörter oder Entitäten vorkommen, die in der Äußerung vorkommen „könnten“. Dies ist besonders nützlich für Determinative wie „the“, „a“ oder „an“. Dies unterscheidet sich funktional nicht von der Hartcodierung der vielen Kombinationen, kann aber dazu beitragen, die Anzahl benötigter Muster zu reduzieren. Geben Sie optionale Elemente mit „[“ und „]“ an. Geben Sie erforderliche Elemente mit „(" und „)" an. Sie können mehrere Elemente in die gleiche Gruppe einschließen, indem Sie sie jeweils durch das Zeichen „|“ trennen.
Die folgende Gruppe veranschaulicht, wie dies die Anzahl benötigter Muster reduzieren würde:
"Take me to {floorName}"
"Take me the {floorName}"
„Take me {floorName}"
„Take me to {floorName} please“
„Take me the {floorName} please“
"Take me {floorName} please“
„Bring me {floorName} please“
„Bring me to {floorName} please“
Diese können alle auf ein einzelnes Muster mit Gruppierung und optionalen Elementen reduziert werden. Erstens ist es möglich, „to“ und „the“ zusammen als optionale Wörter wie „[to | the]“ zu gruppieren, und zweitens können wir auch das „please“ optional machen. Schließlich können wir das „bring" und „take" nach Bedarf gruppieren.
„(Bring | Take) me [to | the] {floorName} [please]"
Es ist auch möglich, optionale Entitäten einzubeziehen. Angenommen, es gibt mehrere Parkebenen, und Sie möchten das Wort vor „{floorName}“ abgleichen. Hierzu können Sie beispielsweise das folgende Muster verwenden:
"Take me to [{floorType}] {floorName}"
Optionale Optionen sind auch nützlich, wenn Sie eine Schlüsselworterkennung und eine Push-to-Talk-Funktion verwenden möchten. Dies bedeutet, dass manchmal das Schlüsselwort vorhanden ist und manchmal nicht. Angenommen, Ihr Schlüsselwort war "Computer", würde ihr Muster wie folgt aussehen.
„[Computer] Take me to {floorName}"
Hinweis
Die Verwendung optionaler Elemente ist zwar praktisch, erhöht aber die Wahrscheinlichkeit von Musterkonflikten. Bei einem Musterkonflikt entsprechen zwei Muster dem gleichen gesprochenen Ausdruck. Solche Konflikte lassen sich manchmal lösen, indem die optionalen Elemente in separate Muster aufgeteilt werden.
Entitätsrollen
Innerhalb des Musters gibt es möglicherweise ein Szenario, in dem Sie die gleiche Entität mehrmals verwenden möchten. Ein Beispiel: Angenommen, es soll ein Flug zwischen zwei Städten gebucht werden. In diesem Fall ist die Liste der Städte identisch, aber es ist wichtig zu wissen, welche Stadt der Ausgangspunkt des Benutzers und welche Stadt das Ziel ist. Hierzu können Sie einer Entität mithilfe eines Doppelpunkts (:) eine Rolle zuweisen und diese verwenden.
"Book a flight from {city:from} to {city:destination}"
Bei einem Muster wie diesem enthält das Ergebnis zwei Entitäten mit den Bezeichnungen „city:from“ und „city:destination“, aber beide verweisen zu Abgleichszwecken auf die Entität „city“.
Priorität beim Abgleich von Absichten
Manchmal stimmen mehrere Muster mit der gleichen Äußerung überein. Ist dies der Fall, weist das Modul den Mustern wie folgt Prioritäten zu.
- Genaue Ausdrücke
- Muster mit mehreren Entitäten
- Muster mit Entitäten vom Typ „Integer“
- Muster mit Entitäten vom Typ „List“
- Muster mit Entitäten vom Typ „Any“
- Muster, bei denen mehr Bytes übereinstimmen.
- Beispiel: Das Muster „wählen Sie {something} auf der linken Seite aus“ hat eine höhere Priorität als „wählen Sie {something} aus“.
Nächste Schritte
- Beginnen Sie mit einfachem Musterabgleich.
- Verbessern Sie den Musterabgleich mithilfe von benutzerdefinierten Entitäten.
- Schauen Sie sich unsere GitHub-Beispiele an.