INSEQ ist ein pytorchbasiertes hackbares Toolkit zur Demokratisierung des Zugangs zu gemeinsamen Post-hoc-Analysen von Vorstellbarkeitsanalysen von Modellen zur Generierung von Sequen .
Inseq ist auf PYPI erhältlich und kann mit pip für Python> = 3.10, <= 3.12 installiert werden:
# Install latest stable version
pip install inseq
# Alternatively, install latest development version
pip install git+https://github.com/inseq-team/inseq.git Installieren von Extras für die Visualisierung in Jupyter -Notizbüchern und? Datensätze Attribution als 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 Für Bibliotheksentwickler können Sie den Befehl make install-dev verwenden, um alle Entwicklungsabhängigkeiten (Qualität, Dokumente, Extras) zu installieren.
Nach der Installation sollten Sie in der Lage sein, make fast-test und make lint .
Die Installation des tokenizers -Pakets erfordert eine Rost -Compiler -Installation. Sie können Rost von https://rustup.rs installieren und $HOME/.cargo/env zu Ihrem Weg hinzufügen.
Das Installieren sentencepiece erfordert verschiedene Pakete. Installieren Sie mit sudo apt-get install cmake build-essential pkg-config oder brew install cmake gperftools pkg-config .
In diesem Beispiel wird die integrierte Gradienten-Attribution-Methode verwendet, um die englisch-französische Übersetzung eines Satzes aus dem Winomt Corpus zuzuschreiben:
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 ()Dies erzeugt eine Visualisierung der Zuschreibungswerte für jedes Token im Eingangssatz (die Aggregation auf Tokenebene wird automatisch behandelt). So sieht die Visualisierung in einem Jupyter -Notizbuch aus:
INSEQ unterstützt auch Decodierer-Modelle wie GPT-2 und ermöglicht die Verwendung einer Vielzahl von Zuschreibungsmethoden und anpassbaren Einstellungen direkt aus der Konsole:
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 () Merkmalszuordnung der Sequenzgenerierung für die meisten Modelle für die meisten ForConditionalGeneration (Encoder-Decoder) und ForCausalLM (Nur-Decoder-Nurse) von? Transformatoren
Unterstützung für mehrere Merkmalszuordnungsmethoden und erweitert die von Captum unterstützten diejenigen, die unterstützt werden
Nachbearbeitung, Filterung und Verschmelzung von Zuschreibungskarten über Aggregator .
Attribution Visualisierung in Notebooks, Browser und Befehlszeile.
Effiziente Zuordnung einzelner Beispiele oder Ganzes? Datensätze mit der Inseq CLI.
Benutzerdefinierte Zuordnung von Zielfunktionen, Unterstützung erweiterter Methoden wie kontrastive Merkmalszuordnungen und Kontext -Reliance -Erkennung.
Extraktion und Visualisierung der benutzerdefinierten Bewertungen (z. B. Wahrscheinlichkeit, Entropie) bei jedem Generationsschritt entlang der Zuschreibungskarten.
Verwenden Sie die Funktion inseq.list_feature_attribution_methods , um alle verfügbaren Methodenkennung und inseq.list_step_functions aufzulisten, um alle verfügbaren Schrittfunktionen aufzulisten. Die folgenden Methoden werden derzeit unterstützt:
saliency : Tief in Faltungsnetzwerken: Visualisierung von Bildklassifizierungsmodellen und Saliency -Karten (Simonyan et al., 2013)
input_x_gradient : Tief in Faltungsnetzwerken: Bildklassifizierungsmodelle und Salience -Karten visualisieren (Simonyan et al., 2013)
integrated_gradients : Axiomatische Zuschreibung für tiefe Netzwerke (Sundararajan et al., 2017)
deeplift : Lernen wichtige Merkmale durch Propagierung von Aktivierungsunterschieden (Shrikumar et al., 2017)
gradient_shap : Ein einheitlicher Ansatz zur Interpretation von Modellvorhersagen (Lundberg und Lee, 2017)
discretized_integrated_gradients : Diskretisierte integrierte Gradienten zur Erklärung von Sprachmodellen (Sanyal und Ren, 2021)
sequential_integrated_gradients : Sequentielle integrierte Gradienten: Eine einfache, aber effektive Methode zur Erklärung von Sprachmodellen (Enguehard, 2023)
attention : Aufmerksamkeitsbeschreibung, aus neuronaler maschineller Übersetzung durch gemeinsames Lernen, sich auszurichten und zu übersetzen (Bahdanau et al., 2014) occlusion : Visualisierung und Verständnis von Faltungsnetzen (Zeiler und Fergus, 2014)
lime : "Warum sollte ich dir vertrauen?": Erklären Sie die Vorhersagen eines Klassifikators (Ribeiro et al., 2016)
value_zeroing : Quantifizierung des Kontextmischens in Transformatoren (Mohebbi et al. 2023)
reagent : Reagenz: Eine Modell-Agnostic-Merkmalszuordnungsmethode für generative Sprachmodelle (Zhao et al., 2024)
Schrittfunktionen werden verwendet, um in jedem Schritt des Attributionsprozesses benutzerdefinierte Bewertungen aus dem Modell zu extrahieren, mit dem Argument step_scores in model.attribute . Sie können auch als Ziele für Attributionsmethoden verwendet werden, die sich auf Modellausgaben (z. B. Gradientenmethoden) stützen, indem sie sie als das Argument attributed_fn übergeben. Die folgenden Schrittfunktionen werden derzeit unterstützt:
logits : Logits des Zieltokens.probability : Wahrscheinlichkeit des Ziel -Tokens. Kann auch für die Protokollverbotbarkeit verwendet werden, indem logprob=True bestanden wird.entropy : Entropie der Vorhersageverteilung.crossentropy : Cross-Entropy-Verlust zwischen Zieltoken und vorhergesagter Verteilung.perplexity : Verwirrung des Ziel -Tokens.contrast_logits / contrast_prob : logits / Wahrscheinlichkeiten des Zieltokens Wenn dem Modell verschiedene kontrastive Eingaben bereitgestellt werden. Äquivalent zu logits / probability , wenn keine kontrastiven Eingänge bereitgestellt werden.contrast_logits_diff / contrast_prob_diff : Differenz in logits / Wahrscheinlichkeit zwischen Original- und Folienziel -Token -Paar kann zur kontrastiven Bewertung verwendet werden, wie in der kontrastiven Attribution (Yin und Neubig, 2022).pcxmi : Point-Wise Contextual Cross-Mutual Information (P-CXMI) für das Zieltoken, die ursprüngliche und kontrastive Kontexte gegeben wurden (Yin et al. 2021).kl_divergence : KL -Divergenz der prädiktiven Verteilung bei ursprünglichen und kontrastiven Kontexten. Kann auf die wahrscheinlichsten Zieltoken -Optionen mit den Parametern top_k und top_p beschränkt werden.in_context_pvi : In-Context Pointwise V-Nutzungsinformationen (PVI) zur Messung der in Modellvorhersagen verwendeten Kontextinformationen (Lu et al. 2023).mc_dropout_prob_avg : Durchschnittliche Wahrscheinlichkeit des Zieltokens über mehrere Proben mit MC -Dropout (Gal und Ghahramani, 2016).top_p_size : Die Anzahl der Token mit kumulativer Wahrscheinlichkeit größer als top_p in der Vorhersageverteilung des Modells. Das folgende Beispiel berechnet kontrastive Zuschreibungen mit der Schrittfunktion 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 ()Ein Beispiel einschließlich der Registrierung für benutzerdefinierte Funktionen finden Sie in der Dokumentation.
Die InSEQ -Bibliothek bietet auch nützliche Client -Befehle, um eine wiederholte Zuordnung einzelner Beispiele und sogar ganzer zu ermöglichen? Datensätze direkt aus der Konsole. Sehen Sie sich die verfügbaren Optionen an, indem Sie inseq -h nach der Installation des Pakets in das Terminal eingeben.
Drei Befehle werden unterstützt:
inseq attribute : Wrapper zum Aktivieren von model.attribute Verwendung in der Konsole.
inseq attribute-dataset : Erweitert attribute auf den vollständigen Datensatz mithilfe von datasets.load_dataset -API.
inseq attribute-context : Erkennt und Attribut-Kontextabhängigkeit für Erzeugungsaufgaben unter Verwendung des Ansatzes von Sarti et al. (2023).
Alle Befehle unterstützen den gesamten Bereich der Parameter, die für attribute , Attributionsvisualisierung in der Konsole verfügbar sind und die Ausgänge auf der Festplatte speichern.
inseq attribute Das folgende Beispiel führt eine einfache Merkmalszuordnung eines englischen Satzes durch, das mit einem Mariannmt -Übersetzungsmodell von transformers in Italiener übersetzt wurde. Das Endergebnis wird zur Konsole gedruckt.
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 Beispiel Der folgende Code kann verwendet werden, um die Zuschreibung (sowohl die Quelle als auch die Zielseite) italienischer Übersetzungen für eine Dummy-Probe von 20 englischen Sätzen aus dem Parallelkorpus von Flores-101 durch ein Mariannmt-Übersetzungsmodell aus umarmenden transformers durchzuführen. Wir speichern die Visualisierungen im HTML -Format in der attributions.html . Weitere Optionen finden Sie in der Flagge --help .
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 -Beispiel Das folgende Beispiel verwendet ein kleines LM, um eine Fortsetzung von input_current_text zu generieren und den zusätzlichen Kontext von input_context_text bereitzustellen, um ihren Einfluss auf die Generation abzuschätzen. In diesem Fall wird die Ausgabe "to the hospital. He said he was fine" , und die Erzeugung des Token hospital sei nach der Stufenfunktion von contrast_prob_diff von Kontext sick abhängig.
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 "Ergebnis:
Unterstützen Sie mehr aufmerksamkeitsbasierte und okklusionsbasierte Merkmalszuordnungsmethoden (dokumentiert in #107 und #108).
Interoperabilität mit Frettchen zur Zuordnungsplausibilität und Bewertung der Treue.
Reiche und interaktive Visualisierungen in einer Registerkarte mit Gradio -Blöcken.
Unsere Vision für Inseq ist es, eine zentralisierte, umfassende und robuste Gruppe von Tools zu erstellen, um faire und reproduzierbare Vergleiche in der Untersuchung von Sequenzgenerierungsmodellen zu ermöglichen. Um dieses Ziel zu erreichen, sind Beiträge von Forschern und Entwicklern, die an diesen Themen interessiert sind, mehr als willkommen. Weitere Informationen finden Sie in unseren beitragenden Richtlinien und unserem Verhaltenskodex.
Wenn Sie Inseq in Ihrer Forschung verwenden, empfehlen wir eine Erwähnung der spezifischen Veröffentlichung (z. B. v0.6.0) und bitten Sie freundlich, unser Referenzpapier als:
@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 " ,
}
Inseq wurde in verschiedenen Forschungsprojekten verwendet. Eine Liste bekannter Veröffentlichungen, die Inseq verwenden, um Interpretierbarkeitsanalysen von Generativmodellen durchzuführen, ist unten gezeigt.
Tipp
Letzter Update: August 2024. Bitte öffnen Sie eine Pull -Anfrage, um Ihre Veröffentlichung zur Liste hinzuzufügen.