Этот репозиторий предоставляет реализацию редактирования модели первого ранга (ROME) на авторегрессионных преобразователях (только для графического процессора). В настоящее время мы поддерживаем GPT-2 XL (1.5B) OpenAI и GPT-J EleutherAI (6B). В ближайшее время ожидается выпуск GPT-подобной модели 20B от EleutherAI; мы надеемся поддержать его как можно скорее.
Не стесняйтесь открывать проблему, если обнаружите какие-либо проблемы; мы активно развиваем этот репозиторий и будем внимательно следить за заявками.
Мы рекомендуем conda
для управления зависимостями, связанными с Python, CUDA и PyTorch, и pip
для всего остального. Для начала просто установите conda
и запустите:
./scripts/setup_conda.sh
notebooks/causal_trace.ipynb
демонстрирует причинно-следственную трассировку, которую можно изменить, чтобы применять трассировку к обработке любого оператора.
notebooks/rome.ipynb
демонстрирует РИМ. API прост; нужно просто указать запрошенную перезапись следующей формы:
request = {
"prompt" : "{} plays the sport of" ,
"subject" : "LeBron James" ,
"target_new" : {
"str" : "football"
}
}
В тетрадь включено несколько подобных примеров.
Подробности скоро!
См. baselines/
для описания доступных базовых показателей.
experiments/evaluate.py
можно использовать для оценки любого метода в baselines/
. Чтобы начать (например, использовать ROME на GPT-2 XL), запустите:
python3 -m experiments.evaluate
--alg_name=ROME
--model_name=gpt2-xl
--hparams_fname=gpt2-xl.json
Результаты каждого запуска сохраняются в results/<method_name>/run_<run_id>
в определенном формате:
results/
| __ ROME/
| __ run_ < run_id > /
| __ params.json
| __ case_0.json
| __ case_1.json
| __ ...
| __ case_10000.json
Чтобы подвести итоги, вы можете использовать experiments/summarize.py
:
python3 -m experiments.summarize --dir_name=ROME --runs=run_ < run_id >
Запуск python3 -m experiments.evaluate -h
или python3 -m experiments.summarize -h
предоставляет подробную информацию о флагах командной строки.
Допустим, у вас есть новый метод X
и вы хотите протестировать его на CounterFact. Чтобы интегрировать X
с нашим раннером:
HyperParams
в XHyperParams
и укажите все поля гиперпараметров. См. ROMEHyperParameters
для примера реализации.hparams/X/gpt2-xl.json
и укажите некоторые значения по умолчанию. Пример см. в hparams/ROME/gpt2-xl.json
.apply_X_to_model
, которая принимает несколько параметров и возвращает (i) переписанную модель и (ii) исходные значения веса для отредактированных параметров (в формате словаря {weight_name: original_weight_value}
). См. пример rome/rome_main.py
.X
в ALG_DICT
в experiments/evaluate.py
вставив строку "X": (XHyperParams, apply_X_to_model)
.Наконец, запустите основные скрипты:
python3 -m experiments.evaluate
--alg_name=X
--model_name=gpt2-xl
--hparams_fname=gpt2-xl.json
python3 -m experiments.summarize --dir_name=X --runs=run_ < run_id >
В настоящее время мы поддерживаем только методы, которые редактируют авторегрессионные модели HuggingFace с использованием бэкэнда PyTorch. Мы работаем над набором методов общего назначения (которые можно использовать, например, в TensorFlow и без HuggingFace), которые скоро будут выпущены.
@article { meng2022locating ,
title = { Locating and Editing Factual Associations in {GPT} } ,
author = { Kevin Meng and David Bau and Alex Andonian and Yonatan Belinkov } ,
journal = { Advances in Neural Information Processing Systems } ,
volume = { 35 } ,
year = { 2022 }
}