Настройка AutoML для обучения модели обработки естественного языка
ПРИМЕНИМО К:Расширение ml Azure CLI версии 2 (текущая версия)
Пакет SDK для Python azure-ai-ml версии 2 (текущая версия)
Ознакомившись с этой статьей, вы научитесь обучать модели обработки естественного языка (NLP) с помощью автоматизированного машинного обучения в пакете Машинного обучения Azure. Вы можете создавать модели NLP с помощью автоматизированного машинного обучения с помощью пакета SDK Python для Машинного обучения Azure версии 2 или интерфейса командной строки Машинного обучения Azure версии 2.
Автоматизированное машинное обучение (ML) поддерживает обработку естественного языка (NLP), что позволяет специалистам по ML и обработке и анализу данных пользоваться собственными текстовыми данными и создавать пользовательские модели для таких задач, как классификация текста по нескольким классам и меткам, а также распознавание именованных сущностей (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 выполняет проверки входных данных, чтобы обеспечить их корректную предварительную обработку. Если любая из этих проверок заканчивается неудачно, запуск тоже завершается сбоем с соответствующим сообщением об ошибке. Далее описаны требования для прохождения проверок данных для каждой задачи.
Примечание
Одни проверки данных применимы к наборам обучения и проверки, другие — только к набору обучения. Если тестовый набор данных не смог пройти проверку, это означает, что автоматизированное 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 .
ОБЛАСТЬ ПРИМЕНЕНИЯ:расширение Машинного обучения для Azure CLI версии 2 (текущая версия)
Для заданий AutoML для 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 также используется в процессе конструирования признаков обучения с автоматизированным ML. Дополнительные сведения об интеграции BERT и конструировании признаков в автоматизированном ML.
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]
Примеры кода
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение ml для Azure CLI версии 2 (текущая версия)
Ознакомьтесь с указанным ниже примером файлов YAML для каждой задачи NLP.
Очистка модели и настройка гиперпараметров (предварительная версия)
Важно!
Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания. Ее не следует использовать для производственных рабочих нагрузок. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков Microsoft Azure.
AutoML NLP позволяет предоставить список моделей и сочетаний гиперпараметров через пространство поиска гиперпараметров в конфигурации. Hyperdrive создает несколько дочерних запусков, каждый из которых является запуском тонкой настройки для заданной модели NLP и набором значений гиперпараметров, которые были выбраны и переметены на основе предоставленного пространства поиска.
Поддерживаемые алгоритмы модели
Ниже перечислены все предварительно обученные текстовые модели DNN, доступные в AutoML NLP для точной настройки:
- bert_base_cased
- bert_large_uncased
- bert_base_multilingual_cased
- bert_base_german_cased
- bert_large_cased
- distilbert_base_cased
- distilbert_base_uncased
- roberta_base
- roberta_large
- distilroberta_base
- xlm_roberta_base
- xlm_roberta_large
- xlnet_base_cased
- xlnet_large_cased
Обратите внимание, что большие модели значительно больше, чем их базовые аналоги. Как правило, они более производительны, но занимают больше памяти GPU и времени для обучения. Таким образом, их требования к SKU являются более строгими: мы рекомендуем запускать на виртуальных машинах серии ND для достижения наилучших результатов.
Поддерживаемые гиперпараметры
В следующей таблице описаны гиперпараметры, поддерживаемые 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, где мы обнаружили, что результаты обучения довольно стабильны.