このリポジトリは、自己回帰トランスフォーマー (GPU のみ) での Rank-One Model Editing (ROME) の実装を提供します。現在、OpenAI の GPT-2 XL (1.5B) と EleutherAI の GPT-J (6B) をサポートしています。 EleutherAI から 20B GPT のようなモデルが間もなくリリースされる予定です。できるだけ早くサポートしたいと考えています。
問題が見つかった場合は、お気軽に問題を開いてください。私たちはこのリポジトリを積極的に開発しており、チケットを注意深く監視していきます。
Python、CUDA、PyTorch 関連の依存関係の管理にはconda
、その他すべてにはpip
推奨します。まず始めに、 conda
インストールして実行します。
./scripts/setup_conda.sh
notebooks/causal_trace.ipynb
因果トレースを示しています。これを変更して、任意のステートメントの処理にトレースを適用できます。
notebooks/rome.ipynb
ROME を示します。 API はシンプルです。次の形式で要求された書き換えを指定するだけです。
request = {
"prompt" : "{} plays the sport of" ,
"subject" : "LeBron James" ,
"target_new" : {
"str" : "football"
}
}
このノートブックには、同様の例がいくつか含まれています。
詳細は近日公開予定です!
利用可能なベースラインの説明については、 baselines/
を参照してください。
experiments/evaluate.py
baselines/
内の任意のメソッドを評価するために使用できます。開始するには (GPT-2 XL で ROME を使用するなど)、次を実行します。
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": (XHyperParams, apply_X_to_model)
という行を挿入して、 experiments/evaluate.py
のALG_DICT
にX
を追加します。最後に、メイン スクリプトを実行します。
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 >
現在、PyTorch バックエンドを使用して自己回帰 HuggingFace モデルを編集するメソッドのみをサポートしています。私たちは、間もなくリリースされる一連の汎用メソッド (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 }
}