английский |中文
Предварительная подготовка стала важной частью задач НЛП. UER-py (представления универсальных кодировщиков) — это набор инструментов для предварительного обучения работе с общедоменными корпусами и тонкой настройки последующих задач. UER-py поддерживает модульность модели и поддерживает расширяемость исследований. Он облегчает использование существующих моделей предварительного обучения и предоставляет пользователям интерфейсы для дальнейшего расширения. С помощью UER-py мы создаем зоопарк моделей, который содержит предварительно обученные модели с различными свойствами. Полную документацию смотрите в Wiki проекта UER-py .
Мы открыли исходный код TencentPretrain — обновленной новой версии UER-py. TencentPretrain поддерживает мультимодальные модели и позволяет обучать большие модели. Если вас интересуют текстовые модели среднего размера (с размерами параметров менее одного миллиарда), мы рекомендуем продолжать использовать проект UER-py.
UER-py имеет следующие возможности:
В этом разделе используется несколько часто используемых примеров, чтобы продемонстрировать, как использовать UER-py. Подробности обсуждаются в разделе Инструкции. Сначала мы используем BERT (модель предварительного обучения текста) в наборе данных классификации настроений книжных рецензий. Мы предварительно обучаем модель на корпусе рецензий на книги, а затем настраиваем ее на наборе данных классификации настроений рецензий на книги. Существует три входных файла: корпус рецензий на книги, набор данных классификации настроений рецензий на книги и словарь. Все файлы закодированы в UTF-8 и включены в этот проект.
Формат корпуса BERT следующий (по одному предложению в строке, документы разделяются пустыми строками):
doc1-sent1
doc1-sent2
doc1-sent3
doc2-sent1
doc3-sent1
doc3-sent2
Корпус рецензий на книги получен из набора классификационных данных рецензий на книги. Убираем ярлыки и разбиваем отзыв на две части, начиная с середины, чтобы создать документ из двух предложений (см. book_review_bert.txt в папке corpora ).
Формат набора классификационных данных следующий:
label text_a
1 instance1
0 instance2
1 instance3
Метка и экземпляр разделяются t . Первая строка представляет собой список имен столбцов. Идентификатор метки должен быть целым числом от 0 до n-1 (включительно) для n-сторонней классификации.
Мы используем файл словаря китайского языка Google models/google_zh_vocab.txt , который содержит 21128 китайских иероглифов.
Сначала мы предварительно обрабатываем корпус рецензий на книги. На этапе предварительной обработки корпус необходимо преобразовать в формат, требуемый указанной моделью предварительного обучения ( --data_processor ):
python3 preprocess.py --corpus_path corpora/book_review_bert.txt --vocab_path models/google_zh_vocab.txt
--dataset_path dataset.pt --processes_num 8 --data_processor bert
Обратите внимание, что требуется шесть>=1.12.0 .
Предварительная обработка занимает много времени. Использование нескольких процессов может значительно ускорить скорость предварительной обработки ( --processes_num ). По умолчанию используется токенизатор BERT ( --tokenizer bert ). После предварительной обработки необработанный текст преобразуется в dataset.pt , который является входными данными для pretrain.py . Затем мы загружаем предварительно обученную китайскую модель BERT от Google google_zh_model.bin (в формате UER, исходная модель находится здесь) и помещаем ее в папку моделей . Мы загружаем предварительно обученную китайскую модель BERT и далее предварительно обучаем ее в корпусе рецензий на книги. Модель предварительного обучения обычно состоит из слоев внедрения, кодирования и целевого слоя. Чтобы построить модель предварительного обучения, мы должны предоставить соответствующую информацию. Файл конфигурации ( --config_path ) определяет модули и гиперпараметры, используемые моделями предварительного обучения. Более подробную информацию можно найти в models/bert/base_config.json . Предположим, у нас есть машина с 8 графическими процессорами:
python3 pretrain.py --dataset_path dataset.pt --vocab_path models/google_zh_vocab.txt
--pretrained_model_path models/google_zh_model.bin
--config_path models/bert/base_config.json
--output_model_path models/book_review_model.bin
--world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7
--total_steps 5000 --save_checkpoint_steps 1000 --batch_size 32
mv models/book_review_model.bin-5000 models/book_review_model.bin
Обратите внимание, что к модели, обученной с помощью pretrain.py, добавляется суффикс, записывающий шаг обучения ( --total_steps ). Мы могли бы удалить суффикс для удобства использования.
Затем мы настраиваем предварительно обученную модель на основе последующего набора данных классификации. Мы используем слои внедрения и кодирования book_review_model.bin , которые являются результатом pretrain.py :
python3 finetune/run_classifier.py --pretrained_model_path models/book_review_model.bin
--vocab_path models/google_zh_vocab.txt
--config_path models/bert/base_config.json
--train_path datasets/book_review/train.tsv
--dev_path datasets/book_review/dev.tsv
--test_path datasets/book_review/test.tsv
--epochs_num 3 --batch_size 32
Путь по умолчанию для точно настроенной модели классификатора — models/finetuned_model.bin . Заметно, что фактический размер пакета предварительного обучения равен --batch_size , умноженному на --world_size ; Фактический размер пакета последующей задачи (например, классификации) равен --batch_size . Затем мы делаем выводы с помощью точно настроенной модели.
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin
--vocab_path models/google_zh_vocab.txt
--config_path models/bert/base_config.json
--test_path datasets/book_review/test_nolabel.tsv
--prediction_path datasets/book_review/prediction.tsv
--labels_num 2
--test_path указывает путь к прогнозируемому файлу. Файл должен содержать столбец text_a. --prediction_path указывает путь к файлу с результатами прогнозирования. Нам нужно явно указать количество меток с помощью --labels_num . Приведенный выше набор данных представляет собой набор данных двусторонней классификации.
В приведенном выше контенте представлены основные способы использования UER-py для предварительной обработки, предварительного обучения, точной настройки и вывода. Больше вариантов использования можно найти в полном ➡️ кратком руководстве ⬅️ . Полное краткое руководство содержит множество вариантов использования, охватывающих большинство сценариев применения, связанных с предварительным обучением. Пользователям рекомендуется прочитать краткое руководство полностью, чтобы разумно использовать проект.
В этом разделе представлены ссылки на ряд ➡️ данных перед тренировкой ⬅️ . UER может загружать эти данные предварительного обучения напрямую.
В этом разделе представлены ссылки на ряд ➡️ последующих наборов данных ⬅️ . UER может загружать эти наборы данных напрямую.
С помощью UER мы предварительно обучили модели с разными свойствами (например, модели на основе разных корпусов, кодировщиков и целей). Подробное описание предварительно обученных моделей и ссылки на их скачивание можно найти в ➡️ modelzoo ⬅️. Все предварительно обученные модели могут быть загружены напрямую с помощью UER.
UER-py организован следующим образом:
UER-py/
|--uer/
| |--embeddings/ # contains modules of embedding component
| |--encoders/ # contains modules of encoder component such as RNN, CNN, Transformer
| |--decoders/ # contains modules of decoder component
| |--targets/ # contains modules of target component such as language modeling, masked language modeling
| |--layers/ # contains frequently-used NN layers
| |--models/ # contains model.py, which combines modules of different components
| |--utils/ # contains frequently-used utilities
| |--model_builder.py
| |--model_loader.py
| |--model_saver.py
| |--opts.py
| |--trainer.py
|
|--corpora/ # contains pre-training data
|--datasets/ # contains downstream tasks
|--models/ # contains pre-trained models, vocabularies, and configuration files
|--scripts/ # contains useful scripts for pre-training models
|--finetune/ # contains fine-tuning scripts for downstream tasks
|--inference/ # contains inference scripts for downstream tasks
|
|--preprocess.py
|--pretrain.py
|--README.md
|--README_ZH.md
|--requirements.txt
|--LICENSE
Код организован на основе компонентов (например, вложений, кодировщиков). Пользователи могут использовать и расширять его без особых усилий.
Подробные примеры использования UER можно найти в ➡️ инструкциях ⬅️, которые помогают пользователям быстро внедрять модели предварительного обучения, такие как BERT, GPT-2, ELMo, T5, а также точно настраивать предварительно обученные модели для ряда последующих задач.
UER-py использовался для выигрышных решений во многих соревнованиях по НЛП. В этом разделе мы приводим несколько примеров использования UER-py для достижения результатов SOTA на соревнованиях по НЛП, таких как CLUE. Более подробную информацию смотрите в ➡️ конкурентных решениях ⬅️.
@article{zhao2019uer,
title={UER: An Open-Source Toolkit for Pre-training Models},
author={Zhao, Zhe and Chen, Hui and Zhang, Jinbin and Zhao, Xin and Liu, Tao and Lu, Wei and Chen, Xi and Deng, Haotang and Ju, Qi and Du, Xiaoyong},
journal={EMNLP-IJCNLP 2019},
pages={241},
year={2019}
}
По вопросам связи, связанной с этим проектом, обращайтесь к Чжэ Чжао ([email protected]; [email protected]), Юдуну Ли ([email protected]) или Чэн Хоу ([email protected]). или Вэньхан Ши ([email protected]).
Эту работу проводят мои наставники по предпринимательству Ци Цзюй , Сюэфэн Ян , Хаотан Дэн и школьные наставники Тао Лю , Сяоюн Ду .
Большую помощь нам также оказали Вейцзе Лю, Лушэн Чжан, Цзяньвэй Цуй, Сяюй Ли, Вэйцюань Мао, Синь Чжао, Хуэй Чен, Цзиньбинь Чжан, Чжируо Ван, Пэн Чжоу, Хайсяо Лю и Вэйцзянь Ву.