Добро пожаловать в это руководство о том, как запустить свой первый проект AutoML в Azure с помощью Python SDK! В этом руководстве мы сосредоточимся на классификации с несколькими метками с текстовыми данными с использованием AutoML NLP. AutoML, или автоматизированное машинное обучение, — это быстрорастущая область, которая позволяет разработчикам создавать модели машинного обучения с минимальными усилиями и техническими знаниями. С помощью платформы Azure и Python SDK мы изучим, как построить модель классификации с несколькими метками с помощью AutoML NLP. Итак, давайте начнем и узнаем, как использовать возможности AutoML для быстрого и простого создания надежных моделей машинного обучения.

Предпосылки

  1. Группа ресурсов.
  2. Рабочее место.
  3. Идентификатор подписки.
  4. Установил и импортировал эти библиотеки:
# pip install azure-identity
from azure.identity import DefaultAzureCredential 
# pip install azure-ai-ml
from azure.ai.ml.constants import AssetTypes 
from azure.ai.ml import automl, Input, MLClient

1. Подключитесь к рабочей области машинного обучения Azure.

Для подключения к рабочему пространству нам нужны параметры-идентификаторы: подписка, группа ресурсов и имя рабочего пространства.

Мы будем использовать эти сведения в MLClient из azure.ai.ml, чтобы получить дескриптор необходимой рабочей области машинного обучения Azure.

Итак, давайте создадим наш ml_client :

credentials = DefaultAzureCredential()
subscription_id = "<subscription_id>"
resource_group_name = "<resource_group_name>"
workspace = "<workspace>"
try:
    ml_client = MLClient(credentials, subscription_id, resource_group_name, workspace)
    print("MLClient created")
except Exception as ex:
    print(ex)

2. Подготовка данных

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

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

Убедитесь, что ваш набор данных разделен на 80 % обучения, 10 % проверки и 10 % тестирования.

Поместите каждый раздел в отдельный каталог и добавьте файл MLTable в каждый каталог, как показано на этом изображении:

Где находится файл MLTable:

paths:
  # change this for text.csv and train.csv
  - file: ./validation.csv 
transformations:
  - read_delimited:
      delimiter: ','
      encoding: 'utf8'
      empty_as_string: false

Для получения документации по созданию собственных ресурсов MLTable для заданий, выходящих за рамки этого руководства:

1. Подробности о том, как писать MLTable YAML (требуется для каждого актива MLTable).

2. Как с ними работать в v2 CLI/SDK.

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

Наконец, давайте прочитаем наши данные (вы можете читать их как угодно).

# MLTable folders
training_mltable_path = "./trainData/"
validation_mltable_path = "./validationData/"

# Training MLTable defined locally, with local data to be uploaded
my_training_data_input = Input(type=AssetTypes.MLTABLE, path=training_mltable_path)

# Validation MLTable defined locally, with local data to be uploaded
my_validation_data_input = Input(type=AssetTypes.MLTABLE, path=validation_mltable_path)

3. Настройте задание обучения AutoML NLP Text Classification Multilabel.

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

from azure.ai.ml.entities import AmlCompute
from azure.core.exceptions import ResourceNotFoundError

compute_name = "mwk"

try:
    _ = ml_client.compute.get(compute_name)
    print("Found existing compute target.")
except ResourceNotFoundError:
    print("Creating a new compute target...")
    compute_config = AmlCompute(
        name=compute_name,
        type="amlcompute",
        size="Standard_NC6", # a GPU compute target
        idle_time_before_scale_down=120,
        min_instances=0,
        max_instances=4,
    )
    # Finally, the new compute target is created using ml_client.begin_create_or_update(compute_config).result(). 
    # The .result() method ensures that the creation operation completes before moving on to the next step of the code.
    ml_client.begin_create_or_update(compute_config).result()

Теперь мы хотим создать новый эксперимент с несколькими метками классификации текста, используя функцию автоматического машинного обучения Azure Machine Learning (AutoML) с указанными параметрами конфигурации.

# Create the AutoML job with the related factory-function.
exp_name = "dpv2-nlp-multilabel"
exp_timeout = 120
text_classification_multilabel_job = automl.text_classification_multilabel(
    compute=compute_name,
    experiment_name=exp_name,
    training_data=trainData,
    validation_data=validationData,
    target_column_name="terms",
    primary_metric="accuracy", # specifies the evaluation metric to be used to compare the performance of different models during the AutoML experiment.
    tags={"Name": "BigData-Text-Classification-Multilabel"},
)
text_classification_multilabel_job.set_limits(timeout_minutes=exp_timeout)

После настройки конфигурации эксперимента AutoML text_classification_multilabel_job.set_limits(timeout_minutes=exp_timeout) используется для установки максимального времени, в течение которого может выполняться эксперимент.

После завершения настройки и установки времени ожидания можно запустить эксперимент AutoML с помощью text_classification_multilabel_job.fit() для обучения нескольких моделей и поиска наиболее эффективной модели на основе указанной оценочной метрики.

4. Запустите обучающее задание AutoML NLP Text Classification Multilabel.

Бегать:

returned_job = ml_client.jobs.create_or_update(
    text_classification_multilabel_job
)  # submit the job to the backend
print(f"Created job: {returned_job}")

Метод ml_client.jobs.create_or_update() вызывается с объектом text_classification_multilabel_job в качестве аргумента. Этот метод создает новое задание или обновляет существующее задание с указанной конфигурацией эксперимента. Метод create_or_update() возвращает объект задания, представляющий задание в серверной части службы машинного обучения Azure.

Переменная returned_job присваивается объекту задания, возвращаемому методом create_or_update(). Объект задания содержит информацию о задании, например его идентификатор, статус и историю выполнения.

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

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

ml_client.jobs.stream(returned_job.name) # The actual execution of the job is started using the ml_client.jobs.stream() method.
# It also prints a link to Microsoft Azure Machine Learning Studio to track the job

Если вы открыли выходную ссылку, вы можете увидеть, что ваша работа работает следующим образом:

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

5. Получите информацию о модели из лучшей пробной версии модели.

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

# Obtain best child run id
returned_nlp_job = ml_client.jobs.get(name=returned_job.name)
best_child_run_id = returned_nlp_job.tags["automl_best_child_run_id"]

# Obtain the tracking URI for MLFlow
# pip install azureml-mlflow
import mlflow

# Obtain the tracking URL from MLClient
MLFLOW_TRACKING_URI = ml_client.workspaces.get(
    name=ml_client.workspace_name
).mlflow_tracking_uri
# Set the MLFLOW TRACKING URI
mlflow.set_tracking_uri(MLFLOW_TRACKING_URI)
print("\nCurrent tracking uri: {}".format(mlflow.get_tracking_uri()))

Получить родительское задание AutoML

# pip install azureml-mlflow
from mlflow.tracking.client import MlflowClient

# Get the AutoML parent Job
job_name = returned_job.name

# Get the parent run
mlflow_parent_run = mlflow_client.get_run(job_name)

print("Parent Run: ")
print(mlflow_parent_run)

Получить лучший дочерний запуск AutoML:

best_run = mlflow_client.get_run(best_child_run_id)
# OR
# best_child_run_id = mlflow_parent_run.data.tags["automl_best_child_run_id"]
print("Best child run: ")
print(best_run)

print("Best child run metrics: ")
print(best_run.data.metrics)

6. Загрузите лучшую модель локально

Получите доступ к результатам (например, к моделям, артефактам и метрикам) ранее завершенного запуска AutoML.

import os
from mlflow.artifacts import download_artifacts

# Create local folder
local_dir = "./artifact_downloads"
if not os.path.exists(local_dir):
    os.mkdir(local_dir)
# Download run's artifacts/outputs
local_path = download_artifacts(
    run_id=best_run.info.run_id, artifact_path="outputs", dst_path=local_dir
)
print("Artifacts downloaded in: {}".format(local_path))
print("Artifacts: {}".format(os.listdir(local_path)))

Вы можете отобразить содержимое папки модели MLFlow, используя:os.listdir(“./artifact_downloads/outputs/mlflow-model”)

Заключение

В заключение я надеюсь, что это руководство было полезным для введения в создание модели классификации с несколькими метками с текстовыми данными с использованием AutoML NLP в Azure. Благодаря возможностям автоматизированного машинного обучения и удобству Python SDK разработчики могут создавать точные и надежные модели с минимальными усилиями и техническими знаниями. Следуя шагам, описанным в этом руководстве, вы сможете быстро создать и развернуть свой первый проект AutoML в Azure, открыв целый мир возможностей для своих приложений машинного обучения. Я призываю вас продолжить изучение и поэкспериментировать с различными наборами данных и конфигурациями, чтобы раскрыть весь потенциал AutoML в Azure.

Спасибо за чтение и удачного кодирования!

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

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

Это руководство было сильно адаптировано из этого гайда.

👋 Если вы считаете это полезным, пожалуйста, несколько раз нажмите кнопку аплодисментов 👏 ниже, чтобы выразить свою поддержку автору 👇

🚀Присоединяйтесь к сообществу разработчиков FAUN и получайте похожие истории в свой почтовый ящик каждую неделю