INSEQ est une boîte à outils piratable basée sur Pytorch pour démocratiser l'accès à des analyses courantes post-hoc dans la terrabilité des modèles de génération de sections .
INSEQ est disponible sur PYPI et peut être installé avec pip pour Python> = 3,10, <= 3,12:
# Install latest stable version
pip install inseq
# Alternatively, install latest development version
pip install git+https://github.com/inseq-team/inseq.git Installez des extras pour la visualisation dans les cahiers Jupyter et? Attribution des ensembles de données comme pip install inseq[notebook,datasets] .
cd inseq
make uv-download # Download and install the UV package manager
make install # Installs the package and all dependencies Pour les développeurs de bibliothèques, vous pouvez utiliser la commande make install-dev pour installer toutes les dépendances de développement (qualité, docs, extras).
Après l'installation, vous devriez pouvoir make fast-test et make lint sans erreurs.
L'installation du package tokenizers nécessite une installation de compilateur de rouille. Vous pouvez installer Rust à partir de https://rustup.rs et ajouter $HOME/.cargo/env sur votre chemin.
L'installation sentencepiece nécessite divers packages, installez avec sudo apt-get install cmake build-essential pkg-config ou brew install cmake gperftools pkg-config .
Cet exemple utilise la méthode d'attribution des gradients intégrés pour attribuer la traduction anglaise-française d'une phrase prise dans le corpus Winomt:
import inseq
model = inseq . load_model ( "Helsinki-NLP/opus-mt-en-fr" , "integrated_gradients" )
out = model . attribute (
"The developer argued with the designer because her idea cannot be implemented." ,
n_steps = 100
)
out . show ()Cela produit une visualisation des scores d'attribution pour chaque jeton dans la phrase d'entrée (l'agrégation au niveau du jeton est gérée automatiquement). Voici à quoi ressemble la visualisation dans un cahier Jupyter:
INSEQ prend également en charge des modèles de décodeur uniquement tels que GPT-2, permettant l'utilisation d'une variété de méthodes d'attribution et de paramètres personnalisables directement à partir de la console:
import inseq
model = inseq . load_model ( "gpt2" , "integrated_gradients" )
model . attribute (
"Hello ladies and" ,
generation_args = { "max_new_tokens" : 9 },
n_steps = 500 ,
internal_batch_size = 50
). show () Attribution des fonctionnalités de la génération de séquences pour la plupart des modèles ForConditionalGeneration (coder-décodeur) et ForCausalLM (Decoder uniquement)? Transformateurs
Prise en charge de plusieurs méthodes d'attribution des fonctionnalités, étendant celles prises en charge par Captum
Post-traitement, filtrage et fusion des cartes d'attribution via des classes Aggregator .
Visualisation d'attribution dans les ordinateurs portables, le navigateur et la ligne de commande.
Attribution efficace des exemples uniques ou entiers? ensembles de données avec l'INSEQ CLI.
Attribution personnalisée des fonctions cibles, soutenant des méthodes avancées telles que les attributions de caractéristiques contrastées et la détection de recours au contexte.
Extraction et visualisation des scores personnalisés (par exemple la probabilité, entropie) à chaque étape de génération le long des cartes d'attribution.
Utilisez la fonction inseq.list_feature_attribution_methods pour répertorier toutes les identificateurs de méthode disponibles et inseq.list_step_functions pour répertorier toutes les fonctions d'étape disponibles. Les méthodes suivantes sont actuellement prises en charge:
saliency : Réseaux convolutionnels profondément à l'intérieur: visualiser les modèles de classification d'images et les cartes de saillance (Simonyan et al., 2013)
input_x_gradient : Networks convolutionnels profondément à l'intérieur: visualiser les modèles de classification d'images et les cartes de saillance (Simonyan et al., 2013)
integrated_gradients : Attribution axiomatique pour les réseaux profonds (Sundararajan et al., 2017)
deeplift : Apprendre des caractéristiques importantes grâce à la propagation des différences d'activation (Shrikumar et al., 2017)
gradient_shap : une approche unifiée pour interpréter les prédictions du modèle (Lundberg et Lee, 2017)
discretized_integrated_gradients : gradients intégrés discrétisés pour expliquer les modèles de langue (Sanyal et Ren, 2021)
sequential_integrated_gradients : Gradient intégré séquentiel: une méthode simple mais efficace pour expliquer les modèles de langage (Enguehard, 2023)
attention : attribution du poids de l'attention, de la traduction de la machine neurale en apprenant conjointement à aligner et à traduire (Bahdanau et al., 2014) occlusion : Visualiser et comprendre les réseaux convolutionnels (Zeiler et Fergus, 2014)
lime : "Pourquoi devrais-je vous faire confiance?": Expliquer les prédictions d'un classificateur (Ribeiro et al., 2016)
value_zeroing : Quantification du mélange de contexte dans les transformateurs (Mohebbi et al. 2023)
reagent : réactif: une méthode d'attribution de fonctionnalités d'automobiles de modèle pour les modèles de langage génératif (Zhao et al., 2024)
Les fonctions d'étape sont utilisées pour extraire des scores personnalisés à partir du modèle à chaque étape du processus d'attribution avec l'argument step_scores dans model.attribute . Ils peuvent également être utilisés comme cibles pour les méthodes d'attribution reposant sur les sorties du modèle (par exemple, les méthodes basées sur le gradient) en les transmettant comme l'argument attributed_fn . Les fonctions d'étape suivantes sont actuellement prises en charge:
logits : Logits du jeton cible.probability : probabilité du jeton cible. Peut également être utilisé pour la probabilité du log en passant logprob=True .entropy : Entropie de la distribution prédictive.crossentropy : perte entre l'entropie entre le jeton cible et la distribution prévue.perplexity : perplexité du jeton cible.contrast_logits / contrast_prob : logits / probabilités du jeton cible lorsque différentes entrées contrastées sont fournies au modèle. Équivalent aux logits / probability lorsqu'aucune entrée contrastive n'est fournie.contrast_logits_diff / contrast_prob_diff : la différence dans les logits / la probabilité entre la paire de jetons cibles d'origine et de papier d'aluminium, peut être utilisé pour l'évaluation contrastive comme dans l'attribution contrastive (Yin et Neubig, 2022).pcxmi : Informations inter-mutuelles contextuelles ponctuelles (P-CXMI) pour le jeton cible donné des contextes originaux et contrastifs (Yin et al. 2021).kl_divergence : Kl Divergence de la distribution prédictive donnée des contextes originaux et contrastifs. Peut être limité aux options de jetons cibles les plus probables à l'aide des paramètres top_k et top_p .in_context_pvi : Informations ponctuelles ponctuelles en V (PVI) pour mesurer la quantité d'informations contextuelles utilisées dans les prédictions du modèle (Lu et al. 2023).mc_dropout_prob_avg : Probabilité moyenne du jeton cible sur plusieurs échantillons en utilisant MC Dropout (Gal et Ghahramani, 2016).top_p_size : le nombre de jetons avec une probabilité cumulative supérieure à top_p dans la distribution prédictive du modèle. L'exemple suivant calcule les attributions contrastives à l'aide de la fonction d'étape contrast_prob_diff :
import inseq
attribution_model = inseq . load_model ( "gpt2" , "input_x_gradient" )
# Perform the contrastive attribution:
# Regular (forced) target -> "The manager went home because he was sick"
# Contrastive target -> "The manager went home because she was sick"
out = attribution_model . attribute (
"The manager went home because" ,
"The manager went home because he was sick" ,
attributed_fn = "contrast_prob_diff" ,
contrast_targets = "The manager went home because she was sick" ,
# We also visualize the corresponding step score
step_scores = [ "contrast_prob_diff" ]
)
out . show ()Reportez-vous à la documentation d'un exemple comprenant l'enregistrement des fonctions personnalisées.
La bibliothèque INSEQ fournit également des commandes client utiles pour activer l'attribution répétée d'exemples individuels et même entiers? ensembles de données directement à partir de la console. Voir les options disponibles en tapant inseq -h dans le terminal après l'installation du package.
Trois commandes sont prises en charge:
inseq attribute : wrapper pour activer model.attribute Utilisation dans la console.
inseq attribute-dataset : étend attribute à l'ensemble de données complet à l'aide de l'API Hugging Face datasets.load_dataset .
inseq attribute-context : détecte et attribue la dépendance du contexte pour les tâches de génération en utilisant l'approche de Sarti et al. (2023).
Toutes les commandes prennent en charge la gamme complète de paramètres disponibles pour attribute , la visualisation d'attribution dans la console et la sauvegarde des sorties en disque.
inseq attribute L'exemple suivant effectue une attribution de fonctionnalité simple d'une phrase anglaise traduite en italien en utilisant un modèle de traduction Mariannmt de transformers . Le résultat final est imprimé sur la console.
inseq attribute
--model_name_or_path Helsinki-NLP/opus-mt-en-it
--attribution_method saliency
--input_texts " Hello world this is Inseq! Inseq is a very nice library to perform attribution analysis "inseq attribute-dataset Le code suivant peut être utilisé pour effectuer l'attribution (à la fois la source et le côté cible) des traductions italiennes pour un échantillon factice de 20 phrases en anglais tirées du corpus parallèle Flores-101, en utilisant un modèle de traduction Mariannmt à partir de transformers de face étreintes. Nous enregistrons les visualisations au format HTML dans le fichier attributions.html . Voir l'indicateur --help pour plus d'options.
inseq attribute-dataset
--model_name_or_path Helsinki-NLP/opus-mt-en-it
--attribution_method saliency
--do_prefix_attribution
--dataset_name inseq/dummy_enit
--input_text_field en
--dataset_split " train[:20] "
--viz_path attributions.html
--batch_size 8
--hideinseq attribute-context L'exemple suivant utilise un petit LM pour générer une continuation de input_current_text , et utilise le contexte supplémentaire fourni par input_context_text pour estimer son influence sur la génération. Dans ce cas, la production "to the hospital. He said he was fine" est produit, et la génération de hospital de jeton dépend du contexte sick le jeton de la fonction contrast_prob_diff .
inseq attribute-context
--model_name_or_path HuggingFaceTB/SmolLM-135M
--input_context_text " George was sick yesterday. "
--input_current_text " His colleagues asked him to come "
--attributed_fn " contrast_prob_diff "Résultat:
Prise en charge des méthodes d'attribution des fonctionnalités basées sur l'attention et basées sur l'occlusion (documentées dans # 107 et # 108).
Interopérabilité avec le furet pour la plausibilité d'attribution et l'évaluation de la fidélité.
Visualisations riches et interactives dans une interface à onglets utilisant des blocs de graddio.
Notre vision de l'INSEQ est de créer un ensemble d'outils centralisés, complets et robustes pour permettre des comparaisons équitables et reproductibles dans l'étude des modèles de génération de séquences. Pour atteindre cet objectif, les contributions des chercheurs et des développeurs intéressés par ces sujets sont plus que bienvenues. Veuillez consulter nos directives contributives et notre code de conduite pour plus d'informations.
Si vous utilisez INSEQ dans vos recherches, nous vous suggérons d'inclure une mention de la version spécifique (par exemple V0.6.0) et nous vous demandons de citer notre document de référence comme:
@inproceedings { sarti-etal-2023-inseq ,
title = " Inseq: An Interpretability Toolkit for Sequence Generation Models " ,
author = " Sarti, Gabriele and
Feldhus, Nils and
Sickert, Ludwig and
van der Wal, Oskar and
Nissim, Malvina and
Bisazza, Arianna " ,
booktitle = " Proceedings of the 61st Annual Meeting of the Association for Computational Linguistics (Volume 3: System Demonstrations) " ,
month = jul,
year = " 2023 " ,
address = " Toronto, Canada " ,
publisher = " Association for Computational Linguistics " ,
url = " https://aclanthology.org/2023.acl-demo.40 " ,
doi = " 10.18653/v1/2023.acl-demo.40 " ,
pages = " 421--435 " ,
}
L'INSEQ a été utilisée dans divers projets de recherche. Une liste de publications connues qui utilise INSEQ pour effectuer des analyses d'interprétabilité des modèles génératives est présentée ci-dessous.
Conseil
Dernière mise à jour: août 2024. Veuillez ouvrir une demande de traction pour ajouter votre publication à la liste.