يحتوي هذا الريبو على الكود المصاحب للورقة حول نماذج اللغة للتدريب المسبق مع التفضيلات البشرية. تم إنشاء قاعدة التعليمات البرمجية حول Hugging Face Transformers' Trainer
وتحتوي على تطبيقات لخمسة أهداف للتدريب المسبق مع التعليقات البشرية (PHF) التي تمت مناقشتها في الورقة، بالإضافة إلى عمليات الاسترجاعات والبرامج النصية لتقييمها.
يمكن تنفيذ أهداف PHF من خلال إضافة تعليقات توضيحية إلى بيانات التدريب بالمكافآت والكتابة فوق Trainer.compute_loss
لاستخدامها كإشارة تدريب إضافية. يتم توفير المكافآت من خلال مثيل apo.scorers.Scorer
: كائن قادر على تحديد، بالنسبة لجزء معين من النص، ما إذا كان محاذاة أو غير محاذية للتفضيلات البشرية مثل عدم الهجوم. يتم استخدام الهداف أيضًا لتقييم العينات من LMs المدربة على PHF.
تم إنشاء قاعدة التعليمات البرمجية حول النظام البيئي Hugging Face والعصا (للمراقبة وإدارة التجارب).
نحن نفترض بيثون 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 | درجة الاختلال هي احتمالية السمية وفقًا لإزالة السموم |
معلومات تحديد الهوية الشخصية | configs/pii | tomekkorbak/pile-pii-scrubadub | PIIScorer | درجة المحاذاة غير الصحيحة هي عدد معلومات تحديد الهوية الشخصية (مثل الأسماء وعناوين URL) لكل حرف، وفقًا لـscrubadub |
بيب8 | configs/pep8 | kejian/codeparrot-train-more-filter-3.3b-cleaned | PEP8Scorer | درجة المحاذاة غير الصحيحة هي عدد انتهاكات PEP8 لكل حرف، وفقًا لـ pycodestyle |
يتم تنفيذ الأهداف الستة للتدريب على التغذية الراجعة البشرية المستخدمة في تجاربنا على النحو التالي:
اسم | فئة الهدف | وصف |
---|---|---|
قانون مكافحة غسل الأموال | MLE | غلاف رقيق حول PyTorch CrossEntropyLoss |
تصفية | MLE | تحتاج إلى تعيين dataset.filter_threshold في التكوين |
التدريب المشروط | MLE | تحتاج أيضًا إلى تعيين dataset.conditional_training_config في config` |
احتمال | Unlikelihood | تحتاج أيضًا إلى تعيين المعلمات الفائقة objective.score_threshold و objective.alpha |
AWR | AWR | تحتاج أيضًا إلى تعيين المعلمات الفائقة objective.alpha و objective.beta |
RWR | AWR | حالة خاصة من AWR مع objective.alpha=1 |
النماذج التي تم تدريبها مسبقًا في تجاربنا متاحة على HugginFace Hub:
موضوعي | سمية | بيب8 | معلومات تحديد الهوية الشخصية |
---|---|---|---|
قانون مكافحة غسل الأموال | tomekkorbak/goofy_pasteur | كيجيان/مايتي ملي | tomekkorbak/nervous_wozniak |
تصفية المتوسطة | tomekkorbak/amazing_shannon | كيجيان/تصفية الأقوياء | tomekkorbak/cocky_carson |
شرطي | tomekkorbak/hungry_saha | كيجيان / الاقوياء المشروطة | tomekkorbak/boring_mcclintock |
أول | tomekkorbak/nifty_banach | كيجيان/مايتي ماي | tomekkorbak/affectionate_wescoff |
AWR | tomekkorbak/upbeat_ramanujan | Kejian/vigor-awr | tomekkorbak/confident_knuth |
RWR | 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 }
}