
[NeurIPS '25] Code for Paper "IF-Guide: Influence Function-Guided Suppression of Harmful Training Data for Reducing LLM Toxicity"
Этот репозиторий содержит код IF-Guide — метода детоксификации LLM, представленного в нашей статье:
Вы можете использовать наш метод для детоксификации LLM: он выявляет вредоносные обучающие примеры и подавляет их во время предварительного обучения или дообучения!
Мы исследуем, как обучающие данные способствуют возникновению токсичного поведения больших языковых моделей. Большинство предыдущих работ по снижению токсичности моделей используют реактивные подходы, например дообучение предварительно обученных (и потенциально токсичных) моделей для приведения их в соответствие с человеческими ценностями. В отличие от них, мы предлагаем проактивный подход — IF-Guide, — который использует функции влияния для выявления вредоносных токенов в любых обучающих данных и подавления их влияния во время обучения. Для этого мы сначала показываем, что стандартные функции влияния неэффективны для обнаружения вредоносных обучающих записей. Затем мы представляем новую адаптацию, которая измеряет атрибуцию на уровне токенов от обучающих данных к токсичности модели, а также методы выбора токсичных обучающих документов и целевую функцию обучения, которую можно интегрировать как в предварительное обучение, так и в дообучение. Более того, IF-Guide не полагается на данные о человеческих предпочтениях, которые обычно требуются существующим методам выравнивания. В оценке мы демонстрируем, что IF-Guide значительно снижает как явную, так и неявную токсичность — до 10× по сравнению с моделями без цензурирования и до 3× по сравнению с базовыми методами выравнивания, например DPO и RAD, — в сценариях как предварительного обучения, так и дообучения. IF-Guide вычислительно эффективен: для вычисления показателей влияния не нужна модель с миллиардом параметров; модель с миллионом параметров — с 7.5× меньшим числом параметров — может эффективно служить прокси для выявления вредоносных данных.
Создайте conda-окружение (можно использовать любое окружение с python>=3.10) и установите необходимые пакеты:
conda create -n IF-Guide python=3.10
conda activate IF-Guide
pip install -r requirements.txt
Примечание: Мы используем пакет Kronfluence для вычисления показателей влияния с помощью EK-FAC. Мы создали собственную реализацию, которая поддерживает технику дифференциального влияния, представленную в нашей статье (стр. 4, ур. 6). Авторство всех остальных компонентов пакета принадлежит оригинальным создателям. Спасибо!
Затем перейдите в рабочую директорию:
cd src
Чтобы обучить модель, выполните:
./scripts/train.sh
Это запускает train.py, который принимает следующие основные аргументы:
Примечание: Все остальные аргументы можно оставить со значениями по умолчанию, чтобы воспроизвести нашу экспериментальную конфигурацию. Это относится и к следующим разделам.
Чтобы дообучить существующую модель, выполните:
./scripts/finetune.sh
Это запускает finetune.py, который использует следующие дополнительные аргументы:
| Argument | Description |
|---|---|
--checkpoint_dir | Путь к сохранённой модели. Если используется предварительно обученная модель, укажите None. |
--max_steps | Максимальное количество шагов дообучения. |
IF-Guide состоит из четырёх шагов: (1) вычисление аппроксимации обратного гессиана с помощью EK-FAC, (2) вычисление показателей дифференциального влияния на уровне токенов для токсичных и нетоксичных запросов (стр. 4, ур. 8), (3) выбор влиятельных токсичных токенов для подавления во время обучения (стр. 23, алгоритм 1) и (4) подавление токсичных токенов с помощью нашей целевой функции обучения, основанной на штрафе (стр. 5, ур. 9).
Выполните:
./scripts/fit_factors.sh
Это запускает fit_factors.py со следующими основными аргументами:
Выполните:
./scripts/compute_scores.sh
Это запускает compute_scores.py со следующими ключевыми аргументами (в дополнение к большей части аргументов, используемых для вычисления факторов):
Выполните:
./scripts/build_toxic_token_mask.sh
Это запускает build_toxic_token_mask.py. Он принимает следующие основные аргументы:
После вычисления маски токсичных токенов для конкретной модели вы можете указать аргументы --toxic_token_mask_path и --toxic_lambda в ./scripts/train.sh (и ./scripts/finetune.sh), чтобы обучать/дообучать модели с помощью IF-Guide.
Мы предоставляем код для оценки явной токсичности (через Detoxify), неявной токсичности (через ToxiGen-RoBERTa) и плавности (измеряемой на LAMBADA и OpenWebText).
Выполните:
./scripts/run_toxicity_eval.sh
Это запускает run_toxicity_eval.py со следующими основными аргументами:
Выполните:
./scripts/run_implicit_toxicity_eval.sh
Для этого требуются следующие аргументы:
| Argument | Description |
|---|---|
--outputs_file_path | Путь к файлу выходных данных, полученному при оценке явной токсичности. Мы повторно оцениваем существующие результаты, чтобы сэкономить время. Это должен быть файл output.json, созданный в ходе оценки явной токсичности. |
--dataset | Набор данных, из которого получены выходные данные. Определяет формат итоговых результатов. |
Выполните:
./scripts/run_fluency_eval.sh
Она принимает следующие основные аргументы:
Мы обнаружили, что наш метод сочетается с защитой на этапе декодирования Reward Augmented Decoding (RAD) [EMNLP 2023]. Чтобы запустить IF-Guide с RAD (или протестировать RAD отдельно), сначала загрузите модель вознаграждения (предоставленную авторами оригинальной работы) и поместите её в ожидаемый каталог:
cd utils/rad/reward_modeling
gdown https://storage.googleapis.com/rad_release/saved_models.zip
unzip saved_models.zip && rm saved_models.zip && rm -rf saved_models/gpt2_sentiment
Авторство используемой нами реализации RAD полностью принадлежит авторам оригинальной работы. Спасибо!
Пожалуйста, цитируйте нашу работу, если этот исходный код оказался вам полезен.
@inproceedings{coalson2025ifguide,
title={{IF}-Guide: Influence Function-Guided Detoxification of {LLM}s},
author={Coalson, Zachary and Bae, Juhan and Carlini, Nicholas and Hong, Sanghyun},
booktitle={The Thirty-ninth Annual Conference on Neural Information Processing Systems},
year={2025},
url={https://openreview.net/forum?id=V82wLePv0o}
}
Пожалуйста, обращайтесь к Закари Коулсону ([email protected]) по любым вопросам и предложениям.
| Argument | Description |
|---|
--model_name | Название модели для обучения. Должно быть зарегистрировано в utils/registry.yaml с соответствующим токенизатором (см. существующие модели в качестве примеров) |
--save_id | Тег-описатель, используемый для именования выходного каталога. |
--toxic_token_mask_path | Путь к маске токенов (созданной с помощью IF-Guide). Используйте None для стандартного обучения. |
--toxic_lambda | Сила штрафного члена, используемого нашей целевой функцией обучения. |
| Argument | Description |
|---|
--model_name | Название модели, для которой вычисляются факторы. |
--checkpoint_dir | Путь к сохранённой модели. Если используется предварительно обученная модель, укажите None. |
--train_indices_path | Путь к индексам обучающей выборки, использованным для обучения модели (не требуется, если используется весь набор данных). Должен соответствовать точным индексам и их порядку. Мы предоставляем индексы нашего подмножества OpenWebText объёмом один миллиард токенов и задаём их путь по умолчанию. |
--output_dir | Путь для сохранения данных аппроксимации гессиана. |
| Argument | Description |
|---|
--model_name | Название модели, для которой вычисляются показатели. |
--checkpoint_dir | Путь к сохранённой модели. Если используется предварительно обученная модель, укажите None. |
--save_id | Тег, добавляемый в конец каталога сохранения для пользовательского именования. |
--save_dir | Каталог для сохранения показателей (внутри исходного каталога факторов). |
--factors_path | Путь к каталогу, содержащему (обратные) факторы гессиана, вычисленные на предыдущем шаге. |
--query_dataset | Набор данных запросов для построения градиента запроса. В настоящее время доступен только вариант RTP. |
--toxic_query_indices_path | Путь к индексам из набора данных запросов, относящимся к токсичным демонстрациям. Мы предоставляем наше токсичное подмножество из RTP в ../data/RTP/query_indices/toxic_indices.npy. |
--nontoxic_query_indices_path | Путь к индексам для нетоксичных запросов. Мы предоставляем наше нетоксичное подмножество из RTP в ../data/RTP/query_indices/nontoxic_indices.npy. |
| Argument | Description |
|---|
--model_name | Название модели, для которой строится маска. |
--scores_path | Путь к показателям, вычисленным на предыдущем шаге. |
--window | Длина контекстного окна. |
--toxicity_threshold | Порог для определения токсичных токенов (в виде процентиля, например 0.99). |
--max_tokens | Максимальное количество токсичных токенов для выбора. |
--query_dataset | Набор данных запросов для построения градиента запроса. В настоящее время доступен только вариант RTP. |
--inspection_idx | Мы автоматически выводим подавляемые токены для одного обучающего примера красным цветом. Этот аргумент указывает, какой пример вывести на основе его рейтинга (например, 0 — это пример с наивысшим рейтингом). |
| Argument | Description |
|---|
--model_name | Название модели для оценки. |
--checkpoint_dir | Путь к сохранённой модели. Если используется предварительно обученная модель, укажите None. |
--dataset | Набор данных для оценки: RTP, AttaQ или BOLD. |
--save_dir | Каталог для сохранения результатов. |
--decoding_defense | Защита на этапе декодирования: none или rad. Не применяется к нашей оценке на OpenWebText. |
--save_outputs | Следует ли сохранять выходные данные модели. |
| Argument | Description |
|---|
--model_name | Название модели для оценки. |
--checkpoint_dir | Путь к сохранённой модели. Если используется предварительно обученная модель, укажите None. |
--dataset | Набор данных для оценки: RTP, AttaQ или BOLD. |
--save_dir | Каталог для сохранения результатов. |
--decoding_defense | Защита на этапе декодирования: none или rad. Не применяется к нашей оценке на OpenWebText. |