ทางแยกจากhttps://github.com/huggingface/transformers/tree/86d5fb0b360e68de46d40265e7c707fe68c8015b/examples/pytorch/ language-modeling ที่ 2021.05.17
การปรับแต่งอย่างละเอียด (หรือการฝึกอบรมตั้งแต่เริ่มต้น) โมเดลไลบรารีสำหรับการสร้างแบบจำลองภาษาบนชุดข้อมูลข้อความสำหรับ 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 GPU ตัวเดียว และใช้เวลาประมาณหนึ่งนาทีในการประเมิน ถึงคะแนนความฉงนสนเท่ห์ ~ 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
ตัวอย่างต่อไปนี้ปรับแต่ง 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
(ไม่เช่นนั้นสคริปต์จะเชื่อมข้อความทั้งหมดเข้าด้วยกัน แล้วแยกเป็นบล็อกที่มีความยาวเท่ากัน)
สิ่งนี้ใช้ 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 ใช้วัตถุประสงค์การฝึกอบรมที่แตกต่างกัน ซึ่งเป็นการสร้างแบบจำลองภาษาการเรียงสับเปลี่ยน มันเป็นวิธี autoregressive ในการเรียนรู้บริบทแบบสองทิศทางโดยการเพิ่มโอกาสที่คาดหวังให้สูงสุดจากการเรียงสับเปลี่ยนทั้งหมดของลำดับการแยกตัวประกอบของลำดับอินพุต
เราใช้แฟล็ก --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
เพื่อให้แน่ใจว่าแบตช์ทั้งหมดของคุณมีความยาวเท่ากัน