Ceci est le référentiel du code utilisé dans le papier:
Veuillez citer le papier comme:
@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 } ,
} Pour produire des parcelles pour les phrases gpt2 et Wikipedia, exécutez ce qui suit, dans l'ordre écrit:
get_wikipedia_sences.py
(produit ./experiment/sentences/wikipedia_20K-sentences.pickle , contenant 20 000 phrases de Wikipedia)
add_tokenisation.py
(Produit ./experiment/gpt2/wikipedia_tokenized_train.pickle contenant les tokennisations et les positions de jetons aléatoires pour les 9000 premières phrases du fichier produit par le script précédent, et ./experiment/gpt2/wikipedia_tokenized_val.pickle contenant les tokennizations et les positions aléatoires pour les 3000 postes pour les tox
add_linreg.py
(produit ./linreg/gpt2/wikipedia/i_j.pickle où
add_plot_r2.py
(produit ./experiment/gpt2/wikipedia_r2_scores.pickle contenant le ./experiments/gpt2/plots/wikipedia/r2_scores_12.pdf
add_linreg_submodules.py
(produit ./linreg/gpt2/wikipedia/pi_a_b.pickle où
add_results.py
(Produit ./experiment/gpt2/wikipedia_results.pickle contenant (pour chaque échantillon d'ensemble de validation) les 10 tokens supérieurs, ainsi que la surprise du modèle du token supérieur 1, selon les cinq mappages du papier, à chaque couche; et contenant également les 10 tokens supérieurs et le nombre de couches traitées lorsqu'ils sont précoces et en utilisant les macappings
tracé_results.py
(produit des parcelles dans ./experiment/gpt2/plots/wikipedia/ basée sur les résultats de la sortie du fichier précédent)
Pour produire des intrigues pour les phrases bert-base-uncased et Wikipedia, exécutez ce qui suit, dans l'ordre écrit:
get_wikipedia_sences.py
(le même que pour gpt2 ci-dessus, pas besoin de redire)
bert_add_reps.py
(Produit ./experiment/bert-base-uncased_mask/wikipedia_train.pickle contenant les tokennisations, des positions de jetons aléatoires et des représentations du jeton aléatoire masqué sur toutes les couches pour les 9000 premières phrases du fichier produit par le scénario précédent, et ./experiment/bert-base-uncased_mask/wikipedia_val.pickle . Positions et représentations de jeton du jeton aléatoire masqué sur toutes les couches pour les 3000 prochaines phrases)
bert_add_linreg.py
(produit ./linreg/bert-base-uncased_mask/wikipedia/i_j.pickle où
bert_add_plot_r2.py
(produit ./experiment/bert-base-uncased_mask/wikipedia_r2_scores.pickle contenant le ./experiments/bert-base-uncased_mask/plots/wikipedia/r2_scores_12.pdf contenant les parcelles de lame de chaleur pour ces
bert_add_results.py
(Produit ./experiment/bert-base-uncased_mask/wikipedia_results.pickle contenant (pour chaque échantillon de validation) les 10 meilleurs jetons, ainsi que la surprise du modèle du jeton supérieur 1, selon le
tracé_results.py (Changer model_folder_name='bert-base-uncased_mask' et plot_parts = False )
(Produit quelques parcelles dans ./experiment/bert-base-uncased_mask/plots/wikipedia/ sur la base des résultats de la sortie du fichier précédent)
Nous avons également produit des graphiques pour gpt2-medium , gpt2-large , gpt2-xl , bert-large-uncased . Pour ce faire, il faut modifier, d'une manière relativement à la recherche, les variables à la tête de chaque script dans la séquence.
Le code a été exécuté avec Python 3.10.4 et les versions de package suivantes:
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
Certaines des matrices qualifiées peuvent être trouvées sur https://huggingface.co/sashay/linear-shortcut.