ซอร์สโค้ดที่ใช้สำหรับ การจำแนกข้อความโดยใช้ชื่อฉลากเท่านั้น: วิธีการฝึกอบรมด้วยตนเองแบบจำลองภาษา เผยแพร่ใน EMNLP 2020
ต้องใช้ GPU อย่างน้อยหนึ่งตัวในการเรียกใช้รหัส
ก่อนที่จะทำงานคุณต้องติดตั้งแพ็คเกจที่ต้องการก่อนโดยพิมพ์คำสั่งต่อไปนี้:
$ pip3 install -r requirements.txt
นอกจากนี้คุณต้องดาวน์โหลดคำหยุดในไลบรารี NLTK:
import nltk
nltk.download('stopwords')
แนะนำให้ใช้ Python 3.6 หรือสูงกว่า การใช้รุ่น Python รุ่นเก่าอาจนำไปสู่ปัญหาความไม่ลงรอยกันของแพ็คเกจ
เราให้บริการสคริปต์ get_data.sh สี่รายการสำหรับการดาวน์โหลดชุดข้อมูลที่ใช้ในกระดาษภายใต้ datasets และสคริปต์การฝึกอบรมสี่ครั้ง agnews.sh , dbpedia.sh , imdb.sh และ amazon.sh สำหรับการเรียกใช้โมเดลบนชุดข้อมูลสี่ชุด
หมายเหตุ: โมเดลของเราไม่ได้ใช้ฉลากการฝึกอบรม เราให้บริการการฝึกอบรม/ทดสอบชุดจริงสำหรับความจริงสำหรับความสมบูรณ์และการประเมินผล
สคริปต์การฝึกอบรมทุบตีสมมติว่าคุณมี GPU 10GB สองตัว หากคุณมีจำนวน GPU ที่แตกต่างกันหรือ GPUs ที่มีขนาดหน่วยความจำที่แตกต่างกันโปรดดูส่วนถัดไปสำหรับวิธีการเปลี่ยนข้อโต้แย้งบรรทัดคำสั่งต่อไปนี้อย่างเหมาะสม (ในขณะที่รักษาอาร์กิวเมนต์อื่น ๆ ไม่เปลี่ยนแปลง): train_batch_size , accum_steps , eval_batch_size และ gpus
ความหมายของอาร์กิวเมนต์บรรทัดคำสั่งจะปรากฏขึ้นเมื่อพิมพ์
python src/train.py -h
อาร์กิวเมนต์ต่อไปนี้ส่งผลโดยตรงต่อประสิทธิภาพของโมเดลและจำเป็นต้องตั้งค่าอย่างระมัดระวัง:
train_batch_size , accum_steps , gpus : อาร์กิวเมนต์ทั้งสามนี้ควรถูกตั้งค่าเข้าด้วยกัน คุณต้องตรวจสอบให้แน่ใจว่า ขนาดชุดการฝึกอบรมที่มีประสิทธิภาพ ซึ่งคำนวณเป็น train_batch_size * accum_steps * gpus อยู่ที่ประมาณ 128 ตัวอย่างเช่นหากคุณมี GPU 4 ตัวคุณสามารถตั้งค่า train_batch_size = 32, accum_steps = 1, gpus = 4 ; หากคุณมี 1 gpu คุณสามารถตั้งค่า train_batch_size = 32, accum_steps = 4, gpus = 1 หาก GPU ของคุณมีขนาดหน่วยความจำที่แตกต่างกันคุณอาจต้องเปลี่ยน train_batch_size ในขณะที่ปรับ accum_steps และ gpus ในเวลาเดียวกันเพื่อรักษา ขนาดชุดการฝึกอบรมที่มีประสิทธิภาพ ประมาณ 128eval_batch_size : อาร์กิวเมนต์นี้มีผลต่อความเร็วของอัลกอริทึมเท่านั้น ใช้ขนาดแบทช์การประเมินขนาดใหญ่ตามที่ GPU ของคุณสามารถถือได้max_len : อาร์กิวเมนต์นี้ควบคุมความยาวสูงสุดของเอกสารที่ป้อนเข้าสู่โมเดล (เอกสารที่ยาวกว่าจะถูกตัดทอน) เป็นการดีที่ max_len ควรตั้งค่าเป็นความยาวของเอกสารที่ยาวที่สุด ( max_len ไม่สามารถใหญ่กว่า 512 ภายใต้สถาปัตยกรรม BERT) แต่การใช้ max_len ที่ใหญ่กว่ายังใช้หน่วยความจำ GPU มากขึ้น ดังนั้นคุณสามารถแลกเปลี่ยนความแม่นยำของรูปแบบสำหรับการฝึกอบรมที่เร็วขึ้นโดยการลด max_lenmcp_epochs , self_train_epochs : พวกเขาควบคุมจำนวนยุคเพื่อฝึกอบรมแบบจำลองในงานทำนายหมวดหมู่ที่สวมหน้ากากและงานฝึกอบรมตนเองตามลำดับ การตั้งค่า mcp_epochs = 3, self_train_epochs = 1 จะเป็นจุดเริ่มต้นที่ดีสำหรับชุดข้อมูลส่วนใหญ่ แต่คุณอาจเพิ่มขึ้นหากชุดข้อมูลของคุณมีขนาดเล็ก (น้อยกว่า 100,000 เอกสาร)อาร์กิวเมนต์อื่น ๆ สามารถเก็บไว้เป็นค่าเริ่มต้นของพวกเขา
ในการเรียกใช้รหัสในชุดข้อมูลใหม่คุณต้อง
your_dataset ภายใต้ datasetstrain.txt (หนึ่งเอกสารต่อบรรทัด) ภายใต้ your_dataset สำหรับการฝึกอบรมรูปแบบการจำแนกประเภท (ไม่จำเป็นต้องใช้ป้ายกำกับเอกสาร)label_names.txt ภายใต้ your_dataset (แต่ละบรรทัดมีชื่อป้ายชื่อของหมวดหมู่หนึ่งถ้าใช้หลายคำที่ใช้เป็นชื่อฉลากของหมวดหมู่ให้วางไว้ในบรรทัดเดียวกันและแยกออกด้วยอักขระ Whitespace)test.txt (เอกสารหนึ่งฉบับต่อบรรทัด) ด้วยป้ายกำกับภาคพื้นดิน test_labels.txt (แต่ละบรรทัดมีจำนวนเต็มแสดงดัชนีหมวดหมู่ของเอกสารที่เกี่ยวข้องดัชนีเริ่มต้นจาก 0 และลำดับจะต้องสอดคล้องกับลำดับหมวดหมู่ใน label_names.txt ) หากมีการให้คลังข้อมูลการทดสอบรหัสจะเขียนผลลัพธ์การจำแนกประเภทเป็น out.txt ภายใต้ your_dataset เมื่อการฝึกอบรมเสร็จสมบูรณ์ หากมีการจัดทำฉลากความจริงภาคพื้นดินของคลังการทดสอบความแม่นยำในการทดสอบจะแสดงในระหว่างการฝึกอบรมด้วยตนเองซึ่งมีประโยชน์สำหรับการปรับแต่งพารามิเตอร์และการเลือกแบบเชอร์รี่แบบจำลองโดยใช้ชุดทดสอบขนาดเล็กfinal_model.pt ภายใต้ your_datasetหมายเหตุ: รหัสจะแคชข้อมูลระดับกลางและจุดตรวจสอบโมเดลเป็นไฟล์. PT ภายใต้ไดเรกทอรีชุดข้อมูลของคุณสำหรับการฝึกอบรมอย่างต่อเนื่อง หากคุณเปลี่ยนคลังข้อมูลการฝึกอบรมหรือชื่อฉลากและเรียกใช้รหัสอีกครั้งคุณจะต้องลบไฟล์. PT ทั้งหมดก่อนเพื่อป้องกันไม่ให้โค้ดโหลดผลลัพธ์เก่า
คุณสามารถอ้างถึงชุดข้อมูลตัวอย่างเมื่อเตรียมชุดข้อมูลของคุณเอง
โปรดอ้างอิงกระดาษต่อไปนี้หากคุณพบว่ารหัสที่เป็นประโยชน์สำหรับการวิจัยของคุณ
@inproceedings{meng2020text,
title={Text Classification Using Label Names Only: A Language Model Self-Training Approach},
author={Meng, Yu and Zhang, Yunyi and Huang, Jiaxin and Xiong, Chenyan and Ji, Heng and Zhang, Chao and Han, Jiawei},
booktitle={Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing},
year={2020},
}