Поделиться через


Рекомендации по распознаванию общения

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

Выбор согласованной схемы

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

  • Какие действия или запросы я пытаюсь записать от пользователя?
  • Какие фрагменты информации относятся к каждому действию?

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

Например, предположим, что вы хотите, чтобы клиенты отменяли подписки на различные продукты, которые вы предлагаете через чат-бот. Вы можете создать намерение Отмены с различными примерами, такими как "Отмена службы Contoso" или "остановить зарядку для подписки Fabrikam". Намерение пользователя — отменить, служба Contoso или подписка Fabrikam — это подписки,которые они хотели бы отменить. Таким образом, можно создать сущность для подписок. Затем можно моделировать весь проект для отслеживания действий в качестве намерений и использования сущностей для заполнения этих действий. Это позволяет отменить все, что вы определяете как сущность, например другие продукты. Затем вы можете иметь намерения для регистрации, продления, обновления и т. д., которые используют подписки и другие сущности .

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

Другой подход заключается в моделировать информацию в качестве намерений и действий в качестве сущностей. Давайте рассмотрим тот же пример, что позволяет клиентам отменять подписки через чат-бот. Вы можете создать намерение для каждой доступной подписки, например Contoso с речевыми фрагментами, такими как "отмена Contoso", "остановить зарядку для служб contoso", "Отмена подписки Contoso". Затем вы создадите сущность для записи действия, отмены. Вы можете определить различные сущности для каждого действия или консолидировать действия как одну сущность с компонентом списка, чтобы различать действия с разными ключами.

Эта схема упрощает расширение новых действий до существующих целевых объектов путем добавления новых сущностей или компонентов сущностей.

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

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

Баланс данных обучения

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

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

  • Избавиться от определенного процента обучающих данных случайным образом.
  • Более систематически путем анализа набора данных и удаления избыточных повторяющихся записей.

Вы также можете добавить в набор обучения, выбрав кнопку "Предложить фразы " на вкладке "Метки данных" в языковой студии . Беседа Распознавание речи отправит вызов в Azure OpenAI для создания аналогичных речевых фрагментов.

Снимок экрана: предложение речевых фрагментов в Language Studio.

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

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

Четко помеченные речевые фрагменты

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

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

    Например, если вы создали модель для бронирования рейсов, пользователь может использовать высказывание, например "Я хочу рейс из Бостона в Сиэтл". Город-источник и город назначения для таких речевых фрагментов, как ожидается, будет похожим. Сигнал для отличия "Город происхождения" может быть то, что он часто предшествует слову "от".

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

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

Использование стандартного обучения перед расширенным обучением

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

Использование функции оценки

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

Компоненты и состав машинного обучения

См . типы компонентов.

Использование порогового значения оценки none

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

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

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

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

Как правило, вы добавите предварительно созданный компонент для Quantity.Number этого уже извлекает все числа в речевых фрагментах. Однако если ваша сущность была определена только с предварительно созданным компонентом, она также извлекает другие числа в рамках сущности количества билетов, например "Забронировать два билета завтра в Каир в 3 вечера".

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

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

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

Устранение несоответствий регистра

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

{
  "projectFileVersion": "2022-10-01-preview",
    ...
    "settings": {
      "confidenceThreshold": 0.5,
      "normalizeCasing": true
    }
...

Переконфидация модели

Клиенты могут использовать версию рецепта LoraNorm, если модель неправильно переопределена. Примером этого может быть приведенный ниже пример (обратите внимание, что модель прогнозирует неправильное намерение с уверенностью в 100 %. Это делает параметром порогового значения достоверности проекта непригодным для использования.

Текст Прогнозируемое намерение Степень достоверности
"Кто построили Эйфелевую башню?" Sports 1.00
"Я смотрю на тебя сегодня?" QueryWeather 1.00
"Я надеюсь, что у вас есть хороший вечер". Alarm 1.00

Для этого используйте 2023-04-15 версию конфигурации, которая нормализует оценки достоверности. Затем можно настроить параметр порогового значения доверия для достижения желаемого результата.

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2023-04-15",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

После отправки запроса можно отслеживать ход выполнения задания обучения в Language Studio как обычно.

Примечание.

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

Нормализация в модели версии 2023-04-15

Модель версии 2023-04-15, распознавание разговорного языка обеспечивает нормализацию на уровне вывода, который не влияет на обучение.

Уровень нормализации нормализует оценки достоверности классификации в ограниченном диапазоне. Выбранный в данный момент диапазон находится в [-a,a] том месте, где "a" является квадратным корнем числа намерений. В результате нормализация зависит от количества намерений в приложении. Если имеется очень низкое количество намерений, уровень нормализации имеет очень небольшой диапазон для работы. С довольно большим количеством намерений нормализация более эффективна.

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

Отладка созданных сущностей

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

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

Оценка модели с помощью нескольких наборов тестов

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

  • Присвойте набору тестов разные имена (например, test1 и test2).
  • Экспортируйте проект, чтобы получить JSON-файл со своими параметрами и конфигурацией.
  • Используйте JSON для импорта нового проекта и переименуйте второй требуемый набор тестов на "test".
  • Обучите модель для выполнения оценки с помощью второго тестового набора.

Пользовательские параметры для целевых приложений и дочерних приложений

Если вы используете оркестрированные приложения, может потребоваться отправить настраиваемые переопределения параметров для различных дочерних приложений. Поле targetProjectParameters позволяет пользователям отправлять словарь, представляющий параметры для каждого целевого проекта. Например, рассмотрим приложение оркестратора с именем оркестратора с именем Orchestrator оркестрации между приложением для распознавания беседы с именем CLU1 и пользовательским приложением CQA1для ответа на вопросы. Если вы хотите отправить параметр с именем top в приложение для ответа на вопросы, можно использовать приведенный выше параметр.

curl --request POST \
   --url 'https://<your-language-resource>.cognitiveservices.azure.com/language/:analyze-conversations?api-version=2022-10-01-preview' \
   --header 'ocp-apim-subscription-key: <your subscription key>' \
   --data '{
     "kind": "Conversation",
     "analysisInput": {
         "conversationItem": {
             "id": "1",
             "text": "Turn down the volume",
             "modality": "text",
             "language": "en-us",
             "participantId": "1"
         }
     },
     "parameters": {
         "projectName": "Orchestrator",
         "verbose": true,
         "deploymentName": "std",
         "stringIndexType": "TextElement_V8",
"targetProjectParameters": {
            "CQA1": {
                "targetProjectKind": "QuestionAnswering",
                "callingOptions": {
                    "top": 1
                }
             }
         }
     }
 }'

Копирование проектов между языковыми ресурсами

Часто можно копировать проекты распознавания речи бесед из одного ресурса в другой с помощью кнопки копирования в Azure Language Studio. Однако в некоторых случаях может быть проще скопировать проекты с помощью API.

Сначала определите:

  • имя исходного проекта
  • имя целевого проекта
  • ресурс исходного языка
  • целевой языковой ресурс, в который требуется скопировать его.

ВызовИТЕ API для авторизации действия копирования и получения accessTokens фактической операции копирования позже.

curl --request POST \ 
  --url 'https://<target-language-resource>.cognitiveservices.azure.com//language/authoring/analyze-conversations/projects/<source-project-name>/:authorize-copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>' \ 
  --data '{"projectKind":"Conversation","allowOverwrite":false}' 

ВызовИТЕ API, чтобы завершить операцию копирования. Используйте ответ, полученный ранее в качестве полезных данных.

curl --request POST \ 
  --url 'https://<source-language-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<source-project-name>/:copy?api-version=2023-04-15-preview' \ 
  --header 'Content-Type: application/json' \ 
  --header 'Ocp-Apim-Subscription-Key: <Your-Subscription-Key>\ 
  --data '{ 
"projectKind": "Conversation", 
"targetProjectName": "<target-project-name>", 
"accessToken": "<access-token>", 
"expiresAt": "<expiry-date>", 
"targetResourceId": "<target-resource-id>", 
"targetResourceRegion": "<target-region>" 
}'

Адресация речевых фрагментов домена

Клиенты могут использовать новую версию рецепта "2024-06-01-preview" в случае, если модель плохо использует AIQ вне доменных речевых фрагментов. Пример этого с рецептом по умолчанию может быть следующим, где модель имеет 3 намерения Sports, QueryWeather и Alarm. Тестовые речевые фрагменты находятся вне доменных речевых фрагментов, и модель классифицирует их как InDomain с относительно высокой оценкой достоверности.

Текст Прогнозируемое намерение Степень достоверности
"Кто построили Эйфелевую башню?" Sports 0.90
"Я смотрю на тебя сегодня?" QueryWeather 1.00
"Я надеюсь, что у вас есть хороший вечер". Alarm 0.80

Чтобы устранить эту проблему, используйте 2024-06-01-preview версию конфигурации, созданную специально для решения этой проблемы, а также обеспечить достаточно хорошее качество речевых фрагментов в домене.

curl --location 'https://<your-resource>.cognitiveservices.azure.com/language/authoring/analyze-conversations/projects/<your-project>/:train?api-version=2022-10-01-preview' \
--header 'Ocp-Apim-Subscription-Key: <your subscription key>' \
--header 'Content-Type: application/json' \
--data '{
      "modelLabel": "<modelLabel>",
      "trainingMode": "advanced",
      "trainingConfigVersion": "2024-06-01-preview",
      "evaluationOptions": {
            "kind": "percentage",
            "testingSplitPercentage": 0,
            "trainingSplitPercentage": 100
      }
}

После отправки запроса можно отслеживать ход выполнения задания обучения в Language Studio как обычно.

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

  • Порог "Нет оценки" для приложения (порог доверия, ниже которого topIntent помечается как None) при использовании этого рецепта должен иметь значение 0. Это связано с тем, что этот новый рецепт атрибутирует определенную часть вероятности домена вне домена, чтобы модель не была неправильно переуверена в речевых фрагментах домена. В результате пользователи могут увидеть немного сокращенные оценки достоверности в речевых фрагментах домена по сравнению с рецептом prod.
  • Этот рецепт не рекомендуется для приложений с двумя намерениями (2), такими как IntentA и None, например.
  • Этот рецепт не рекомендуется для приложений с низким количеством речевых фрагментов на намерение. Рекомендуется не менее 25 речевых фрагментов на намерение.