2021.05.17에 https://github.com/huggingface/transformers/tree/86d5fb0b360e68de46d40265e7c707fe68c8015b/examples/pytorch/언어-modeling에서 포크합니다.
GPT, GPT-2, ALBERT, BERT, DistilBERT, RoBERTa, XLNet...에 대한 텍스트 데이터세트의 언어 모델링을 위한 라이브러리 모델을 미세 조정(또는 처음부터 훈련)합니다... GPT 및 GPT-2는 다음을 사용하여 훈련되거나 미세 조정됩니다. ALBERT, BERT, DistilBERT 및 RoBERTa는 MLM(Masked Language Modeling) 손실을 사용하여 훈련되거나 미세 조정되는 반면 CLM(인과 언어 모델링) 손실이 발생합니다. XLNet은 PLM(순열 언어 모델링)을 사용하므로 모델 요약에서 해당 목표 간의 차이점에 대한 자세한 내용을 확인할 수 있습니다.
두 가지 스크립트 세트가 제공됩니다. 첫 번째 세트는 Trainer API를 활용합니다. 접미사에 no_trainer
있는 두 번째 세트는 사용자 정의 훈련 루프를 사용하고 ? 도서관을 가속화하십시오. 두 세트 모두 ? 데이터 세트 라이브러리. 데이터 세트에 추가 처리가 필요한 경우 필요에 맞게 쉽게 사용자 정의할 수 있습니다.
참고: 이전 스크립트 run_language_modeling.py
는 여기에서 계속 사용할 수 있습니다.
다음 예제는 허브에 호스팅된 데이터 세트에서 실행되거나 교육 및 검증을 위해 사용자 고유의 텍스트 파일과 함께 실행됩니다. 아래에 두 가지 예가 나와 있습니다.
다음 예에서는 WikiText-2에서 GPT-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 GPU에서 훈련하는 데 약 30분, 평가를 실행하는 데 약 1분이 소요됩니다. 데이터 세트를 미세 조정하면 최대 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
훈련을 위해 내장된 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
다음 예에서는 WikiText-2에서 RoBERTa를 미세 조정합니다. 여기에서도 원시 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
플래그를 사용할 수 있습니다(그렇지 않으면 스크립트가 모든 텍스트를 연결한 다음 동일한 길이의 블록으로 분할합니다).
훈련을 위해 내장된 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에서는 --line_by_line
플래그와 함께 --pad_to_max_length
플래그를 사용하여 모든 배치의 길이가 동일한지 확인해야 합니다.
이 부분은 examples/research_projects/mlm_wwm
으로 이동되었습니다.
XLNet은 순열 언어 모델링이라는 다른 훈련 목표를 사용합니다. 입력 시퀀스 분해 순서의 모든 순열에 대한 예상 가능성을 최대화하여 양방향 컨텍스트를 학습하는 자동 회귀 방법입니다.
--plm_probability
플래그를 사용하여 순열 언어 모델링을 위한 주변 컨텍스트 길이에 대한 마스크된 토큰 범위의 길이 비율을 정의합니다.
--max_span_length
플래그는 순열 언어 모델링에 사용되는 마스킹된 토큰 범위의 길이를 제한하는 데에도 사용될 수 있습니다.
wikitext-2에서 XLNet을 미세 조정하는 방법은 다음과 같습니다.
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에서는 --line_by_line
플래그와 함께 --pad_to_max_length
플래그를 사용하여 모든 배치의 길이가 동일한지 확인해야 합니다.