Создание резервных копий и восстановление моделей распознавания устной речи
При создании языкового ресурса на портале Azure необходимо указать регион, в котором он будет создан. После этого ресурс и все относящиеся к нему операции выполняются в указанном регионе сервера Azure. В редких случаях можно столкнуться с сетевой проблемой, которая затрагивает весь регион. Если ваше решение должно быть доступно непрерывно, необходимо разработать его таким образом, чтобы либо происходил переход в другой регион. Для этого требуется два ресурса языка искусственного интеллекта Azure в разных регионах и возможность синхронизации моделей CLU в разных регионах.
Если приложение или бизнес зависит от использования модели CLU, рекомендуется создать реплику проекта в другом поддерживаемом регионе. Таким образом, если произойдет региональный сбой, вы сможете получить доступ к своей модели в другом резервном регионе, где ваш проект уже реплицирован.
Под репликацией проекта понимается экспорт метаданных и ресурсов проекта и их импорт в новый проект. В результате, создается только копия параметров, намерений, сущностей и речевых фрагментов проекта. Вам по-прежнему придется обучать и развертывать модели, чтобы они были доступны для использования с API среды выполнения.
В настоящей статье приведена информация о том, как использовать API экспорта и импорта для репликации проекта из одного ресурса в другой, находящийся в другом поддерживаемом географическом регионе, обеспечивать синхронизацию проектов и вносить изменения, необходимые для использования среды выполнения.
Предварительные условия
- Два ресурса языка искусственного интеллекта Azure в разных регионах Azure, каждый из них в другом регионе.
Получите конечную точку ключей ресурсов
Чтобы получить ключи и конечную точку основных и дополнительных ресурсов, выполните следующие действия. Эти значения понадобятся вам на последующих этапах.
Перейдите на страницу обзора ресурса на портале Azure. В меню слева выберите Ключи и конечная точка. Конечная точка и ключ вам понадобятся для запросов API.
Совет
Запишите ключи и конечные точки для основных и дополнительных ресурсов. Используйте эти значения для замены следующих заполнителей: {PRIMARY-ENDPOINT}
, {PRIMARY-RESOURCE-KEY}
, {SECONDARY-ENDPOINT}
и {SECONDARY-RESOURCE-KEY}
.
Кроме того, запишите имя проекта, имя модели и имя развертывания. Используйте эти значения для замены следующих заполнителей: {PROJECT-NAME}
, {MODEL-NAME}
и {DEPLOYMENT-NAME}
.
Экспорт основных ресурсов проекта
Сначала экспортируйте ресурсы проекта из проекта в вашем основном ресурсе.
Отправка задания на экспорт
Замените заполнители в следующем запросе своими значениями {PRIMARY-ENDPOINT}
и {PRIMARY-RESOURCE-KEY}
, полученными на первом шаге.
Создайте запрос POST, используя следующий URL-адрес, заголовки и текст JSON, чтобы экспортировать проект.
Запросить URL-адрес
При создании запроса API используйте следующий URL-адрес. Замените значения заполнителей ниже собственными значениями.
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/:export?stringIndexType=Utf16CodeUnit&api-version={API-VERSION}
Заголовки
Используйте следующий заголовок для проверки подлинности запроса.
Ключ | Значение |
---|---|
Ocp-Apim-Subscription-Key |
Ключ к вашему ресурсу. Используется для проверки подлинности запросов API. |
После отправки запроса API вы получите ответ 202
, указывающий на успешное выполнение. Извлеките значение operation-location
из заголовков ответа. Оно будет иметь следующий формат:
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/jobs/{JOB-ID}?api-version={API-VERSION}
JOB-ID
используется для идентификации запроса, так как эта операция является асинхронной. Используйте этот URL-адрес для получения кода JSON экспортированного проекта с применением того же способа проверки подлинности.
Получение сведений о состоянии задания на экспорт
Замените заполнители в следующем запросе своими значениями {PRIMARY-ENDPOINT}
и {PRIMARY-RESOURCE-KEY}
, полученными на первом шаге.
Используйте указанный ниже запрос GET, чтобы проверить состояние задания на экспорт. Используйте URL-адрес, полученный на предыдущем шаге, или замените приведенные ниже значения заполнителей собственными значениями.
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/export/jobs/{JOB-ID}?api-version={API-VERSION}
Заголовки
Используйте следующий заголовок для проверки подлинности запроса.
Ключ | Описание | Значение |
---|---|---|
Ocp-Apim-Subscription-Key |
Ключ к ресурсу. Используется для проверки подлинности запросов API. | {YOUR-PRIMARY-RESOURCE-KEY} |
Текст ответа
{
"resultUrl": "{Endpoint}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/export/jobs/xxxxxx-xxxxx-xxxxx-xx/result?api-version={API-VERSION}",
"jobId": "xxxx-xxxxx-xxxxx-xxx",
"createdDateTime": "2022-04-18T15:23:07Z",
"lastUpdatedDateTime": "2022-04-18T15:23:08Z",
"expirationDateTime": "2022-04-25T15:23:07Z",
"status": "succeeded"
}
Вставьте в текст URL-адрес из ключа resultUrl
, чтобы просмотреть экспортированные ресурсы из этого задания.
Получение результатов экспорта
Отправьте запрос GET, используя {RESULT-URL}
(получено на предыдущем шаге), чтобы просмотреть результаты задания экспорта.
Заголовки
Используйте следующий заголовок для проверки подлинности запроса.
Ключ | Описание | Значение |
---|---|---|
Ocp-Apim-Subscription-Key |
Ключ к вашему ресурсу. Используется для проверки подлинности запросов API. | {PRIMARY-RESOURCE-KEY} |
Скопируйте текст ответа — он будет использоваться в качестве текста для следующего задания на импорт.
Импорт в новый проект
Теперь импортируйте экспортированные ресурсы проекта в новый проект в дополнительном регионе, чтобы можно было выполнить его репликацию.
Отправка задания на импорт
Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT}
и {SECONDARY-RESOURCE-KEY}
, полученными на первом шаге.
Отправьте запрос POST, используя указанный ниже URL-адрес, заголовки и текст JSON, чтобы импортировать проект.
Запросить URL-адрес
При создании запроса API используйте следующий URL-адрес. Замените значения заполнителей собственными значениями.
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/:import?api-version={API-VERSION}
Заголовки
Используйте следующий заголовок для проверки подлинности запроса.
Ключ | Значение |
---|---|
Ocp-Apim-Subscription-Key |
Ключ к вашему ресурсу. Используется для проверки подлинности запросов API. |
Тело
Текст JSON, который вы отправляете, аналогичен следующему примеру. Дополнительные сведения об объекте JSON см. в справочной документации .
{
"projectFileVersion": "{API-VERSION}",
"stringIndexType": "Utf16CodeUnit",
"metadata": {
"projectKind": "Conversation",
"settings": {
"confidenceThreshold": 0.7
},
"projectName": "{PROJECT-NAME}",
"multilingual": true,
"description": "Trying out CLU",
"language": "{LANGUAGE-CODE}"
},
"assets": {
"projectKind": "Conversation",
"intents": [
{
"category": "intent1"
},
{
"category": "intent2"
}
],
"entities": [
{
"category": "entity1"
}
],
"utterances": [
{
"text": "text1",
"dataset": "{DATASET}",
"intent": "intent1",
"entities": [
{
"category": "entity1",
"offset": 5,
"length": 5
}
]
},
{
"text": "text2",
"language": "{LANGUAGE-CODE}",
"dataset": "{DATASET}",
"intent": "intent2",
"entities": []
}
]
}
}
Ключ | Заполнитель | Значение | Пример |
---|---|---|---|
{API-VERSION} |
Версия вызываемого API. | 2023-04-01 |
|
projectName |
{PROJECT-NAME} |
Имя проекта. Это значение учитывает регистр. | EmailAppDemo |
language |
{LANGUAGE-CODE} |
Строка, указывающая код языка для речевых фрагментов, используемых в проекте. Если проект является многоязычным, выберите код языка большинства речевых фрагментов. | en-us |
multilingual |
true |
Логическое значение, которое позволяет иметь документы на нескольких языках в наборе данных. При развертывании модели можно запрашивать модель на любом поддерживаемом языке , включая языки, которые не включены в учебные документы. | true |
dataset |
{DATASET} |
Для получения сведений о разделении данных на тестовые и обучающие наборы см. раздел Обучение модели. Возможные значения для этого поля: Train и Test . |
Train |
При успешном запросе ответ API будет содержать заголовок с URL-адресом operation-location
, который можно использовать для проверки состояния задания импорта. Форматируется следующим образом:
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/import/jobs/{JOB-ID}?api-version={API-VERSION}
Получение сведений о состоянии задания на импорт
Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT}
и {SECONDARY-RESOURCE-KEY}
, полученными на первом шаге.
При отправке успешного запроса на импорт проекта полный URL-адрес для проверки состояния задания импорта (включая конечную точку, имя проекта и идентификатор задания) содержится в заголовке ответа operation-location
.
Используйте указанный ниже запрос GET, чтобы проверить состояние задания на импорт. Вы можете использовать URL-адрес, полученный на предыдущем шаге, или заменить значения заполнителей собственными значениями.
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/import/jobs/{JOB-ID}?api-version={API-VERSION}
Заголовки
Используйте следующий заголовок для проверки подлинности запроса.
Ключ | Описание | Значение |
---|---|---|
Ocp-Apim-Subscription-Key |
Ключ к вашему ресурсу. Используется для проверки подлинности запросов API. | {YOUR-PRIMARY-RESOURCE-KEY} |
Текст ответа
После отправки запроса вы получите следующий ответ. Продолжайте опрос этой конечной точки до тех пор, пока значение параметра Состояние не изменится на "Выполнено".
{
"jobId": "xxxxx-xxxxx-xxxx-xxxxx",
"createdDateTime": "2022-04-18T15:17:20Z",
"lastUpdatedDateTime": "2022-04-18T15:17:22Z",
"expirationDateTime": "2022-04-25T15:17:20Z",
"status": "succeeded"
}
Обучение модели
После импорта проекта вы скопировали только ресурсы и метаданные проекта. Вам по-прежнему нужно обучить модель, а для этого необходимо использовать вашу учетную запись.
Отправка задания обучения
Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT}
и {SECONDARY-RESOURCE-KEY}
, полученными на первом шаге.
Создайте запрос POST, используя указанный ниже URL-адрес, заголовки и текст JSON, чтобы запустить задание обучения.
Запросить URL-адрес
При создании запроса API используйте следующий URL-адрес. Замените значения заполнителей собственными значениями.
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/:train?api-version={API-VERSION}
Заголовки
Используйте следующий заголовок для проверки подлинности запроса.
Ключ | Значение |
---|---|
Ocp-Apim-Subscription-Key |
Ключ к вашему ресурсу. Используется для проверки подлинности запросов API. |
Текст запроса
Используйте в запросе следующий объект. Модель будет названа в соответствии со значением параметра modelLabel
, используемым после завершения обучения.
{
"modelLabel": "{MODEL-NAME}",
"trainingMode": "{TRAINING-MODE}",
"trainingConfigVersion": "{CONFIG-VERSION}",
"evaluationOptions": {
"kind": "percentage",
"testingSplitPercentage": 20,
"trainingSplitPercentage": 80
}
}
Ключ | Заполнитель | Значение | Пример |
---|---|---|---|
modelLabel |
{MODEL-NAME} |
Название вашей модели. | Model1 |
trainingConfigVersion |
{CONFIG-VERSION} |
Версия модели конфигурации обучения. По умолчанию используется последняя версия модели. | 2022-05-01 |
trainingMode |
{TRAINING-MODE} |
Используемый режим обучения. Поддерживаемые режимы — это Стандартное обучение (ускоренное обучение, доступное только на английском языке) и Расширенное обучение (поддерживающее другие языки и многоязычные проекты, но предусматривающее более длительное время обучения). Узнайте больше о режимах обучения. | standard |
kind |
percentage |
Методы разделения. Возможные значения: percentage и manual . Дополнительные сведения см. в статье об обучении модели. |
percentage |
trainingSplitPercentage |
80 |
Процент помеченных тегами данных, которые будут включены в набор для обучения. Рекомендуемое значение — 80 . |
80 |
testingSplitPercentage |
20 |
Процент помеченных тегами данных, которые будут включены в набор для тестирования. Рекомендуемое значение — 20 . |
20 |
Примечание.
trainingSplitPercentage
и testingSplitPercentage
требуются только в том случае, если для Kind
задано значение percentage
, а сумма процентных значений должна быть равна 100.
После отправки запроса API вы получите ответ 202
, указывающий на успешное выполнение. Извлеките значение operation-location
из заголовков ответа. Оно будет иметь следующий формат:
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}?api-version={API-VERSION}
Этот URL-адрес позволяет получить текущее состояние задания обучения.
Получить статус обучения
Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT}
и {SECONDARY-RESOURCE-KEY}
, полученными на первом шаге.
При отправке успешного запроса на обучение полный URL-адрес запроса для проверки состояния задания (включая конечную точку, имя проекта и идентификатор задания) содержится в заголовке ответа operation-location
.
Используйте следующий запрос GET, чтобы получить состояние хода обучения модели. Замените значения заполнителей ниже собственными значениями.
Запросить URL-адрес
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/train/jobs/{JOB-ID}?api-version={API-VERSION}
Заголовки
Используйте следующий заголовок для проверки подлинности запроса.
Ключ | Значение |
---|---|
Ocp-Apim-Subscription-Key |
Ключ к вашему ресурсу. Используется для проверки подлинности запросов API. |
Ответное тело
После отправки запроса вы получите следующий ответ. Продолжайте опрос этой конечной точки до тех пор, пока значение параметра Состояние не изменится на "Выполнено".
{
"result": {
"modelLabel": "{MODEL-LABEL}",
"trainingConfigVersion": "{TRAINING-CONFIG-VERSION}",
"trainingMode": "{TRAINING-MODE}",
"estimatedEndDateTime": "2022-04-18T15:47:58.8190649Z",
"trainingStatus": {
"percentComplete": 3,
"startDateTime": "2022-04-18T15:45:06.8190649Z",
"status": "running"
},
"evaluationStatus": {
"percentComplete": 0,
"status": "notStarted"
}
},
"jobId": "xxxxx-xxxxx-xxxx-xxxxx-xxxx",
"createdDateTime": "2022-04-18T15:44:44Z",
"lastUpdatedDateTime": "2022-04-18T15:45:48Z",
"expirationDateTime": "2022-04-25T15:44:44Z",
"status": "running"
}
Ключ | Значение | Пример |
---|---|---|
modelLabel |
имя модели; | Model1 |
trainingConfigVersion |
Версия конфигурации обучения. По умолчанию используется последняя версия. | 2022-05-01 |
trainingMode |
Выбранный режим обучения. | standard |
startDateTime |
Время начала обучения | 2022-04-14T10:23:04.2598544Z |
status |
Состояние обучающей задачи. | running |
estimatedEndDateTime |
Предполагаемое время завершения задания обучения. | 2022-04-14T10:29:38.2598544Z |
jobId |
Идентификатор вашего задания обучения. | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxx |
createdDateTime |
Дата и время создания задания обучения. | 2022-04-14T10:22:42Z |
lastUpdatedDateTime |
Дата и время последнего обновления задания обучения | 2022-04-14T10:23:45Z |
expirationDateTime |
Дата и время истечения срока действия задания обучения | 2022-04-14T10:22:42Z |
Разверните вашу модель
На этом шаге вы делаете свою обученную модель доступной для использования через API прогнозирования среды выполнения.
Совет
Используйте то же имя развертывания, что и для основного проекта, чтобы упростить обслуживание и внести минимальные изменения в систему для обработки перенаправления трафика.
Отправка задания развертывания
Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT}
и {SECONDARY-RESOURCE-KEY}
, полученными на первом шаге.
Создайте запрос PUT, используя следующий URL-адрес, заголовки и текст JSON, чтобы начать развертывание модели распознавания разговорной речи.
Запросить URL-адрес
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/deployments/{DEPLOYMENT-NAME}?api-version={API-VERSION}
Заголовки
Используйте следующий заголовок для проверки подлинности запроса.
Ключ | Значение |
---|---|
Ocp-Apim-Subscription-Key |
Ключ к вашему ресурсу. Используется для проверки подлинности запросов API. |
Тело запроса
{
"trainedModelLabel": "{MODEL-NAME}",
}
Ключ | Заполнитель | Значение | Пример |
---|---|---|---|
меткаОбученнойМодели | {MODEL-NAME} |
Имя модели, которое будет присвоено вашему развертыванию. Назначать можно только успешно обученные модели. Значение чувствительно к регистру. | myModel |
После отправки запроса API вы получите ответ 202
, указывающий на успешное выполнение. Извлеките значение operation-location
из заголовков ответа. Оно будет иметь следующий формат:
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/deployments/{DEPLOYMENT-NAME}/jobs/{JOB-ID}?api-version={API-VERSION}
Этот URL-адрес можно использовать для получения состояния задания развертывания.
Узнать состояние развертывания
Замените заполнители в следующем запросе своими значениями {SECONDARY-ENDPOINT}
и {SECONDARY-RESOURCE-KEY}
, полученными на первом шаге.
При отправке успешного запроса развертывания полный URL-адрес запроса для проверки состояния задания (включая конечную точку, имя проекта и идентификатор задания) содержится в заголовке ответа operation-location
.
Используйте указанный ниже запрос GET для запроса состояния задания развертывания. Замените значения заполнителей собственными значениями.
Запросить URL-адрес
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}/deployments/{DEPLOYMENT-NAME}/jobs/{JOB-ID}?api-version={API-VERSION}
Заголовки
Используйте следующий заголовок для проверки подлинности запроса.
Ключ | Значение |
---|---|
Ocp-Apim-Subscription-Key |
Ключ к вашему ресурсу. Используется для проверки подлинности запросов API. |
Содержимое ответа
После отправки запроса вы получите следующий ответ. Продолжайте опрос этой конечной точки до тех пор, пока значение параметра Состояние не изменится на "Выполнено".
{
"jobId":"{JOB-ID}",
"createdDateTime":"{CREATED-TIME}",
"lastUpdatedDateTime":"{UPDATED-TIME}",
"expirationDateTime":"{EXPIRATION-TIME}",
"status":"running"
}
Изменения при вызове среды выполнения
В системе на этапе вызова API среды выполнения проверьте код ответа, возвращаемого с API отправки задачи. Если вы наблюдаете постоянный сбой при отправке запроса, возможной причиной этому может быть нарушение работоспособности в основном регионе. Однократный сбой не указывает на нарушение работоспособности и может быть временной проблемой. Попробуйте отправить задание через созданный дополнительный ресурс. Для второго запроса используйте свой {YOUR-SECONDARY-ENDPOINT}
и дополнительный ключ; если вы выполнили описанные выше действия, {PROJECT-NAME}
и {DEPLOYMENT-NAME}
будут одинаковыми, поэтому для текста запроса изменения не потребуются.
Если вы вернетесь к использованию дополнительного ресурса, задержка немного увеличится из-за разницы в регионах, где развернута модель.
Проверьте, не рассинхронизированы ли ваши проекты
Поддержание актуальности обоих проектов является важной частью процесса. Необходимо регулярно проверять, вносились ли какие-нибудь обновления в основной проект, чтобы перемещать их в дополнительный проект. Таким образом, если в основном регионе произойдет сбой и вы перейдете в дополнительный регион, вы сможете рассчитывать на схожую производительность модели, так как она уже содержит последние обновления. Установка частоты проверки синхронизации проектов является важным аспектом. Мы рекомендуем проводить эту проверку ежедневно, чтобы гарантировать актуальность данных в дополнительной модели.
Получение сведений о проекте
Используйте следующий URL-адрес, чтобы получить сведения о проекте. Один из ключей, возвращаемых в тексте, указывает дату последнего изменения проекта. Повторите следующий шаг дважды — один раз для основного проекта и второй для дополнительного проекта. Сравните полученные для них метки времени и убедитесь, что проекты синхронизированы.
Используйте следующий запрос GET для получения сведений о проекте. Используйте URL-адрес, полученный на предыдущем шаге, или замените приведенные ниже значения заполнителей собственными значениями.
{ENDPOINT}/language/authoring/analyze-conversations/projects/{PROJECT-NAME}?api-version={API-VERSION}
Заголовки
Используйте следующий заголовок для проверки подлинности запроса.
Ключ | Описание | Значение |
---|---|---|
Ocp-Apim-Subscription-Key |
Ключ к вашему ресурсу. Используется для проверки подлинности запросов API. | {YOUR-PRIMARY-RESOURCE-KEY} |
Текст ответа
{
"createdDateTime": "2022-04-18T13:53:03Z",
"lastModifiedDateTime": "2022-04-18T13:53:03Z",
"lastTrainedDateTime": "2022-04-18T14:14:28Z",
"lastDeployedDateTime": "2022-04-18T14:49:01Z",
"projectKind": "Conversation",
"projectName": "{PROJECT-NAME}",
"multilingual": true,
"description": "This is a sample conversation project.",
"language": "{LANGUAGE-CODE}"
}
Повторите те же шаги для реплицируемого проекта с помощью {SECONDARY-ENDPOINT}
и {SECONDARY-RESOURCE-KEY}
. Сравните возвращённый lastModifiedDateTime
из обоих проектов. Если ваш основной проект был изменен раньше, чем дополнительный, необходимо повторить шаги по экспорту, импорту, обучению и развертыванию модели.
Следующие шаги
Из этой статьи вы узнали, как с помощью API экспорта и импорта реплицировать проект в дополнительный языковой ресурс в другом регионе. Далее предлагаем изучить справочную документацию по API, чтобы узнать о других возможностях API разработки.