Este repositorio proporciona una implementación de Rank-One Model Editing (ROME) en transformadores autorregresivos (solo GPU). Actualmente admitimos GPT-2 XL (1.5B) de OpenAI y GPT-J (6B) de EleutherAI. Se espera el lanzamiento pronto de un modelo similar a 20B GPT de EleutherAI; Esperamos apoyarlo lo antes posible.
No dude en abrir un problema si encuentra algún problema; Estamos desarrollando activamente este repositorio y monitorearemos de cerca los tickets.
Recomendamos conda
para administrar dependencias relacionadas con Python, CUDA y PyTorch, y pip
para todo lo demás. Para comenzar, simplemente instale conda
y ejecute:
./scripts/setup_conda.sh
notebooks/causal_trace.ipynb
muestra el rastreo causal, que se puede modificar para aplicar el rastreo al procesamiento de cualquier declaración.
notebooks/rome.ipynb
demuestra ROMA. La API es sencilla; simplemente hay que especificar una reescritura solicitada de la siguiente forma:
request = {
"prompt" : "{} plays the sport of" ,
"subject" : "LeBron James" ,
"target_new" : {
"str" : "football"
}
}
En el cuaderno se incluyen varios ejemplos similares.
¡Los detalles próximamente!
Consulte baselines/
para obtener una descripción de las líneas de base disponibles.
experiments/evaluate.py
se puede utilizar para evaluar cualquier método en baselines/
. Para comenzar (por ejemplo, usar ROME en GPT-2 XL), ejecute:
python3 -m experiments.evaluate
--alg_name=ROME
--model_name=gpt2-xl
--hparams_fname=gpt2-xl.json
Los resultados de cada ejecución se almacenan en results/<method_name>/run_<run_id>
en un formato específico:
results/
| __ ROME/
| __ run_ < run_id > /
| __ params.json
| __ case_0.json
| __ case_1.json
| __ ...
| __ case_10000.json
Para resumir los resultados, puede utilizar experiments/summarize.py
:
python3 -m experiments.summarize --dir_name=ROME --runs=run_ < run_id >
La ejecución de python3 -m experiments.evaluate -h
o python3 -m experiments.summarize -h
proporciona detalles sobre los indicadores de la línea de comandos.
Supongamos que tiene un nuevo método X
y desea compararlo en CounterFact. Para integrar X
con nuestro corredor:
HyperParams
en XHyperParams
y especifique todos los campos de hiperparámetros. Consulte ROMEHyperParameters
para ver una implementación de ejemplo.hparams/X/gpt2-xl.json
y especifique algunos valores predeterminados. Consulte hparams/ROME/gpt2-xl.json
para ver un ejemplo.apply_X_to_model
que acepte varios parámetros y devuelva (i) el modelo reescrito y (ii) los valores de peso originales para los parámetros que se editaron (en el formato de diccionario {weight_name: original_weight_value}
). Consulte rome/rome_main.py
para ver un ejemplo.X
a ALG_DICT
en experiments/evaluate.py
insertando la línea "X": (XHyperParams, apply_X_to_model)
.Finalmente, ejecute los scripts principales:
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 >
Actualmente solo admitimos métodos que editan modelos autorregresivos de HuggingFace utilizando el backend de PyTorch. Estamos trabajando en un conjunto de métodos de propósito general (utilizables, por ejemplo, en TensorFlow y sin HuggingFace) que se lanzarán pronto.
@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 }
}