Планирование приложения LUIS

Важно!

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

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

Приложение LUIS обучается и работает наиболее эффективно при итеративной разработке. Вот типичный цикл итераций:

  1. Создание новой версии
  2. Отредактируйте схему приложения LUIS. В том числе:
    • Намерения с примерами высказываний
    • Сущности
    • Компоненты
  3. Обучайте, тестируйте и публикуйте
  4. Проверка активного обучения путем просмотра речевых фрагментов, отправленных в конечную точку прогнозирования
  5. Сбор данных из запросов конечных точек

Снимок экрана: цикл разработки

Определите предметную область

Приложение LUIS фокусируется на определенной предметной области. Например, у вас может быть приложение для путешествий, которое обрабатывает бронирование билетов, рейсов, отелей и аренду автомобилей. Другое приложение может предоставлять содержимое, связанное с тренировками, отслеживать результаты упражнений и ставить цели. Определение предметной области поможет найти слова или фразы, относящиеся к именно к этой теме.

Совет

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

Определение намерений

Подумайте о намерениях, важных для задачи приложения.

Рассмотрим пример приложения для путешествий с функциями по бронированию авиабилетов и проверки погоды в пункте назначения пользователя. Для этих действий можно определить два намерения: BookFlight и GetWeather.

В более сложном приложении с более широким набором функций у вас может быть больше намерений и вы должны определять их тщательно, чтобы намерения не были слишком конкретными. Например, вам может потребоваться различить намерения BookFlight и BookHotel, а BookInternationalFlight и BookDomesticFlight могут оказаться слишком похожими.

Примечание

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

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

Создание примера высказывания для каждого намерения

Для начала старайтесь не создавать слишком много речевых фрагментов для каждого намерения. Определив намерения, создайте для каждого из них 15–30 примеров речевых фрагментов. Каждый речевой фрагмент должен отличаться от ранее предоставленных высказываний. Включайте различное количество слов, меняйте выбор лексики, времена глаголов и знаки препинания.

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

Определение сущностей

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

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

Совет

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

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

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

Это высказывание должно иметь намерение и может иметь следующие сущности:

"Купите билет на авиарейс Сиэтл–Каир"

Это высказывание имеет единственное намерение:

  • Покупка билета на самолет

Это высказывание может иметь несколько сущностей:

  • Расположение Сиэтла (отправка) и Каира (место назначения)
  • Количество разового билета

Разрешение в речевом фрагменте с несколькими функциями или намерениями

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

Связь намерений и сущностей — это представление о том, что в выходных данных приложения действия (под которыми обычно понимаются намерения) могут фиксироваться еще и как сущности и сопоставляться с конкретными действиями. Например, чтобы полностью извлечь отрицание, обычно требуется и намерение, и сущность. Рассмотрим следующие два речевых фрагмента, которые похожи с точки зрения выбора слов, но дают разные результаты:

  • "Забронируйте мне билет на рейс Каир–Сиэтл"
  • "Сдайте мой билет на рейс Каир–Сиэтл"

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

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

  • FlightAction
    • Действие
    • Исходный домен
    • Назначение

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

Рекомендации

Планирование схемы

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

  • Изучите целевую аудиторию.
  • Определите сквозных пользователей, которые будут представлять ваше приложение — голос, аватар, решение проблем (упреждающее, реактивное).
  • Определите, через какие каналы взаимодействует пользователь (письменно, устно), и оставьте уже имеющиеся решения или создайте новое решение для этого приложения.
  • Путь сквозного пользователя:
    • Чем должно и чем не должно заниматься это приложение? Какова приоритетность задач, которые оно должно выполнять?
    • Каковы основные варианты использования приложения?
  • Сбор данных — изучите вопросы сбора и подготовки данных

Не выполняйте обучение и публикацию для каждого добавленного примера высказывания

Добавьте 10–15 высказываний перед обучением и публикацией. Это позволит оценить влияние на точность прогнозирования. Добавление одного высказывания может не оказать существенного влияния на оценку.

Не используйте LUIS в качестве платформы обучения

LUIS относится к домену языковой модели. Он не предназначен для работы в качестве общей платформы обучения естественного языка.

Создавайте приложение итеративно с использованием версий

Каждый цикл разработки должен находиться в новой версии, клонированной из существующей.

Не публикуйте приложение слишком рано

Слишком ранняя публикация приложения без надлежащего планирования может привести к следующим проблемам:

  • Приложение не будет работать на приемлемом уровне производительности в реальной ситуации.
  • Схема (намерения и сущности) будет несоответствующей, а если логика клиентского приложения разработана согласно схеме, возможно, придется переписать ее с нуля. Это может спровоцировать непредвиденные задержки и дополнительные затраты на проект, над которым вы работаете.
  • Речевые фрагменты, добавленные в модель, могут вызвать перекос в сторону речевых фрагментов, приведенных для примера, а эти недочеты трудно определить и исправить. Это также затруднит удаление неоднозначности после выбора определенной схемы.

Отслеживайте производительность своего приложения

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

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

Не создавайте списки фраз со всеми возможными значениями

Укажите несколько примеров (но не каждое слово или фразу) в списке фраз. LUIS обобщает указанные примеры и учитывает контекст.

Дальнейшие действия

Намерения