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


Настройка AutoML для обучения модели обработки естественного языка с помощью Python (предварительная версия)

ОБЛАСТЬ ПРИМЕНЕНИЯ: Пакет SDK для Python версии 1

Внимание

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

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

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

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

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

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

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

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

Задача Синтаксис AutoMLConfig Description
Классификация текста по нескольким классам task = 'text-classification' Существует множество возможных классов, и для каждого примера можно определить ровно один класс. Задача заключается в прогнозировании правильного класса для каждого примера.

Например, классификация киносценария по жанру "Комедия" или "Мелодрама".
Классификация текста по нескольким меткам task = 'text-classification-multilabel' Существует множество возможных классов, и каждому примеру можно назначить любое количество классов. Задача заключается в прогнозировании всех классов для каждого примера.

Например, классификация киносценария по жанру "Комедия", "Мелодрама" или "Комедия и мелодрама".
Распознавание именованных сущностей (NER) task = 'text-ner' Для токенов в последовательностях существует множество возможных тегов. Задача заключается в прогнозировании тегов для всех токенов в каждой последовательности.

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

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

Для экспериментов NLP в автоматизированном ML можно подключить набор данных Машинного обучения Azure в формате .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)
Только для нескольких классов нет
Только для нескольких меток – формат столбца меток должен быть допустимым
— По крайней мере один пример должен иметь 0 или 2+ метки, в противном случае это должна быть multiclass задача
– все метки должны быть в формате str или int без пересечения Не следует одновременно включать метки 1 и '1'
Только для NER — Файл не должен начинаться с пустой строки.
— Каждая строка должна быть пустой строкой или соответствовать формату {token} {label}, где между маркером и меткой нет пробела после метки.
– все метки должны начинаться с I- или B- либо быть в виде O Учет регистра
- Ровно одна пустая линия между двумя примерами
– ровно одна пустая строка в конце файла

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

Возможность NLP автоматизированного ML активируется в рабочем процессе AutoMLConfig, с помощью которого отправляются эксперименты автоматизированного ML для классификации, регрессии и прогнозирования. Большинство параметров, такие как task, compute_target и входные данные, задаются одинаково для подобных экспериментов.

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

  • Можно пропустить primary_metric, так она нужна только для отчетов. В настоящее время автоматизированное ML может обучать только одну модель NLP за запуск, и выбрать модель невозможно.
  • Параметр label_column_name требуется только для задач классификации текста с несколькими классами и метками.
  • Если большинство примеров в наборе данных содержит более 128 слов, это считается широким диапазоном. Для такого сценария можно использовать вариант текста широкого диапазона с параметром enable_long_range_text=True в AutoMLConfig. Это помогает повысить производительность модели, но требует более длительного обучения.
    • Если включить текст широкого диапазона, потребуется GPU с большим объемом памяти, например серии NCv3 или ND.
    • Параметр enable_long_range_text доступен только для задач классификации с несколькими классами.
automl_settings = {
    "verbosity": logging.INFO,
    "enable_long_range_text": True, # # You only need to set this parameter if you want to enable the long-range text setting
}

automl_config = AutoMLConfig(
    task="text-classification",
    debug_log="automl_errors.log",
    compute_target=compute_target,
    training_data=train_dataset,
    validation_data=val_dataset,
    label_column_name=target_column_name,
    **automl_settings
)

Языковые параметры

В рамках возможностей 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.

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

from azureml.automl.core.featurization import FeaturizationConfig

featurization_config = FeaturizationConfig(dataset_language='{your language code}')
automl_config = AutomlConfig("featurization": featurization_config)

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

Вы также можете запускать эксперименты NLP с распределенным обучением в Машинное обучение Azure вычислительном кластере. Автоматизированное ML автоматически их обрабатывает при указании параметров max_concurrent_iterations = number_of_vms и enable_distributed_dnn_training = True в AutoMLConfig во время настройки эксперимента.

max_concurrent_iterations = number_of_vms
enable_distributed_dnn_training = True

Это позволяет планировать распределенное обучение моделей NLP и автоматически масштабировать их по каждому GPU для виртуальной машины или кластера виртуальных машин. Наибольшее допустимое количество виртуальных машин составляет 32. Обучение планируется с количеством виртуальных машин, равным степени двойки.

Примеры записных книжек

См. примеры записных книжек для подробного кода каждой задачи NLP.

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