Настройка AutoML для обучения модели обработки естественного языка

ПРИМЕНИМО К:Расширение машинного обучения Azure CLI версии 2 (в настоящее время)Пакет SDK для Python azure-ai-ml версии 2 (текущая версия)

Ознакомившись с этой статьей, вы научитесь обучать модели обработки естественного языка (NLP) с помощью автоматизированного машинного обучения в пакете Машинного обучения Azure. Вы можете создавать модели NLP с помощью автоматизированного машинного обучения с помощью пакета SDK Python для Машинного обучения Azure версии 2 или ИНТЕРФЕЙСА командной строки Машинного обучения Azure версии 2.

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

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

Предварительные требования

ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)

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

  • Рабочая область Машинного обучения Azure с вычислительными ресурсами обучения GPU. Сведения о создании рабочей области см. в разделе Создание ресурсов рабочей области. Дополнительные сведения об экземплярах GPU, предоставляемых Azure, см. в статье Размеры виртуальных машин, оптимизированных для GPU .

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

    В некоторых вариантах использования NLP, таких как наборы данных не на английском языке и документы с увеличенным диапазоном, необходима поддержка многоязычных моделей и моделей с увеличенной наибольшей длиной последовательности. Вследствие этого в таких сценариях для обучения модели может потребоваться память GPU большего размера, например серии NCv3 или ND.

  • Установленное CLI для Машинного обучения Azure версии 2. Руководство по обновлению и установке последней версии см. в разделе Установка и настройка CLI (версия 2).

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

Выбор задачи NLP

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

Задача Синтаксис задания AutoML Описание
Классификация текста по нескольким классам CLI (версия 2): text_classification
Пакет SDK (версия 2): text_classification()
Существует множество возможных классов, и для каждого примера можно определить ровно один класс. Задача заключается в прогнозировании правильного класса для каждого примера.

Например, классифицировать сценарий фильма как "Комедия" или "Романтический".
Классификация текста по нескольким меткам CLI (версия 2): text_classification_multilabel
Пакет SDK (версия 2): text_classification_multilabel()
Существует множество возможных классов, и каждому примеру можно назначить любое количество классов. Задача заключается в прогнозировании всех классов для каждого примера.

Например, можно классифицировать сценарий фильма как "Комедия", "Романтический" или "Комедия и романтик".
Распознавание именованных сущностей (NER) CLI версии 2:text_ner
Пакет SDK (версия 2): text_ner()
Для токенов в последовательностях существует множество возможных тегов. Задача заключается в прогнозировании тегов для всех токенов в каждой последовательности.

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

Пороговое значение

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

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

Для экспериментов NLP в автоматизированном машинном обучении (ML) можно подключить ваши данные в формате .csv, чтобы выполнять классификацию по нескольким классам или меткам. Для задач распознавания именованных сущностей (NER) поддерживаются файлы .txt с двумя столбцами, которые используют пробел в качестве разделителя и придерживаются формата CoNLL. В следующих разделах приведены сведения о формате данных, принятом для каждой задачи.

Несколько классов

Для классификации по нескольким классам набор данных может содержать несколько текстовых столбцов и ровно один столбец меток. В следующем примере содержится один текстовый столбец.

text,labels
"I love watching Chicago Bulls games.","NBA"
"Tom Brady is a great player.","NFL"
"There is a game between Yankees and Orioles tonight","MLB"
"Stephen Curry made the most number of 3-Pointers","NBA"

Несколько меток

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

Варианты формата столбца меток Несколько меток Одна метка Нет меток
с обычным текстом; "label1, label2, label3" "label1" ""
Список Python с кавычками "['label1','label2','label3']" "['label1']" "[]"

Важно!

Для чтения меток в этих форматах используются разные средства синтаксического анализа. Если вы применяете формат обычного текста, в метках можно использовать только буквенно-цифровые символы и '_'. Все остальные символы будут распознаваться как разделители меток.

Например, если ваша метка называется "cs.AI", она будет распознана как "cs" и "AI". В формате списка Python метка будет выглядеть как "['cs.AI']" и будет распознана как "cs.AI".

Пример данных в формате обычного текста для классификации с несколькими метками.

text,labels
"I love watching Chicago Bulls games.","basketball"
"The four most popular leagues are NFL, MLB, NBA and NHL","football,baseball,basketball,hockey"
"I like drinking beer.",""

Пример данных в формате списка Python с кавычками для классификации с несколькими метками.

text,labels
"I love watching Chicago Bulls games.","['basketball']"
"The four most popular leagues are NFL, MLB, NBA and NHL","['football','baseball','basketball','hockey']"
"I like drinking beer.","[]"

Распознавание именованных сущностей (NER)

В отличие от классификации с несколькими классами или метками, для которых нужны наборы данных в формате .csv, для распознавания именованных сущностей требуется формат CoNLL. Файл должен содержать ровно два столбца, а токен и метка в каждой строке должны быть разделены одним пробелом.

Например,

Hudson B-loc
Square I-loc
is O
a O
famous O
place O
in O
New B-loc
York I-loc
City I-loc

Stephen B-per
Curry I-per
got O
three O
championship O
rings O

Проверка данных

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

Примечание

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

Задача Проверка данных
Все задачи Требуется как минимум 50 примеров для обучения
Несколько классов и несколько меток Данные для обучения и проверки должны содержать:
– одинаковый набор столбцов
– одинаковый порядок столбцов слева направо
– одинаковый тип данных в столбцах с теми же именами
– как минимум две уникальные метки
– уникальные имена столбцов в каждом наборе данных (например, набор для обучения не должен содержать несколько столбцов Age)
Только для нескольких классов Нет
Только для нескольких меток – формат столбца меток должен быть допустимым
– как минимум один пример должен либо не содержать меток, либо содержать более двух, иначе получится задача multiclass
– все метки должны быть в формате str или int без пересечения У вас не должно быть как метки 1 , так и метки '1'
Только для NER — файл не должен начинаться с пустой строки.
— Каждая строка должна быть пустой или соответствовать формату {token} {label}, где между маркером и меткой есть ровно один пробел, а после метки нет пробелов.
– все метки должны начинаться с I- или B- либо быть в виде O С учетом регистра
– ровно одна пустая строка между двумя примерами
– ровно одна пустая строка в конце файла

Настройка эксперимента

Возможность NLP автоматизированного машинного обучения активируется в рабочем процессе automl, с помощью которого отправляются эксперименты автоматизированного машинного обучения для классификации, регрессии и прогнозирования. Параметры, такие как experiment_name, compute_name и входные данные, задаются одинаково для подобных экспериментов.

Однако есть значительные различия:

  • Вы можете игнорировать primary_metric, так как он используется только для создания отчетов. В настоящее время автоматизированное ML может обучать только одну модель NLP за запуск, и выбрать модель невозможно.
  • Параметр label_column_name требуется только для задач классификации текста с несколькими классами и метками.
  • Если более 10 % выборок в наборе данных содержат более 128 маркеров, это считается большим диапазоном.
    • Чтобы использовать функцию текста в длинном диапазоне, следует использовать номера SKU NC6 или более высокого уровня для GPU, например серии NCv3 или ND .

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

Для автоматизированных заданий ML CLI версии 2 эксперимент настраивается в YAML-файле, как показано ниже.

языковые параметры;

В рамках возможностей NLP автоматизированное ML поддерживает 104 языка с использованием предварительно обученных языковых и многоязычных текстовых моделей глубокой нейронной сети, например семейство моделей BERT. В настоящее время по умолчанию выбран английский язык.

В следующей таблице описывается применение моделей в зависимости от типа и языка задач. См. полный список поддерживаемых языков и их кодов.

Тип задачи Синтаксис для dataset_language Алгоритм текстовой модели
Классификация текста по нескольким меткам "eng"
"deu"
"mul"
Языковая модель BERT для английского языка в нижнем регистре
Языковая модель BERT для немецкого языка
Многоязычная языковая модель BERT

Для остальных языков в автоматизированном ML применяется многоязычная языковая модель BERT.
Классификация текста по нескольким классам "eng"
"deu"
"mul"
Языковая модель BERT для английского языка с учетом регистра
Многоязычная языковая модель BERT

Для остальных языков в автоматизированном ML применяется многоязычная языковая модель BERT.
Распознавание именованных сущностей (NER) "eng"
"deu"
"mul"
Языковая модель BERT для английского языка с учетом регистра
Языковая модель BERT для немецкого языка
Многоязычная языковая модель BERT

Для остальных языков в автоматизированном ML применяется многоязычная языковая модель BERT.

ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)

Вы можете указать язык набора данных в разделе конструирования признаков для файла YAML конфигурации. BERT также используется в процессе конструирования признаков при обучении эксперимента автоматизированного машинного обучения. Узнайте больше об интеграции BERT и конструировании признаков в автоматизированном МАШИНном обучении (ПАКЕТ SDK версии 1).

featurization:
   dataset_language: "eng"

Распределенное обучение

Вы также можете выполнять эксперименты NLP с распределенным обучением в вычислительном кластере Машинного обучения Azure.

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

Отправка задания AutoML

ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)

Чтобы отправить задание AutoML, выполните следующую команду CLI версии 2 и укажите для нее путь к файлу yml, имя рабочей области, группу ресурсов и идентификатор подписки.


az ml job create --file ./hello-automl-job-basic.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]

Примеры кода

Очистка модели и настройка гиперпараметров (предварительная версия)

Важно!

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

Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков Microsoft Azure.

AutoML NLP позволяет предоставить список моделей и сочетаний гиперпараметров через пространство поиска гиперпараметров в конфигурации. Hyperdrive создает несколько дочерних запусков, каждый из которых представляет собой тонкую настройку для заданной модели NLP и набор значений гиперпараметров, которые были выбраны и переметены на основе предоставленного пространства поиска.

Поддерживаемые алгоритмы модели

Ниже перечислены все предварительно обученные текстовые модели DNN, доступные в AutoML NLP для точной настройки:

  • bert-base-cased
  • bert-large-uncased
  • bert-base-многоязычный регистр
  • bert-base-german-cased
  • bert-large-cased
  • distilbert-base-cased
  • distilbert-base-uncased
  • роберта-бейс
  • roberta-large
  • distilroberta-base
  • xlm-roberta-base
  • xlm-roberta-large
  • xlnet-base-cased
  • xlnet-large-cased

Обратите внимание, что большие модели больше, чем их базовые аналоги. Как правило, они более производительны, но занимают больше памяти GPU и времени для обучения. Таким образом, их требования к SKU являются более строгими: мы рекомендуем запускать на виртуальных машинах серии ND для достижения наилучших результатов.

Поддерживаемые алгоритмы модели — HuggingFace (предварительная версия)

С помощью новой серверной части, работающей в конвейерах Машинного обучения Azure, вы можете дополнительно использовать любую модель классификации текста и маркеров из HuggingFace Hub для классификации текстов, классификации маркеров , которая является частью библиотеки преобразователей (например, microsoft/deberta-large-mnli). Вы также можете найти проверенный список моделей в реестре моделей Машинного обучения Azure , которые были проверены с помощью компонентов конвейера.

Использование любой модели HuggingFace приведет к запуску с использованием компонентов конвейера. Если используются модели прежних версий и HuggingFace, все запуски и пробные версии будут запускаться с помощью компонентов.

Поддерживаемые гиперпараметры

В следующей таблице описаны гиперпараметры, поддерживаемые AutoML NLP.

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

Это необходимо для использования эффективного размера пакета, который в gradient_accumulation_steps раз больше максимального размера, подходящего для GPU.
Принимаются только положительные целые числа.
learning_rate; Начальная скорость обучения. Должен быть плавающей точкой в диапазоне (0, 1).
learning_rate_scheduler Тип планировщика скорости обучения. Необходимо выбрать один из вариантов linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup.
model_name Имя одной из поддерживаемых моделей. Необходимо выбрать один из вариантов bert_base_cased, bert_base_uncased, bert_base_multilingual_cased, bert_base_german_cased, bert_large_cased, bert_large_uncased, distilbert_base_cased, distilbert_base_uncased, roberta_base, roberta_large, distilroberta_base, xlm_roberta_base, xlm_roberta_large, xlnet_base_cased, xlnet_large_cased.
number_of_epochs Число эпох обучения. Принимаются только положительные целые числа.
training_batch_size Размер пакета, используемого для обучения. Принимаются только положительные целые числа.
validation_batch_size Размер пакета, используемого для проверки. Принимаются только положительные целые числа.
warmup_ratio Отношение общего числа этапов обучения, используемых для линейной прогрева, от 0 до learning_rate. Должно быть значением типа float в диапазоне [0, 1].
weight_decay Значение распада веса, если оптимизатор имеет значение sgd, adam или adamw. Должно быть значением типа float в диапазоне [0, 1].

Все дискретные гиперпараметры разрешают только распределения выбора, такие как гиперпараметры с целым числом training_batch_size и гиперпараметры со строковым типом model_name . Все непрерывные гиперпараметры, такие как learning_rate , поддерживают все распределения.

Настройка параметров очистки

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

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

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

limits: 
  timeout_minutes: 120  
  max_trials: 4 
  max_concurrent_trials: 2 

sweep: 
  sampling_algorithm: grid 
  early_termination: 
    type: bandit 
    evaluation_interval: 10 
    slack_factor: 0.2 

search_space: 
  - model_name: 
      type: choice 
      values: [bert_base_cased, roberta_base] 
    number_of_epochs: 
      type: choice 
      values: [3, 4] 
  - model_name: 
      type: choice 
      values: [distilbert_base_cased] 
    learning_rate: 
      type: uniform 
      min_value: 0.000005 
      max_value: 0.00005 

Методы выборки для очистки

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

Тип выборки Синтаксис задания AutoML
Случайная выборка random
Решетчатая выборка grid
Байесовская выборка bayesian

Бюджет эксперимента

При необходимости можно указать бюджет эксперимента для задания обучения NLP AutoML, используя timeout_minutes параметр в limits — время в минутах до завершения эксперимента. Если ни один из них не указан, время ожидания эксперимента по умолчанию составляет семь дней (максимум 60 дней).

AutoML NLP также поддерживает trial_timeout_minutes, максимальное количество времени в минутах, которое может быть запущено отдельной пробной версией перед завершением, и max_nodesмаксимальное количество узлов из резервного вычислительного кластера, используемого для задания. Эти параметры также относятся к разделу limits .

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

limits: 
  timeout_minutes: 60 
  trial_timeout_minutes: 20 
  max_nodes: 2 

Политика досрочного завершения

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

Узнайте больше о настройке политики раннего завершения для очистки гиперпараметров.

Ресурсы для очистки

Вы можете контролировать ресурсы, затраченные на очистку гиперпараметров путем указания max_trials и max_concurrent_trials для очистки.

Параметр Подробный сведения
max_trials Параметр для максимального количества конфигураций для очистки. Требуется целое число от 1 до 1000. При изучении только гиперпараметров по умолчанию для заданного алгоритма модели присвойте этому параметру значение 1. Значение по умолчанию — 1.
max_concurrent_trials Максимальное количество запусков, которые могут выполняться параллельно. Значение должно быть целым числом от 1 до 100. Значение по умолчанию — 1.

ПРИМЕЧАНИЕ.
  • Количество параллельных прогонов зависит от ресурсов, доступных в заданном целевом объекте вычисления. Убедитесь, что целевой объект вычислений имеет доступные ресурсы для требуемого уровня параллелизма.
  • max_concurrent_trials ограничивается внутренним max_trials значением. Например, если пользователь задает max_concurrent_trials=4, max_trials=2значения будут внутренне обновлены как max_concurrent_trials=2, max_trials=2.
  • Вы можете настроить все параметры очистки, как показано в этом примере.

    ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ML для Azure CLI версии 2 (текущая версия)

    sweep:
      limits:
        max_trials: 10
        max_concurrent_trials: 2
      sampling_algorithm: random
      early_termination:
        type: bandit
        evaluation_interval: 2
        slack_factor: 0.2
        delay_evaluation: 6
    

    Известные проблемы

    Работа с низкими оценками или более высокими значениями потерь:

    Для некоторых наборов данных, независимо от задачи NLP, полученные оценки могут быть очень низкими, иногда даже нулевыми. Эта оценка сопровождается более высокими значениями потерь, что означает, что нейронной сети не удалось свестись. Эти оценки могут возникать чаще на определенных номерах SKU GPU.

    Хотя такие случаи редки, они возможны, и лучший способ их обработки — использовать настройку гиперпараметров и предоставлять более широкий диапазон значений, особенно для гиперпараметров, таких как скорость обучения. Пока наша возможность настройки гиперпараметров не будет доступна в рабочей среде, мы рекомендуем пользователям, у которых возникли эти проблемы, использовать вычислительные кластеры NC6 или ND6. Эти кластеры обычно имеют довольно стабильные результаты обучения.

    Дальнейшие действия