
สร้างโมเดลกลั่นจาก ทุกรุ่นภาษาที่สวมหน้ากากบนฮับ HuggingFace ด้วยคำสั่งทุบตีเพียงคำสั่งเดียว
คุณสมบัติ:
ก่อนอื่นให้โคลนโครงการและติดตั้งการพึ่งพา
# clone project
git clone https://github.com/iPieter/universal-distillation
# install project
cd universal-distillation
pip install -e .
pip install -r requirements.txtในบทช่วยสอนนี้เราจะแสดงวิธีการตั้งค่างานกลั่นจากบรรทัดคำสั่ง คุณจะต้องมีสองสิ่ง:
bert-base-uncased มาตรฐานเราจะใช้ส่วนภาษาอังกฤษของ Europarl Corpus นี่คือคลังข้อมูลคู่ขนานที่มีคุณภาพสูงจากการจัดเลี้ยงยุโรปที่สร้างขึ้นโดยล่ามมืออาชีพและนักแปล นอกจากนี้ยังมีขนาดค่อนข้างเล็กสำหรับคลังภาษาในปัจจุบันมีเพียง 114 MB แต่สำหรับการสอนการกลั่นของเราที่โอเค
wget https://opus.nlpl.eu/download.php ? f = Europarl/v8/mono/en.txt.gz -O en.txt.gz
gunzip en.txt.gz ขณะนี้ข้อมูลถูกยกเลิกซิปและเก็บไว้ในไฟล์ en.txt
ตอนนี้เรามีข้อมูลแล้วเราสามารถเริ่มการฝึกอบรมได้ การดาวน์โหลดโมเดลครูจะเกิดขึ้นโดยอัตโนมัติดังนั้นไม่จำเป็นต้องทำสิ่งนี้ด้วยตนเอง หากคุณรู้สึกว่าสิ่งนี้ใช้เวลานานเกินไปและคุณเพียงแค่ต้องการลองฝึกอบรมเช่นเพื่อรับความรู้สึกถึงการกำหนดเวลาคุณสามารถเพิ่ม --limit_train_batches N สิ่งนี้จะ จำกัด แต่ละยุคถึง N แบทช์ในระหว่างการฝึกอบรม
python universal_distillation/distillation.py
--batch_size 8
--gpus 1
--max_epochs 3
--save_dir my_distilled_model/
--teacher bert-base-uncased
--data en.txt มีบางสิ่งที่เกิดขึ้นในพื้นหลังเมื่อคุณเรียกใช้คำสั่งนั้น ก่อนอื่นห้องสมุดนี้สร้างนักเรียนและแบบจำลองครู ครูเป็น bert-base-uncased และนักเรียนจะใช้สถาปัตยกรรมเดียวกับครูโดยค่าเริ่มต้นมีเพียงจำนวนหัวที่เล็กกว่า: 6 แทนที่จะเป็น 12 เนื่องจากเรากำลังฝึกอบรมโดเมนเฉพาะ (Europarl) นี่น่าจะเพียงพอ แน่นอนคุณสามารถผสมและจับคู่ครูที่แตกต่างและใหญ่กว่ากับนักเรียนขนาดเล็ก แต่การแสดงจะแตกต่างกันมาก
ประการที่สองห้องสมุด HuggingFace ดาวน์โหลดโมเดลครูและ Tokenizer ประการที่สามชุดข้อมูลจะถูกโหลดจากดิสก์และเริ่มต้นด้วยโทเคนิเซอร์สังเกตว่าโทเค็นตัวเองเกิดขึ้นในภายหลังโดยค่าเริ่มต้น ในที่สุดวงกลั่นจะเริ่มขึ้น
ในที่สุดคุณสามารถใช้โมเดลกับ LuggingFace Library! ไฟล์ทั้งหมดจากนักเรียน (Pytorch Model และ Tokenizer) จะถูกบันทึกไว้ในโฟลเดอร์ที่เรากำหนดไว้ก่อนหน้านี้: my_distilled_model/ คุณสามารถนำเข้าโมเดลจากโฟลเดอร์นี้ได้โดยตรงและทดสอบงานการสร้างแบบจำลองภาษาที่สวมหน้ากากด้วยเพียง 3 บรรทัดเท่านั้น:
from transformers import pipeline
p = pipeline ( "fill-mask" , model = "my_distilled_model/" )
p ( "This is a [MASK]." )แม้ว่านี่จะเป็นตัวอย่างที่ชัดเจน แต่ก็มักจะเพียงพอที่จะสร้างโมเดลที่ปรับโดเมนของคุณเอง ในกรณีนี้มันคือ
นอกจากนี้คุณยังสามารถเรียกใช้การประเมินที่แท้จริงโดยใช้ Pseudo-Perplexity คุณต้องระบุครูและโมเดลกลั่น แต่ถ้าคุณเพียงแค่เรียกใช้การประเมินผลคุณสามารถให้แบบจำลองเป้าหมายสำหรับทั้งสองอาร์กิวเมนต์
python universal_distillation/evaluation.py
--gpus=0
--limit_test_batches=500
--teacher=pdelobelle/robbert-v2-dutch-base
--data=data/oscar_dutch/nl_dedup_part_2.txt
--checkpoint=DTAI-KULeuven/robbertje-39-gb-non-shuffled ฐานรหัสนี้ยังใช้สำหรับกระดาษ ECML-PKDD 2022 ของเราซึ่งเรารวมการกลั่นความรู้ของแบบจำลองภาษาเข้ากับข้อ จำกัด ความเป็นธรรม ข้อ จำกัด ที่เราทดสอบในกระดาษคือการทดแทนอย่างชัดเจนของคำสรรพนามเพศ แต่รหัสสนับสนุนการทดแทนแบบเดี่ยว สิ่งเหล่านี้สามารถเพิ่มลงในกระบวนการกลั่นโดยกำหนดโทเค็นใดที่คุณต้องการทำให้เท่าเทียมกัน ตัวอย่างเช่น he และ she มี Token IDS 2016 และ 2002 ดังนั้นเราจึงสามารถกำหนดคู่ทดแทนด้วยโทเค็นทั้งสอง ความน่าจะเป็นมากกว่าโทเค็นทั้งสองได้รับความเท่าเทียมกัน
คุณสามารถเพิ่มโทเค็นได้โดยการปรับเปลี่ยน universal-distillation/distillation.py รอบบรรทัด 90 อย่าลืมรวมข้อ จำกัด เมื่อสร้างโมเดล BaseTransformer
constraints = [[ 2016 , 2002 ]] # she # he
model = BaseTransformer ( args . teacher , constraints = constraints , ** vars ( args ))