Намерения

Важно!

Служба LUIS будет прекращена 1 октября 2025 г., и с 1 апреля 2023 г. вы не сможете создавать новые ресурсы LUIS. Мы рекомендуем перенести приложения LUIS на распознавание устной речи , чтобы воспользоваться непрерывной поддержкой продуктов и многоязычными возможностями.

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

Определите набор намерений, которые соответствуют действиям пользователей в вашем приложении. Например, в приложении для путешествий можно определить следующие намерения:

Намерения приложения для путешествий Примеры высказываний
BookFlight "Book me a flight to Rio next week" ("Забронировать авиаперелет в Рио на следующей неделе")
"Fly me to Rio on the 24th" ("Найти авиаперелет в Рио 24-го числа")
"I need a plane ticket next Sunday to Rio de Janeiro" ("Мне нужен билет на самолет в Рио-де-Жанейро на следующее воскресенье")
Приветствие "Hi" ("Привет")
"Hello"
"Good morning" ("Доброе утро")
CheckWeather "What's the weather like in Boston?" ("Какая сейчас погода в Бостоне?")
"Show me the forecast for this weekend" ("Покажите мне прогноз на эту неделю")
Нет "Get me a cookie recipe" ("Рецепт печенья")
"Did the Lakers win?" ("Лейкерс победили?")

Все приложения поставляются с предопределенным намерением Нет, которое является резервным намерением.

Предварительно созданные намерения

LUIS предоставляет готовые намерения и их речевые фрагменты для каждого из своих предварительно созданных предметных областей. Намерения можно добавить без добавления всей предметной области. Добавление намерения — это процесс добавления намерения и соответствующих фраз в свое приложение. Имя намерения и список фраз можно изменять.

Получение оценок для всех намерений

Высказывание назначается одному намерению. Когда LUIS получает речевой фрагмент, по умолчанию он возвращает наивысшее намерение для этого высказывания.

Если вам нужны оценки для всех намерений речевого фрагмента, вы можете указать флаг в строке запроса API прогнозирования.

Версия API прогнозирования Flag
V2 verbose=true
V3 show-all-intents=true

Сравнение намерения и сущности

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

Создайте намерение в том случае, когда намерение пользователя вызывает выполнения действия в вашем клиентском приложении, например вызов функции checkweather() из приведенной выше таблицы. Затем создайте сущности для представления параметров, необходимых для выполнения действия.

Блокировка с намерением Сущность Пример фразы
CheckWeather { "type": "location", "entity": "Seattle" }
{ "type": "builtin.datetimeV2.date","entity": "tomorrow","resolution":"2018-05-23" }
What's the weather like in (Какая сейчас погода в) Seattletomorrow?
CheckWeather { "type": "date_range", "entity": "this weekend" } Show me the forecast for (Покажите мне прогноз на) this weekend

Намерение None

Намерение None создается и оставляется пустым намеренно. Намерение None является обязательным и не может быть удалено или переименовано. Заполните его высказываниями, которые не относятся к вашему домену.

Намерение Нет — это резервное намерение, которое должно составлять 10 % от общего числа речевых фрагментов. Оно имеет значимость в каждом приложении, поскольку используется для обучения высказываний LUIS, которые не являются важными в домене (предметной области) приложения. Если вы не добавили ни одно высказывание для намерения None, LUIS принудительно поместит высказывание, находящееся за пределами домена, в одно из намерений домена. Это приведет к искажению оценок прогнозирования, так как LUIS будет обучен ложному намерению для высказывания.

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

Отрицательные намерения

Если вы хотите определить положительные и отрицательные намерения, например, "Я хочу автомобиль" и "Я не хочу автомобиль", вы можете создать два намерения (одно положительное и одно отрицательное) и добавить соответствующие высказывания для каждого из них. Вы также можете создать одно намерение и пометить положительное и отрицательное понятия как сущности.

Намерения и шаблоны

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

Использование сущности регулярного выражения гарантирует извлечение данных, чтобы шаблон был сопоставлен. Сопоставление с шаблоном гарантирует возвращение точного намерения.

Баланс намерений

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

Необходимость поддержания баланса не относится к намерению None. Это намерение должно содержать 10 % от общего числа высказываний в приложении.

Ограничения намерений

Ознакомьтесь с ограничениями, чтобы понять, какое количество намерений можно добавить в модель.

Совет

Если вам требуется больше, чем максимальное количество намерений, подумайте, не использует ли ваша система слишком много намерений, и определите, объединяются ли несколько намерений в единое намерение с сущностями. Если намерения слишком близки, то LUIS может испытывать трудности в том, чтобы различить их. Намерений должно быть достаточно для того, чтобы охватить основные задачи пользователя. При этом не стоит стараться охватить все направления вашего кода. Например, два намерения: в приложении для путешествий BookFlight() и FlightCustomerService() могут быть отдельными намерениями, однако намерения BookInternationalFlight() и BookDomesticFlight() могут быть слишком похожими. Если в вашей системе необходимо их различать, используйте сущности или другую логику вместо намерений.

Если намерений слишком много, обратитесь в службу поддержки

Если уменьшение числа намерений или разделение намерений на несколько приложений не помогает добиться цели, обратитесь в службу поддержки. Если ваша подписка Azure включает службы поддержки, обратитесь в службу технической поддержки Azure.

Рекомендации для намерений:

Определяйте четкие намерения

Убедитесь, что словарь для каждого намерения используется только для этого намерения и не перекрывается с другим намерением. Например, если вам необходимо приложение для бронирования авиабилетов и гостиниц, вы сможете сделать так, чтобы эти бронирования находились в отдельных намерениях, или поместить их в одно намерение с различными сущностями внутри высказывания для различных данных.

Если словарь для двух намерений совпадает, объедините намерения и используйте сущности.

Взгляните на следующие примеры высказываний:

  1. Book a flight (забронировать авиабилет)
  2. Book a hotel (забронировать гостиницу)

В высказываниях "Book a flight" ("Забронировать авиабилет") и "Book a hotel" ("Забронировать гостиницу") используется один и тот же словарь "book a <noun>". Формат этих высказываний одинаков, поэтому необходимо использовать одно намерение с различными сущностями для авиабилетов и гостиниц.

Добавляйте функции к намерениям

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

Найдите компромисс для каждого намерения

Чтобы определить, перекрываются ли намерения, используйте данные прогнозирования из LUIS. LUIS не может правильно обработать перекрывающиеся намерения. Результатом является то, что намерение с максимальной оценкой оказывается слишком близко к другому намерению. Поскольку LUIS не использует один и тот же путь к данным для обучения каждый раз, перекрывающееся намерение может стать первым или вторым в обучении. Необходимо сделать так, чтобы оценки высказываний для каждого намерения находились как можно дальше друг от друга, чтобы эта вариантность не имела места. Хорошее различие между намерениями приведет к тому, что вы всегда будете получать ожидаемое намерение в качестве намерения с максимальной оценкой.

Равномерное распределение речевых фрагментов по намерениям

Чтобы прогнозирование LUIS было точным, количество примеров высказываний по каждому намерению (за исключением намерения None) должно быть примерно одинаковым.

Если у вас есть намерение со 500 примерами высказываний и все прочие ваши намерения с 10 примерами высказываний, то намерение со 500 примерами высказываний будет иметь более высокую точность прогнозирования.

Добавьте примеры речевых фрагментов в намерение None

Это резервное намерение, которое показывает все, что находится вне вашего приложения. Добавляйте по одному примеру высказывания в намерение None на каждые 10 примеров высказываний в остальной части приложения LUIS.

Не добавляйте слишком много примеров высказываний в намерения

После публикации приложения во время процесса его жизненного цикла разработки добавляйте только речевые фрагменты из активного обучения. Если высказывания очень похожи, добавьте шаблон.

Не смешивайте определения намерений и сущностей

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

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

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

Использование целей