Форк с https://github.com/huggingface/transformers/tree/86d5fb0b360e68de46d40265e7c707fe68c8015b/examples/pytorch/language-modeling от 17 мая 2021 г.
Точная настройка (или обучение с нуля) моделей библиотеки для языкового моделирования на наборе текстовых данных для GPT, GPT-2, ALBERT, BERT, DistilBERT, RoBERTa, XLNet... GPT и GPT-2 обучаются или настраиваются с помощью потеря причинно-следственного языкового моделирования (CLM), в то время как ALBERT, BERT, DistilBERT и RoBERTa обучаются или настраиваются с использованием маскированного языкового моделирования (MLM) потеря. XLNet использует моделирование на языке перестановок (PLM). Дополнительную информацию о различиях между этими целями вы можете найти в обзоре нашей модели.
Предусмотрено два набора скриптов. Первый набор использует Trainer API. Второй набор с суффиксом no_trainer
использует собственный цикл обучения и использует оператор ? Ускорить библиотеку. Оба набора используют ? Библиотека наборов данных. Вы можете легко настроить их в соответствии со своими потребностями, если вам нужна дополнительная обработка наборов данных.
Примечание. Старый скрипт run_language_modeling.py
все еще доступен здесь.
Следующие примеры будут работать с наборами данных, размещенными в нашем хабе, или с вашими собственными текстовыми файлами для обучения и проверки. Ниже мы приводим примеры того и другого.
В следующем примере выполняется тонкая настройка GPT-2 в WikiText-2. Мы используем необработанный WikiText-2 (до токенизации никакие токены не заменялись). Потеря здесь заключается в причинном языковом моделировании.
python run_clm.py
--model_name_or_path gpt2
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-clm
Обучение на одном графическом процессоре K80 занимает около получаса и около одной минуты для выполнения оценки. После точной настройки набора данных он достигает оценки около 20 баллов.
Чтобы запустить собственные файлы обучения и проверки, используйте следующую команду:
python run_clm.py
--model_name_or_path gpt2
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-clm
Для обучения используется встроенный Trainer
HuggingFace Trainer. Если вы хотите использовать собственный цикл обучения, вы можете использовать или адаптировать сценарий run_clm_no_trainer.py
. Взгляните на скрипт, чтобы увидеть список поддерживаемых аргументов. Пример показан ниже:
python run_clm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path gpt2
--output_dir /tmp/test-clm
Следующий пример настраивает RoBERTa на WikiText-2. Здесь мы также используем необработанный WikiText-2. Потери иные, поскольку BERT/RoBERTa имеют двунаправленный механизм; поэтому мы используем ту же потерю, которая использовалась во время их предварительного обучения: моделирование языка в масках.
В соответствии с документом RoBERTa мы используем динамическое маскирование, а не статическое. Таким образом, модель может сходиться немного медленнее (переобучение занимает больше эпох).
python run_mlm.py
--model_name_or_path roberta-base
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-mlm
Чтобы запустить собственные файлы обучения и проверки, используйте следующую команду:
python run_mlm.py
--model_name_or_path roberta-base
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-mlm
Если ваш набор данных организован по одному образцу в строке, вы можете использовать флаг --line_by_line
(в противном случае скрипт объединяет все тексты, а затем разбивает их на блоки одинаковой длины).
Для обучения используется встроенный Trainer
HuggingFace Trainer. Если вы хотите использовать собственный цикл обучения, вы можете использовать или адаптировать сценарий run_mlm_no_trainer.py
. Взгляните на скрипт, чтобы увидеть список поддерживаемых аргументов. Пример показан ниже:
python run_mlm_no_trainer.py
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--model_name_or_path roberta-base
--output_dir /tmp/test-mlm
Примечание. В TPU вам следует использовать флаг --pad_to_max_length
в сочетании с флагом --line_by_line
, чтобы убедиться, что все ваши пакеты имеют одинаковую длину.
Эта часть была перенесена в examples/research_projects/mlm_wwm
.
XLNet использует другую цель обучения — моделирование языка перестановок. Это авторегрессионный метод изучения двунаправленных контекстов путем максимизации ожидаемого правдоподобия для всех перестановок порядка факторизации входной последовательности.
Мы используем флаг --plm_probability
, чтобы определить отношение длины диапазона замаскированных токенов к длине окружающего контекста для моделирования языка перестановок.
Флаг --max_span_length
также можно использовать для ограничения длины диапазона замаскированных токенов, используемых для моделирования языка перестановок.
Вот как можно точно настроить XLNet на wikitext-2:
python run_plm.py
--model_name_or_path=xlnet-base-cased
--dataset_name wikitext
--dataset_config_name wikitext-2-raw-v1
--do_train
--do_eval
--output_dir /tmp/test-plm
Чтобы настроить его в своем собственном файле обучения и проверки, запустите:
python run_plm.py
--model_name_or_path=xlnet-base-cased
--train_file path_to_train_file
--validation_file path_to_validation_file
--do_train
--do_eval
--output_dir /tmp/test-plm
Если ваш набор данных организован по одному образцу в строке, вы можете использовать флаг --line_by_line
(в противном случае скрипт объединяет все тексты, а затем разбивает их на блоки одинаковой длины).
Примечание. В TPU вам следует использовать флаг --pad_to_max_length
в сочетании с флагом --line_by_line
, чтобы убедиться, что все ваши пакеты имеют одинаковую длину.