Общие сведения о создании проектов классификации текстов

Завершено

Пользовательские проекты классификации текстов — это рабочая область для создания, обучения, улучшения и развертывания моделей классификации. Для работы с проектами доступно два способа: с помощью Language Studio и REST API. Language Studio — это графический интерфейс, который будет использоваться в задании, однако REST API предоставляет те же функции. Независимо от того, какой метод вы предпочитаете, этапы разработки модели будут одинаковыми.

Жизненный цикл проекта языка ИИ Azure

Diagram that shows a life cycle with steps to define labels, tag data, train model, view model, improve model, deploy model, and classify text.

  • Определение меток — общие сведения о данных, которые необходимо классифицировать, определение возможных меток, по которым выполняется категоризация. В нашем примере видеоигры используются метки "Экшн", "Приключения", "Стратегия" и т. д.
  • Добавление тегов к данным: добавьте теги или метки для существующих данных, чтобы указать одну или несколько меток, которым соответствует каждый из файлов. Метки данных важны, так как именно по ним ориентируется модель при классификации будущих файлов. Рекомендуется четко различать метки, чтобы избежать неоднозначности и привести хорошие примеры каждой метки, по которой будет обучаться модель. Например, мы помечаем "Quest for the Mine Brush" как "Приключения", а "Flight Trainer" как "Экшн".
  • Обучение модели: обучение модели с помощью помеченных данных. Обучение позволяет модели научиться добавлять метки жанров для различных типов видеоигр.
  • Просмотр модели — после обучения модели просмотрите результаты модели. Ваша модель оценивается в диапазоне от 0 до 1 с учетом точности и полноты протестированных данных. Запишите, какой жанр определялся наименее точно.
  • Улучшение модели — улучшите свою модель, просмотрев классификации, которые не удалось оценить с использованием правильной метки, распределение меток и выяснив, какие данные следует добавить для повышения производительности. Например, вы можете обнаружить, что модель путает игры жанра "Приключения" и "Стратегия". Попробуйте найти дополнительные примеры для каждой метки, чтобы добавить их в набор данных для переобучения модели.
  • Развертывание модели — как только модель достигнет желаемого уровня производительности, разверните ее, чтобы сделать ее доступной посредством API. Модель может называться GameGenres, и после развертывания можно ее использовать для классификации сводок по играм.
  • Классификация текстов — используйте модель для классификации текстов. В задании описывается, как использовать API, и вы можете просмотреть справочник по API

Разделение наборов данных для обучения

При добавлении меток к данным можно указать, к какому набору данных должен относиться каждый файл:

  • Обучение — наборы данных для обучения используются для фактического обучения модели; предоставленные данные и метки передаются в алгоритм машинного обучения, чтобы научить модель, какие данные в какую метку следует классифицировать. Набор данных для обучения будет больше, чем второй набор; рекомендуется, чтобы он содержал примерно 80 % от объема данных с метками.
  • Тестирование — тестовый набор данных — это данные с метками, используемые для проверки модели после обучения. Azure будет принимать данные в тестовом наборе данных, отправлять их в модель и сравнивать выходные данные с метками, которые вы добавили для данных, чтобы определить, насколько качественно работает модель. Результатом этого сравнения является оценка модели, что позволяет понять, как повысить производительность прогнозирования.

На этапе обучения модели доступно два варианта обучения модели.

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

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

Параметры развертывания

Язык ИИ Azure позволяет каждому проекту создавать как несколько моделей, так и несколько развертываний, каждый из которых имеет свое уникальное имя. Одним из преимуществ являются следующие возможности:

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

Примечание.

Для каждого проекта предусмотрено ограничение в 10 имен развертывания

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

<...>
  "tasks": [
    {
      "kind": "CustomSingleLabelClassification",
      "taskName": "MyTaskName",
      "parameters": {
        "projectName": "MyProject",
        "deploymentName": "MyDeployment"
      }
    }
  ]
<...>

Использование REST API

REST API, доступный для службы языка искусственного интеллекта Azure, позволяет разрабатывать проекты языка ИИ Azure таким же образом, как Language Studio предоставляет пользовательский интерфейс для создания проектов. Language Studio рассматривается далее в задании для этого модуля.

Способ использования API

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

Для проверки подлинности каждого запроса требуется заголовок:

Ключ Значение
Ocp-Apim-Subscription-Key Ключ к ресурсу языка ИИ Azure

Отправка первоначального запроса

URL-адрес для отправки запроса зависит от того, на каком этапе вы находитесь, но все они префиксируются с конечной точкой, предоставленной ресурсом языка искусственного интеллекта Azure.

Например, чтобы обучить модель, создайте запрос POST в URL-адресе, который будет иметь примерно следующий вид:

<YOUR-ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/:train?api-version=<API-VERSION>
Заполнитель Значение Пример
<YOUR-ENDPOINT> Конечная точка запроса API https://<your-custom-resource>.cognitiveservices.azure.com
<PROJECT-NAME> Имя проекта (значение учитывает регистр) myProject

Следующий текст будет присоединен к запросу:

    {
        "modelLabel": "<MODEL-NAME>",
        "trainingConfigVersion": "<CONFIG-VERSION>",
        "evaluationOptions": {
            "kind": "percentage",
            "trainingSplitPercentage": 80,
            "testingSplitPercentage": 20
        }
    }
Ключ Значение
<YOUR-MODEL> Имя модели.
trainingConfigVersion Версия модели, используемая для обучения модели.
runValidation Логическое значение для выполнения проверки с тестовым набором.
evaluationOptions Указывает параметры оценки.
kind Указывает тип разделения данных. Может быть percentage, если вы используете автоматическое разделение или set если вы вручную разделяете набор данных
testingSplitPercentage Обязательное поле с целочисленным значением, только если type — это процент. Указывает разделение для тестирования.
trainingSplitPercentage Обязательное поле с целочисленным значением, только если type — это процент. Указывает разделение для обучения.

Ответ на запрос выше будет иметь значение 202, т. е. запрос был успешным. В заголовках ответа захватите значение location, которое будет похоже на следующий URL-адрес:

<ENDPOINT>/language/analyze-text/projects/<PROJECT-NAME>/train/jobs/<JOB-ID>?api-version=<API-VERSION>
Ключ Значение
<JOB-ID> Идентификатор запроса

Этот URL-адрес будет использоваться на следующем этапе для проверки состояния обучения.

Получение состояния обучения

Чтобы получить состояние обучения, используйте URL-адрес из заголовка ответа запроса для отправки запроса GET с тем же заголовком, который предоставляет ключ службы языка искусственного интеллекта Azure для проверки подлинности. Текст ответа выглядит примерно как следующий JSON-файл:

{
  "result": {
    "modelLabel": "<MODEL-NAME>",
    "trainingConfigVersion": "<CONFIG-VERSION>",
    "estimatedEndDateTime": "2023-05-18T15:47:58.8190649Z",
    "trainingStatus": {
      "percentComplete": 3,
      "startDateTime": "2023-05-18T15:45:06.8190649Z",
      "status": "running"
    },
    "evaluationStatus": {
      "percentComplete": 0,
      "status": "notStarted"
    }
  },
  "jobId": "<JOB-ID>",
  "createdDateTime": "2023-05-18T15:44:44Z",
  "lastUpdatedDateTime": "2023-05-18T15:45:48Z",
  "expirationDateTime": "2023-05-25T15:44:44Z",
  "status": "running"
}

Обучение модели может занять некоторое время, поэтому периодически проверяйте этот URL-адрес статуса, пока ответ status не вернет succeeded. После успешного обучения можно просматривать, проверять и развертывать модель.

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

Использование модели для классификации текста соответствует описанному выше запросу, где используется запрос POST для отправки задания и запрос GET для получения результатов.

Отправка текста для классификации

Чтобы использовать модель, отправьте POST в конечную точку анализа по следующему URL-адресу:

<ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
Заполнитель Значение Пример
<YOUR-ENDPOINT> Конечная точка запроса API https://<your-custom-resource>.cognitiveservices.azure.com

Важно!

Обязательно включите ключ ресурса в заголовок для Ocp-Apim-Subscription-Key

Следующая структура JSON будет подключена к запросу:

{
  "displayName": "Classifying documents",
  "analysisInput": {
    "documents": [
      {
        "id": "1",
        "language": "<LANGUAGE-CODE>",
        "text": "Text1"
      },
      {
        "id": "2",
        "language": "<LANGUAGE-CODE>",
        "text": "Text2"
      }
    ]
  },
  "tasks": [
     {
      "kind": "<TASK-REQUIRED>",
      "taskName": "<TASK-NAME>",
      "parameters": {
        "projectName": "<PROJECT-NAME>",
        "deploymentName": "<DEPLOYMENT-NAME>"
      }
    }
  ]
}
Ключ Значение
<TASK-REQUIRED> Запрашиваемая задача. Это задача CustomMultiLabelClassification для проектов с несколькими метками или CustomSingleLabelClassification для проектов с одной меткой
<LANGUAGE-CODE> Языковой код, например en-us.
<TASK-NAME> Имя задачи.
<PROJECT-NAME> Имя проекта.
<DEPLOYMENT-NAME> Имя развертывания.

Ответ на запрос выше будет иметь значение 202, т. е. запрос был успешным. В заголовках ответа найдите значение operation-location, которое будет похоже на следующий URL-адрес:

<ENDPOINT>/language/analyze-text/jobs/<JOB-ID>?api-version=<API-VERSION>
Ключ Значение
<YOUR-ENDPOINT> Конечная точка запроса API
<JOB-ID> Идентификатор запроса

Этот URL-адрес используется для получения результатов задачи.

Получение результатов классификации

Отправьте запрос GET в конечную точку из предыдущего запроса, используя тот же заголовок для проверки подлинности. Текст ответа выглядит примерно как следующий JSON-файл:

{
  "createdDateTime": "2023-05-19T14:32:25.578Z",
  "displayName": "MyJobName",
  "expirationDateTime": "2023-05-19T14:32:25.578Z",
  "jobId": "xxxx-xxxxxx-xxxxx-xxxx",
  "lastUpdateDateTime": "2023-05-19T14:32:25.578Z",
  "status": "succeeded",
  "tasks": {
    "completed": 1,
    "failed": 0,
    "inProgress": 0,
    "total": 1,
    "items": [
      {
        "kind": "customSingleClassificationTasks",
        "taskName": "Classify documents",
        "lastUpdateDateTime": "2022-10-01T15:01:03Z",
        "status": "succeeded",
        "results": {
          "documents": [
            {
              "id": "<DOC-ID>",
              "class": [
                  {
                      "category": "Class_1",
                      "confidenceScore": 0.0551877357
                  }
              ],
              "warnings": []
            }
          ],
          "errors": [],
          "modelVersion": "2022-04-01"
        }
      }
    ]
  }
}

Результат классификации находится в объекте массива results элементов для каждого отправленного документа.