Dieses Repository bietet eine Implementierung von Rank-One Model Editing (ROME) für autoregressive Transformatoren (nur GPU). Wir unterstützen derzeit GPT-2 XL (1.5B) von OpenAI und GPT-J (6B) von EleutherAI. Die Veröffentlichung eines 20B GPT-ähnlichen Modells von EleutherAI wird bald erwartet; Wir hoffen, es so schnell wie möglich unterstützen zu können.
Wenn Sie Probleme feststellen, können Sie jederzeit ein Problem eröffnen. Wir entwickeln dieses Repository aktiv weiter und werden die Tickets genau überwachen.
Wir empfehlen conda
für die Verwaltung von Python-, CUDA- und PyTorch-bezogenen Abhängigkeiten und pip
für alles andere. Um zu beginnen, installieren Sie einfach conda
und führen Sie Folgendes aus:
./scripts/setup_conda.sh
notebooks/causal_trace.ipynb
demonstriert die kausale Ablaufverfolgung, die geändert werden kann, um die Ablaufverfolgung auf die Verarbeitung einer beliebigen Anweisung anzuwenden.
notebooks/rome.ipynb
demonstriert ROME. Die API ist einfach; Man muss lediglich eine gewünschte Umschreibung in der folgenden Form angeben:
request = {
"prompt" : "{} plays the sport of" ,
"subject" : "LeBron James" ,
"target_new" : {
"str" : "football"
}
}
Das Notizbuch enthält mehrere ähnliche Beispiele.
Details folgen in Kürze!
Eine Beschreibung der verfügbaren Baselines finden Sie unter baselines/
.
experiments/evaluate.py
kann verwendet werden, um jede Methode in baselines/
auszuwerten. Um zu beginnen (z. B. ROME auf GPT-2 XL verwenden), führen Sie Folgendes aus:
python3 -m experiments.evaluate
--alg_name=ROME
--model_name=gpt2-xl
--hparams_fname=gpt2-xl.json
Die Ergebnisse jedes Laufs werden unter results/<method_name>/run_<run_id>
in einem bestimmten Format gespeichert:
results/
| __ ROME/
| __ run_ < run_id > /
| __ params.json
| __ case_0.json
| __ case_1.json
| __ ...
| __ case_10000.json
Um die Ergebnisse zusammenzufassen, können Sie experiments/summarize.py
verwenden:
python3 -m experiments.summarize --dir_name=ROME --runs=run_ < run_id >
Durch Ausführen von python3 -m experiments.evaluate -h
oder python3 -m experiments.summarize -h
erhalten Sie Details zu Befehlszeilenflags.
Angenommen, Sie haben eine neue Methode X
und möchten sie mit CounterFact vergleichen. So integrieren Sie X
in unseren Runner:
HyperParams
in XHyperParams
und geben Sie alle Hyperparameterfelder an. Eine Beispielimplementierung finden Sie unter ROMEHyperParameters
.hparams/X/gpt2-xl.json
und geben Sie einige Standardwerte an. Ein Beispiel finden Sie unter hparams/ROME/gpt2-xl.json
.apply_X_to_model
, die mehrere Parameter akzeptiert und (i) das umgeschriebene Modell und (ii) die ursprünglichen Gewichtswerte für bearbeitete Parameter zurückgibt (im Wörterbuchformat {weight_name: original_weight_value}
). Ein Beispiel finden Sie rome/rome_main.py
.X
zu ALG_DICT
in experiments/evaluate.py
hinzu, indem Sie die Zeile "X": (XHyperParams, apply_X_to_model)
.Führen Sie abschließend die Hauptskripte aus:
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 >
Wir unterstützen derzeit nur Methoden, die autoregressive HuggingFace-Modelle mithilfe des PyTorch-Backends bearbeiten. Wir arbeiten an einer Reihe allgemeiner Methoden (verwendbar z. B. auf TensorFlow und ohne HuggingFace), die bald veröffentlicht werden.
@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 }
}