Поделиться через


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

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)

Ознакомившись с этой статьей, вы научитесь обучать модели обработки естественного языка (NLP) с помощью автоматизированного машинного обучения в пакете Машинного обучения Azure. Модели NLP можно создавать с помощью автоматизированного машинного обучения с помощью пакета SDK для Python версии 2 Машинное обучение Azure или Машинное обучение Azure CLI версии 2.

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

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

Необходимые компоненты

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

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

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

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

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

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

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

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

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

Задача Синтаксис задания AutoML Description
Классификация текста по нескольким классам 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)
Только для нескольких классов нет
Только для нескольких меток – формат столбца меток должен быть допустимым
— По крайней мере один пример должен иметь 0 или 2+ метки, в противном случае это должна быть 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 маркеров, считается длинным диапазоном.
    • Чтобы использовать функцию текста с длинным диапазоном, следует использовать NC6 или более поздние номера SKU для GPU, например серии NCv3 или серии ND .

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

Для заданий автоматизированного машинного обучения 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 вычислительном кластере.

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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
  • роберта-база
  • роберта-большой
  • 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.

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

Это позволяет использовать эффективный размер пакета, который 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 Значение распада веса при оптимизаторе имеет значение оптимизатора, адама или адама. Должно быть значением типа float в диапазоне [0, 1].

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

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

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

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

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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

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

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

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

ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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
  • Все связанные параметры очистки можно настроить, как показано в этом примере.

    ОБЛАСТЬ ПРИМЕНЕНИЯ: расширение машинного обучения 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. Эти кластеры обычно имеют результаты обучения, которые довольно стабильны.

    Следующие шаги