영어 | 중문
사전 훈련은 NLP 작업에 필수적인 부분이 되었습니다. UER-py(Universal Encoder Representations)는 일반 도메인 코퍼스에 대한 사전 학습과 다운스트림 작업에 대한 미세 조정을 위한 툴킷입니다. UER-py는 모델 모듈성을 유지하고 연구 확장성을 지원합니다. 이는 기존 사전 훈련 모델의 사용을 용이하게 하고 사용자가 추가로 확장할 수 있는 인터페이스를 제공합니다. UER-py를 사용하여 다양한 속성의 사전 훈련된 모델이 포함된 모델 동물원을 구축합니다. 전체 문서는 UER-py 프로젝트 Wiki를 참조하세요 .
우리는 UER-py의 리팩토링된 새 버전인 TencentPretrain을 오픈 소스로 공개했습니다. TencentPretrain은 다중 모드 모델을 지원하고 대규모 모델 교육을 가능하게 합니다. 중간 크기(매개변수 크기가 10억 미만)의 텍스트 모델에 관심이 있다면 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 참조).
분류 데이터 세트의 형식은 다음과 같습니다.
label text_a
1 instance1
0 instance2
1 instance3
레이블과 인스턴스는 t 로 구분됩니다. 첫 번째 행은 열 이름 목록입니다. n방향 분류의 경우 라벨 ID는 0과 n-1 사이(포함)의 정수여야 합니다.
우리는 21128개의 한자가 포함된 Google의 중국어 어휘 파일 models/google_zh_vocab.txt를 사용합니다.
먼저 서평 코퍼스를 사전 처리합니다. 사전 처리 단계에서 말뭉치는 지정된 사전 학습 모델( --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
six>=1.12.0 이 필요합니다.
전처리에는 시간이 많이 걸립니다. 여러 프로세스를 사용하면 전처리 속도가 크게 빨라질 수 있습니다( --processes_num ). BERT 토크나이저는 기본적으로 사용됩니다( --tokenizer bert ). 전처리 후 원시 텍스트는 pretrain.py 의 입력인 Dataset.pt 로 변환됩니다. 그런 다음 Google의 사전 훈련된 중국어 BERT 모델 google_zh_model.bin (UER 형식 및 원본 모델은 여기에서 제공됨)을 다운로드하여 모델 폴더에 넣습니다. 사전 훈련된 중국어 BERT 모델을 로드하고 서평 코퍼스에서 이를 사전 훈련합니다. 사전 학습 모델은 일반적으로 임베딩 레이어, 인코더 레이어, 타겟 레이어로 구성됩니다. 사전 학습 모델을 구축하려면 관련 정보를 제공해야 합니다. 구성 파일( --config_path )은 사전 학습 모델에서 사용되는 모듈과 하이퍼 매개변수를 지정합니다. 자세한 내용은 models/bert/base_config.json 에서 확인할 수 있습니다. 8개의 GPU를 갖춘 머신이 있다고 가정해 보겠습니다.
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 )가 붙어 있습니다. 사용 편의성을 위해 접미사를 제거할 수 있습니다.
그런 다음 다운스트림 분류 데이터 세트에서 사전 훈련된 모델을 미세 조정합니다. pretrain.py 의 출력인 book_review_model.bin 의 임베딩 및 인코더 레이어를 사용합니다.
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는 많은 NLP 대회에서 솔루션을 획득하는 데 사용되었습니다. 이 섹션에서는 CLUE와 같은 NLP 경쟁에서 SOTA 결과를 얻기 위해 UER-py를 사용하는 몇 가지 예를 제공합니다. 자세한 내용은 ➡️ 경쟁 솔루션 ⬅️을 참조하세요.
@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}
}
이 프로젝트와 관련된 커뮤니케이션은 Zhe Zhao([email protected]; [email protected]), Yudong Li([email protected]) 또는 Cheng Hou([email protected])에게 문의하세요. 또는 Wenhang Shi([email protected]).
이 작업은 기업 멘토인 Qi Ju , Xuefeng Yang , Haotang Deng 과 학교 멘토인 Tao Liu , Xiaoyong Du 가 지도합니다.
또한 Weijie Liu, Lusheng Zhang, Jianwei Cui, Xiayu Li, Weiquan Mao, Xin Zhao, Hui Chen, Jinbin Zhang, Zhiruo Wang, Peng Zhou, Haixiao Liu 및 Weijian Wu로부터 많은 도움을 받았습니다.