Этот репозиторий содержит код, сопровождающий документ «Предварительное обучение языковых моделей с человеческими предпочтениями». База кода построена на основе Trainer
Hugging Face Transformers и содержит реализации пяти задач для предварительного обучения с обратной связью от человека (PHF), обсуждаемых в статье, а также обратные вызовы и сценарии для их оценки.
Цели PHF можно реализовать, аннотировав обучающие данные вознаграждениями и перезаписав Trainer.compute_loss
, чтобы использовать их в качестве дополнительного обучающего сигнала. Награды предоставляются экземпляром apo.scorers.Scorer
: объектом, способным определить для данного фрагмента текста, соответствует ли он или не соответствует человеческим предпочтениям, таким как отсутствие оскорбительного характера. Счетчик также используется для оценки образцов от LM, обученных PHF.
Кодовая база построена на основе экосистемы 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 | Оценка смещения представляет собой вероятность токсичности по данным детоксикации. |
Личные данные | configs/pii | tomekkorbak/pile-pii-scrubadub | PIIScorer | По данным Scrubadub, показатель несогласованности — это количество PII (например, имен, URL-адресов) на символ. |
ПЭП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 в конфигурации` |
Маловероятность | Unlikelihood | Вам также необходимо установить гиперпараметры objective.score_threshold и objective.alpha |
АВР | AWR | Вам также необходимо установить гиперпараметры objective.alpha и objective.beta |
РВР | AWR | Особый случай AWR с objective.alpha=1 |
Модели, предварительно обученные в наших экспериментах, доступны на HugginFace Hub:
Цель | Токсичность | ПЭП8 | Личные данные |
---|---|---|---|
МЛЭ | томеккорбак/goofy_pasteur | Кеджян / Могучий-мле | томеккорбак/nervous_wozniak |
Фильтрация медианы | томеккорбак/amazing_shannon | Кеджян / мощная фильтрация | томеккорбак/cocky_carson |
Условный | томеккорбак/hungry_saha | Кеджян / могучий-условный | томеккорбак/boring_mcclintock |
UL | томеккорбак/nifty_banach | Кеджян / Могучий-ул | томеккорбак/afffectionate_wescoff |
АВР | томеккорбак/upbeat_ramanujan | Кеджян / энергия-аур | томеккорбак/confident_knuth |
РВР | томеккорбак/keen_clarke | Кеджян/Могучий-RWR | томеккорбак/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 }
}