Что такое сопоставление шаблонов?

Сопоставление шаблонов можно настроить для группирования намерений и сущностей шаблонов в PatternMatchingModel. С помощью этой группировки можно получить доступ к более сложным типам сущностей, которые помогают сделать распознавание намерений более точным.

Дополнительные сведения о поддерживаемых языковых стандартах см . здесь.

Шаблоны и точные фразы

В средстве сопоставления шаблонов используются два типа строк: "точные фразы" и "шаблоны". Важно понимать разницу между ними.

Точные фразы — это строки точных слов, которые вы хотите сопоставить. Например:

"Доставьте меня на этаж 7".

Шаблон — это фраза, которая содержит помеченную сущность. Сущности помечаются с помощью "{}", чтобы определить их место внутри шаблона, а текст внутри "{}" ссылается на идентификатор сущности. Если брать предыдущий пример, возможно, вам потребовалось бы извлечь имя этажа с помощью сущности с именем floorName. Для этого можно использовать следующий шаблон:

"Доставьте меня на этаж {floorName}"

Структура PatternMatchingModel

PatternMatchingModel содержит идентификатор, ссылающийся на эту модель, список объектов PatternMatchingIntent и список объектов PatternMatchingEntity.

Намерения сопоставления шаблонов

PatternMatchingIntent объекты представляют коллекцию фраз, которые используются для вычисления речи или текста в объекте IntentRecognizer. Если совпадают фразы, IntentRecognitionResult возвращенный имеет идентификатор сопоставленного PatternMatchingIntent .

Сущности сопоставления шаблонов

Объекты PatternMatchingEntity представляют ссылку на отдельную сущность и ее соответствующие свойства, указывающие IntentRecognizer, как ее обрабатывать. Все PatternMatchingEntity объекты должны иметь идентификатор, который присутствует в фразе или не совпадает.

Ограничения именования сущностей

Имена сущностей, содержащие символы ":", назначают роль сущности.

Типы сущностей

Сущность Any (любая)

Сущность Any соответствует любому тексту, который отображается в этом слоте независимо от текста, содержащегося в нем. Если мы рассмотрим наш предыдущий пример, с помощью шаблона "Доставьте меня на этаж {floorName}" пользователь мог бы сказать примерно следующее:

"Доставьте меня на этаж стоянки 2"

В этом случае сущности floorName будет соответствовать словосочетание "стоянка 2"

Эти сущности являются отложенными совпадениями, которые пытаются соответствовать как можно меньше слов, если он не отображается в начале или конце речевых фрагментов. Рассмотрим следующий шаблон:

"Доставьте меня на этаж {floorName1} {floorName2}"

В этом случае речевой фрагмент "Доставьте меня на этаж стоянки 2" зафиксирует соответствие и возвратит ответ: floorName1 = "стоянка" и floorName2 = "2".

Это может быть сложно обрабатывать дополнительный захваченный текст. Возможно, пользователь продолжил говорить и в речевой фрагмент записалась не только команда. "Доставьте меня на этаж стоянки 2. Да, Наташ, я в курсе, так что давай". В этом случае floorName1 будет правильным, но floorName2 получит значение "2. Да, Наташ, я в курсе, так что давай". Важно учитывать способ сопоставления сущностей и соответствующим образом настраивать сценарий. Тип любой сущности является самым простым и наименее точным типом сопоставления.

Сущность списка

Сущность List состоит из списка фраз, направляющих подсистему сопоставления с ней. У сущности List есть два режима: "строгий" и "нестрогий".

Предположим, у нас есть список этажей для лифта. Так как мы имеем дело с речью, мы добавляем записи с помощью лексического формата, а также.

"1", "2", "3", "вестибюль", "цокольный этаж, "один", "два", "три"

Если сущность идентификатора типа "List" используется в режиме "Строгий", подсистема совпадает только в том случае, если текст в слоте отображается в списке.

"Доставьте меня на этаж один" — соответствие.

"Доставьте меня на этаж 5" — несоответствие.

Важно отметить, что все намерение не будет соответствовать, а не только сущности.

Если сущность идентификатора типа "List" используется в режиме "Нечеткий", подсистема по-прежнему соответствует намерению и возвращает текст, который появился в слоте в речевых фрагментах, даже если он не находится в списке. Это совпадение полезно за кулисами, чтобы сделать распознавание речи лучше.

Предупреждение

Сущности нестрогого списка реализуются, но не интегрируются в часть распознавания речи. Таким образом, они будут соответствовать сущностям, но не улучшают распознавание речи.

Предварительно созданная целочисленная сущность

Сущность PrebuiltInteger используется, если в этом слоте должно появиться целое число. Он не будет соответствовать намерению, если целое число не удается найти. Возвращаемое значение является строковым представлением числа.

Примеры допустимых совпадений и возвращаемых значений

"Две тысячи сто пятьдесят пять" - > "2155"

"Один" -> "1"

"Раз" -> "1"

"четыре ноль семь один"- > "4071"

Если есть текст, который не распознан как число, сущность и намерение не будут соответствовать.

Примеры недопустимого соответствия

"Третий"

"Давай на первый этаж"

"Двойка плюс три"

"Тридцать три и что хочешь"

Рассмотрим наш пример с лифтом.

"Доставьте меня на этаж {floorName}"

Если "floorName" является предварительно созданной целочисленной сущностью, ожидается, что любой текст внутри слота представляет целое число. Здесь номер этажа будет соответствовать хорошо, но этаж с именем, таким как "лобби" не будет.

Группирование обязательных и необязательных элементов

В шаблоне разрешено включать слова или сущности, которые "могут" присутствовать в высказывании. Это особенно удобно для уточняющих слов, таких как "мне" или "меня". С функциональной точки зрения это мало чем отличается от жесткого кодирования множества комбинаций, но помогает сократить количество требуемых шаблонов. Необязательные элементы заключаются в квадратные скобки "[ ]". Укажите обязательные элементы с символами "(" и ")". Вы можете включить несколько элементов в одну группу, разделив их символом "|".

Чтобы узнать, как это уменьшит количество необходимых шаблонов, рассмотрите следующий набор:

"Доставьте на этаж {floorName}"

"Доставь меня на этаж {floorName}"

"Доставь меня на {floorName}"

"Доставь меня на этаж {floorName}, пожалуйста"

"Доставь меня на ярус {floorName}, пожалуйста"

"Доставь меня на {floorName}, пожалуйста"

"Привези меня на {floorName}, пожалуйста"

"Привези на этаж {floorName}, пожалуйста"

Все эти шаблоны можно сократить до одного шаблона с группированием и необязательными словами. Во-первых, можно группировать "to" и "the" в качестве необязательных слов, как так: "[to | the], и второй мы можем сделать "пожалуйста" необязательным, а также. Наконец, мы можем сгруппировать слова "доставь" и "привези" необходимым образом.

"(Доставь | Привези) меня на [этаж | ярус] {floorName} [пожалуйста]"

Кроме того, можно включить дополнительные сущности. Предположим, у нас многоуровневая парковка, и вы хотите сопоставить слово после {floorName}. Для этого можно использовать следующий шаблон:

"Доставьте меня на этаж {floorName}, [{floorType}]"

Необязательные компоненты также полезны, если вы можете использовать ключевое слово распознавание и функцию push-to-talk. Это означает, что иногда ключевое слово присутствует, и иногда это не будет. Предположим, что ключевым словом было слово "компьютер", тогда шаблон будет выглядеть примерно следующим образом.

"[Компьютер], доставь меня на этаж {floorName}"

Примечание.

Необязательные элементы удобны в использовании, но повышают вероятность конфликтов шаблонов. Это происходит, когда два шаблона могут соответствовать одной и той же произнесенной фразе. В этом случае проблему иногда можно решить, разнеся необязательные элементы по отдельным шаблонам.

Роли сущности

В шаблоне может возникнуть сценарий, в котором требуется использовать одну сущность несколько раз. Рассмотрим сценарий бронирования билетов на авиарейс из одного города в другой. В этом случае список городов один и тот же, но нужно понять, какой город является местом отправления, а какой — местом назначения. Для этого можно использовать роль, назначенную сущности с помощью символа ":".

"Забронируй билет на рейс из {city:from} в {city:destination}"

В результате такого шаблона будут получены две сущности с пометками "city:from" и "city:destination", но для целей сопоставления они обе будут ссылаться на сущность "city" (город).

Приоритет сопоставления намерений

Иногда несколько шаблонов соответствуют одному и тому же высказыванию. В этом случае подсистема обеспечивает приоритет шаблонов следующим образом.

  1. Точные фразы.
  2. Шаблоны, где больше сущностей.
  3. Шаблоны с целочисленными сущностями.
  4. Шаблоны с сущностями List.
  5. Шаблоны с сущностями Any.
  6. Шаблоны с более байтами, соответствующими.
    • Пример. Шаблон "select {something} слева" будет выше приоритета, чем "select {something}".

Следующие шаги