Este repositório fornece uma implementação de Rank-One Model Editing (ROME) em transformadores auto-regressivos (somente GPU). Atualmente oferecemos suporte ao GPT-2 XL (1,5B) da OpenAI e ao GPT-J (6B) da EleutherAI. O lançamento de um modelo 20B tipo GPT da EleutherAI é esperado em breve; esperamos apoiá-lo o mais rápido possível.
Sinta-se à vontade para abrir um problema se encontrar algum problema; estamos desenvolvendo ativamente este repositório e monitoraremos os tickets de perto.
Recomendamos conda
para gerenciar dependências relacionadas a Python, CUDA e PyTorch e pip
para todo o resto. Para começar, basta instalar conda
e executar:
./scripts/setup_conda.sh
notebooks/causal_trace.ipynb
demonstra o rastreamento causal, que pode ser modificado para aplicar o rastreamento ao processamento de qualquer instrução.
notebooks/rome.ipynb
demonstra ROMA. A API é simples; basta especificar uma reescrita solicitada no seguinte formato:
request = {
"prompt" : "{} plays the sport of" ,
"subject" : "LeBron James" ,
"target_new" : {
"str" : "football"
}
}
Vários exemplos semelhantes estão incluídos no caderno.
Detalhes em breve!
Consulte baselines/
para obter uma descrição das linhas de base disponíveis.
experiments/evaluate.py
pode ser usado para avaliar qualquer método em baselines/
. Para começar (por exemplo, usando ROME no GPT-2 XL), execute:
python3 -m experiments.evaluate
--alg_name=ROME
--model_name=gpt2-xl
--hparams_fname=gpt2-xl.json
Os resultados de cada execução são armazenados em results/<method_name>/run_<run_id>
em um formato específico:
results/
| __ ROME/
| __ run_ < run_id > /
| __ params.json
| __ case_0.json
| __ case_1.json
| __ ...
| __ case_10000.json
Para resumir os resultados, você pode usar experiments/summarize.py
:
python3 -m experiments.summarize --dir_name=ROME --runs=run_ < run_id >
A execução de python3 -m experiments.evaluate -h
ou python3 -m experiments.summarize -h
fornece detalhes sobre sinalizadores de linha de comando.
Digamos que você tenha um novo método X
e queira compará-lo no CounterFact. Para integrar X
ao nosso runner:
HyperParams
em XHyperParams
e especifique todos os campos de hiperparâmetros. Consulte ROMEHyperParameters
para obter um exemplo de implementação.hparams/X/gpt2-xl.json
e especifique alguns valores padrão. Consulte hparams/ROME/gpt2-xl.json
para obter um exemplo.apply_X_to_model
que aceita vários parâmetros e retorna (i) o modelo reescrito e (ii) os valores de peso originais para os parâmetros que foram editados (no formato de dicionário {weight_name: original_weight_value}
). Veja rome/rome_main.py
para ver um exemplo.X
a ALG_DICT
em experiments/evaluate.py
inserindo a linha "X": (XHyperParams, apply_X_to_model)
.Por fim, execute os scripts principais:
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 >
Atualmente, oferecemos suporte apenas a métodos que editam modelos HuggingFace autoregressivos usando o backend PyTorch. Estamos trabalhando em um conjunto de métodos de uso geral (utilizáveis, por exemplo, no TensorFlow e sem o HuggingFace) que serão lançados em breve.
@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 }
}