repo นี้ประกอบด้วยโค้ดที่มาพร้อมกับเอกสาร Pretraining Language Models with Human Preferences โค้ดเบสสร้างขึ้นจาก Trainer
ของ Hugging Face Transformers และประกอบด้วยการดำเนินการตามวัตถุประสงค์ห้าประการสำหรับการฝึกอบรมล่วงหน้าด้วยการตอบสนองของมนุษย์ (PHF) ที่กล่าวถึงในรายงาน ตลอดจนการโทรกลับและสคริปต์สำหรับการประเมิน
วัตถุประสงค์ของ PHF สามารถนำมาใช้ได้โดยการใส่คำอธิบายประกอบข้อมูลการฝึกด้วยรางวัล และเขียนทับ Trainer.compute_loss
เพื่อใช้เป็นสัญญาณการฝึกเพิ่มเติม รางวัลจะได้รับจากตัวอย่างของ apo.scorers.Scorer
: วัตถุที่สามารถระบุได้สำหรับข้อความที่กำหนด ไม่ว่าจะสอดคล้องหรือไม่สอดคล้องกับความชอบของมนุษย์ เช่น การไม่น่ารังเกียจ ตัวจดคะแนนยังใช้สำหรับการประเมินตัวอย่างจาก LM ที่ได้รับการฝึกอบรมจาก PHF อีกด้วย
Codebase สร้างขึ้นจากระบบนิเวศ Hugging Face และไม้กายสิทธิ์ (สำหรับการตรวจสอบและการจัดการการทดลอง)
เราถือว่า Python 3.9+ หากต้องการรันสคริปต์การฝึกอบรมสำหรับ MLE ในเรื่องความเป็นพิษ ให้ทำดังนี้
pip install -r requirements.txt
wandb login # or set `WANDB_API_KEY` and `WANDB_PROJECT` env variables
export OPENAI_API_KEY= ' sk-your_key ' # needed for evaluation
python train.py --task configs/toxicity/pretrain.yml --method configs/toxicity/mle.yml
สคริปต์ train.py
ต้องการเส้นทางไปยังไฟล์กำหนดค่าสองไฟล์: สำหรับงานและสำหรับวิธีการ ไฟล์การกำหนดค่าสำหรับงาน ( toxicity
, pii
, pep8
) จะถูกจัดเก็บไว้ในไฟล์ YAML: configs/{task}/pretrain.yml
(สำหรับการทดลองฝึกล่วงหน้า) และ configs/{task}/finetuning.yml
(สำหรับการปรับแต่งอย่างละเอียด) ไฟล์การกำหนดค่าสำหรับวิธีการจะถูกจัดเก็บแยกต่างหากในไดเร็กทอรี configs/{task}
คู่การกำหนดค่าวิธีงานแต่ละคู่ (สำหรับการฝึกล่วงหน้าและการปรับแต่งอย่างละเอียด) มีไฮเปอร์พารามิเตอร์ที่เราใช้ในการทดลองของเรา และช่วยให้สามารถทำซ้ำผลลัพธ์จากกระดาษได้
พารามิเตอร์แต่ละตัวสามารถเขียนทับได้จากบรรทัดคำสั่งโดยใช้อาร์กิวเมนต์ override
ตัวอย่างเช่น:
python train.py --task configs/toxicity/pretrain.yml --method configs/toxicity/mle.yml --override training.per_device_train_batch_size=8
ชื่อ | กำหนดค่าไฟล์ | ข้อมูลการฝึกอบรม | ผู้ทำประตู | คำอธิบาย |
---|---|---|---|---|
ความเป็นพิษ | configs/toxicity | tomekkorbak/pile-detoxify | DetoxifyToxicityScorer | คะแนน Misalignment คือความน่าจะเป็นของความเป็นพิษตามการล้างพิษ |
ข้อมูล PII | configs/pii | tomekkorbak/pile-pii-scrubadub | PIIScorer | คะแนนความไม่ตรงแนวคือจำนวน PII (เช่น ชื่อ, URL) ต่ออักขระ ตาม Scrubadub |
เป๊ป8 | configs/pep8 | kejian/codeparrot-train-more-filter-3.3b-cleaned | PEP8Scorer | คะแนนที่ไม่ตรงคือจำนวนการละเมิด PEP8 ต่ออักขระตาม pycodestyle |
วัตถุประสงค์หกประการสำหรับการฝึกอบรมโดยให้ความคิดเห็นจากมนุษย์ที่ใช้ในการทดลองของเราได้รับการปฏิบัติดังนี้:
ชื่อ | คลาสวัตถุประสงค์ | คำอธิบาย |
---|---|---|
ม.ล | MLE | กระดาษห่อบางๆ รอบ PyTorch CrossEntropyLoss |
การกรอง | MLE | คุณต้องตั้งค่า dataset.filter_threshold ใน config |
การฝึกอบรมแบบมีเงื่อนไข | MLE | คุณต้องตั้งค่า dataset.conditional_training_config ใน config` ด้วย |
ไม่น่าเป็นไปได้ | Unlikelihood | คุณต้องตั้งค่าไฮเปอร์พารามิเตอร์ objective.score_threshold และ objective.alpha ด้วย |
AWR | AWR | คุณต้องตั้งค่าไฮเปอร์พารามิเตอร์ objective.alpha และ objective.beta ด้วย |
รว | AWR | กรณีพิเศษของ AWR ที่มี objective.alpha=1 |
แบบจำลองที่ได้รับการฝึกล่วงหน้าในการทดลองของเรามีอยู่ใน HugginFace Hub:
วัตถุประสงค์ | ความเป็นพิษ | เป๊ป8 | ข้อมูล PII |
---|---|---|---|
ม.ล | tomekkorbak/goofy_pasteur | เคอเจี้ยน/ผู้ยิ่งใหญ่-mle | tomekkorbak/nervous_wozniak |
ค่ามัธยฐานการกรอง | tomekkorbak/amazing_shannon | Kejian / การกรองอันยิ่งใหญ่ | tomekkorbak/cocky_carson |
มีเงื่อนไข | tomekkorbak/hungry_saha | Kejian / เงื่อนไขอันยิ่งใหญ่ | tomekkorbak/boring_mcclintock |
แอล | tomekkorbak/nifty_banach | เคเจี้ยน/ผู้ยิ่งใหญ่-ul | tomekkorbak/affectionate_wescoff |
AWR | tomekkorbak/upbeat_ramanujan | Kejian/vigor-awr | tomekkorbak/confident_knuth |
รว | tomekkorbak/keen_clarke | เคอเจี้ยน/ผู้ยิ่งใหญ่-rwr | tomekkorbak/gifted_hugle |
ในแต่ละขั้นตอนการประเมิน apo.callbacks.GenerateAndScoreCallback
จะวนซ้ำรายการ GenerationScenario
ที่ให้ไว้ในไฟล์กำหนดค่างาน สำหรับแต่ละสถานการณ์ จะมีการสร้างตัวอย่าง num_samples
และคำนวณเมทริก wandb ต่อไปนี้:
score
การจัดแนวที่ไม่ตรงโดยเฉลี่ย (จากตัวอย่าง num_samples
) ของตัวอย่างที่สร้างขึ้นซึ่งกำหนดโดยผู้บันทึกคะแนนscore_max@25
คะแนนสูงสุดเฉลี่ยใน 25 ตัวอย่าง (คล้ายกับความเป็นพิษสูงสุดที่คาดไว้ในรายงาน RealToxicityPrompts)current_samples
, wandb.Table
ตัวอย่างพร้อมกับคำแนะนำ (ถ้ามี) และคะแนน นอกเหนือจากการให้คะแนนตัวอย่าง LM แล้ว เรายังใช้ apo.callbacks.KLGPT3Callback
เพื่อประมาณค่า KL ของ LM ปัจจุบันจาก GPT-3 ซึ่งต้องใช้ตัวอย่างการวาดจาก GPT-3 ซึ่งถูกแคชและนำมาใช้ซ้ำในการวนซ้ำครั้งต่อๆ ไป -
.
├── apo
│ ├── callbacks.py # callbacks implementing the evaluation pipeline
│ ├── dataset_wrappers.py # an iterable for streaming blocks of tokens for training
│ ├── kl_gpt3.py # logic for measuring KL from GPT-3
│ └── metrics.py # metrics computed on LM samples (and dataset elements, for debugging)
│ └── models.py # a subclass for GPT2LMHeadModel adding value heads and exposing implementation details
│ └── objectives.py # classes implementing loss functions
│ ├── scorer_utils.py
│ ├── scorers.py # classes for scoring LM samples and dataset elements
│ └── trainer.py # a subclass for Hugging Face Trainer exposing some functionalities
│ └── utils.py
├── configs
│ └── pep8
│ └── pii
│ └── toxicity
├── scripts # scripts for evaluation
│ dataset_builders # scripts used to generate some of the datasets
├── resources # small, git-tracked files from which lists of words or prompts are loaded
└── train.py # the main training script
@misc { https://doi.org/10.48550/arxiv.2302.08582 ,
doi = { 10.48550/ARXIV.2302.08582 } ,
url = { https://arxiv.org/abs/2302.08582 } ,
author = { Korbak, Tomasz and Shi, Kejian and Chen, Angelica and Bhalerao, Rasika and Buckley, Christopher L. and Phang, Jason and Bowman, Samuel R. and Perez, Ethan } ,
keywords = { Computation and Language (cs.CL), Machine Learning (cs.LG), FOS: Computer and information sciences, FOS: Computer and information sciences } ,
title = { Pretraining Language Models with Human Preferences } ,
publisher = { arXiv } ,
year = { 2023 } ,
copyright = { Creative Commons Attribution 4.0 International }
}