Este é o repositório para o código usado no artigo:
Cite o papel como:
@article { din2023jump ,
title = { Jump to Conclusions: Short-Cutting Transformers With Linear Transformations } ,
author = { Yom Din, Alexander and Karidi, Taelin and Choshen, Leshem and Geva, Mor } ,
journal = { arXiv preprint arXiv:2303.09435 } ,
year = { 2023 } ,
} Para produzir lotes para frases gpt2 e Wikipedia, execute o seguinte, na ordem por escrito:
get_wikipedia_sentences.py
(Produz ./experiment/sentences/wikipedia_20K-sentences.pickle , contendo 20k sentenças da Wikipedia)
add_tokenization.py
(Produz ./experiment/gpt2/wikipedia_tokenized_train.pickle contendo as tokenizações e posições de token aleatórias para as primeiras 9000 frases do arquivo produzido pelo script anterior, e ./experiment/gpt2/wikipedia_tokenized_val.pickle
add_linreg.py
(Produz ./linreg/gpt2/wikipedia/i_j.pickle where
add_plot_r2.py
(produz ./experiment/gpt2/wikipedia_r2_scores.pickle contendo o ./experiments/gpt2/plots/wikipedia/r2_scores_12.pdf contendo as parcelas de mapa de calor para estes
add_linreg_submodules.py
(Produz ./linreg/gpt2/wikipedia/pi_a_b.pickle where
add_results.py
(Produz ./experiment/gpt2/wikipedia_results.pickle contendo (para cada amostra do conjunto de validação) os 10 tokens principais, bem como a surpresa do modelo de 1 token superior, de acordo com os cinco mapeamentos do artigo, em cada camada;
plot_results.py
(Produz algumas parcelas em ./experiment/gpt2/plots/wikipedia/ com base nos resultados na saída do arquivo anterior)
Para produzir parcelas para frases de bert-base-uncased e Wikipedia, execute o seguinte, na ordem por escrito:
get_wikipedia_sentences.py
(o mesmo que para gpt2 acima, não há necessidade de executar novamente)
bert_add_reps.py
(Produz ./experiment/bert-base-uncased_mask/wikipedia_train.pickle contendo as tokenizações, posições aleatórias de token e representações do token aleatório mascarado em todas as camadas para as primeiras 9000 frases do arquivo produzido pelo script anterior e ./experiment/bert-base-uncased_mask/wikipedia_val.pickle , e. Posições e representações de token aleatórias do token aleatório mascarado em todas as camadas para as próximas 3000 frases)
bert_add_linreg.py
(Produz ./linreg/bert-base-uncased_mask/wikipedia/i_j.pickle where
bert_add_plot_r2.py
(Produz ./experiment/bert-base-uncased_mask/wikipedia_r2_scores.pickle contendo o ./experiments/bert-base-uncased_mask/plots/wikipedia/r2_scores_12.pdf contendo as parcelas de mapa de calor para estes
bert_add_results.py
(Produz ./experiment/bert-base-uncased_mask/wikipedia_results.pickle contendo (para cada amostra de conjunto de validação) os 10 tokens principais, bem como a surpresa do modelo do token superior 1, de acordo com
plot_results.py (altere model_folder_name='bert-base-uncased_mask' e plot_parts = False )
(Produz algumas parcelas em ./experiment/bert-base-uncased_mask/plots/wikipedia/ com base nos resultados na saída do arquivo anterior)
Também produzimos gráficos para gpt2-medium , gpt2-large , gpt2-xl , bert-large-uncased . Para fazer isso, deve-se modificar, de uma maneira relativamente forte, as variáveis na cabeça de cada script na sequência.
O código foi executado com Python 3.10.4 e as seguintes versões do pacote:
torch.__version__ = 1.13.1+cu117
transformers.__version__ = 4.20.1
sklearn.__version__ = 1.2.0
pickle.format_version = 4.0
datasets.__version__ = 2.5.2 # used only to fetch Wikipedia sentences
spacy.__version__ = 3.5.0 # used only to fetch Wikipedia sentences
Algumas das matrizes treinadas podem ser encontradas em https://huggingface.co/sashay/linear-hortcut.