Добро пожаловать в это руководство о том, как запустить свой первый проект AutoML в Azure с помощью Python SDK! В этом руководстве мы сосредоточимся на классификации с несколькими метками с текстовыми данными с использованием AutoML NLP. AutoML, или автоматизированное машинное обучение, — это быстрорастущая область, которая позволяет разработчикам создавать модели машинного обучения с минимальными усилиями и техническими знаниями. С помощью платформы Azure и Python SDK мы изучим, как построить модель классификации с несколькими метками с помощью AutoML NLP. Итак, давайте начнем и узнаем, как использовать возможности AutoML для быстрого и простого создания надежных моделей машинного обучения.
Предпосылки
- Группа ресурсов.
- Рабочее место.
- Идентификатор подписки.
- Установил и импортировал эти библиотеки:
# 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).
Не забывайте нажимать кнопки Аплодисменты и Подписаться, чтобы помочь мне написать больше подобных статей.
Наконец, давайте прочитаем наши данные (вы можете читать их как угодно).
# 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.
Спасибо за чтение и удачного кодирования!
Не забывайте нажимать кнопки Аплодисменты и Подписаться, чтобы помочь мне написать больше подобных статей.
Рекомендации
Это руководство было сильно адаптировано из этого гайда.