Skip to main content

Interpretability for Sequence Generation Models 🔍

Project description

Intepretability for Sequence Generation Models 🔍


Build status Docs status Version Python Version Downloads License

Follow Inseq on Twitter Follow Inseq on Mastodon

Inseq is a Pytorch-based hackable toolkit to democratize the access to common post-hoc interpretability analyses of sequence generation models.

Installation

Inseq is available on PyPI and can be installed with pip:

# Install latest stable version
pip install inseq

# Alternatively, install latest development version
pip install git+https://github.com/inseq-team/inseq.git

Install extras for visualization in Jupyter Notebooks and 🤗 datasets attribution as pip install inseq[notebook,datasets].

Dev Installation To install the package, clone the repository and run the following commands:
cd inseq
make poetry-download # Download and install the Poetry package manager
make install # Installs the package and all dependencies

If you have a GPU available, use make install-gpu to install the latest torch version with GPU support.

For library developers, you can use the make install-dev command to install and its GPU-friendly counterpart make install-dev-gpu to install all development dependencies (quality, docs, extras).

After installation, you should be able to run make fast-test and make lint without errors.

FAQ Installation
  • Installing the tokenizers package requires a Rust compiler installation. You can install Rust from https://rustup.rs and add $HOME/.cargo/env to your PATH.

  • Installing sentencepiece requires various packages, install with sudo apt-get install cmake build-essential pkg-config or brew install cmake gperftools pkg-config.

Example usage in Python

This example uses the Integrated Gradients attribution method to attribute the English-French translation of a sentence taken from the WinoMT corpus:

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()

This produces a visualization of the attribution scores for each token in the input sentence (token-level aggregation is handled automatically). Here is what the visualization looks like inside a Jupyter Notebook:

WinoMT Attribution Map

Inseq also supports decoder-only models such as GPT-2, enabling usage of a variety of attribution methods and customizable settings directly from the 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()

GPT-2 Attribution in the console

Features

  • 🚀 Feature attribution of sequence generation for most ForConditionalGeneration (encoder-decoder) and ForCausalLM (decoder-only) models from 🤗 Transformers

  • 🚀 Support for multiple feature attribution methods, sourced in part from Captum

  • 🚀 Post-processing of attribution maps via Aggregator classes.

  • 🚀 Attribution visualization in notebooks, browser and command line.

  • 🚀 Attribute single examples or entire 🤗 datasets with the Inseq CLI.

  • 🚀 Custom attribution of target functions, supporting advanced use cases such as contrastive and uncertainty-weighted feature attributions.

  • 🚀 Extraction and visualization of custom step scores (e.g. probability, entropy) alongsides attribution maps.

Supported methods

Use the inseq.list_feature_attribution_methods function to list all available method identifiers and inseq.list_step_functions to list all available step functions. The following methods are currently supported:

Gradient-based attribution

Internals-based attribution

Perturbation-based attribution

  • occlusion: Occlusion (Zeiler and Fergus, 2014)

  • lime: LIME (Ribeiro et al., 2016)

Step functions

Step functions are used to extract custom scores from the model at each step of the attribution process with the step_scores argument in model.attribute. They can also be used as targets for attribution methods relying on model outputs (e.g. gradient-based methods) by passing them as the attributed_fn argument. The following step functions are currently supported:

  • logits: Logits of the target token.
  • probability: Probability of the target token.
  • entropy: Entropy of the predictive distribution.
  • crossentropy: Cross-entropy loss between target token and predicted distribution.
  • perplexity: Perplexity of the target token.
  • contrast_prob_diff: Difference in probability between the target token and a foil token used for contrastive evaluation as in Contrastive Attribution (Yin and Neubig, 2022).
  • mc_dropout_prob_avg: Average probability of the target token across multiple samples using MC Dropout (Gal and Ghahramani, 2016).

The following example computes contrastive attributions using the contrast_prob_diff step function:

import inseq

attribution_model = inseq.load_model("gpt2", "input_x_gradient")

# Pre-compute ids and attention map for the contrastive target
contrast = attribution_model.encode("Can you stop the dog from crying")

# Perform the contrastive attribution:
# Regular (forced) target -> "Can you stop the dog from barking"
# Contrastive target      -> "Can you stop the dog from crying"
out = attribution_model.attribute(
    "Can you stop the dog from",
    "Can you stop the dog from barking",
    attributed_fn="contrast_prob_diff",
    contrast_ids=contrast.input_ids,
    contrast_attention_mask=contrast.attention_mask,
    # We also visualize the corresponding step score
    step_scores=["contrast_prob_diff"]
)
out.show()

Refer to the documentation for an example including custom function registration.

Using the Inseq client

The Inseq library also provides useful client commands to enable repeated attribution of individual examples and even entire 🤗 datasets directly from the console. See the available options by typing inseq -h in the terminal after installing the package.

For now, two commands are supported:

  • ìnseq attribute: Wraps the attribute method shown above, requires explicit inputs to be attributed.

  • inseq attribute-dataset: Enables attribution for a full dataset using Hugging Face datasets.load_dataset.

Both commands support the full range of parameters available for attribute, attribution visualization in the console and saving outputs to disk.

Example: The following command can be used to perform attribution (both source and target-side) of Italian translations for a dummy sample of 20 English sentences taken from the FLORES-101 parallel corpus, using a MarianNMT translation model from Hugging Face transformers. We save the visualizations in HTML format in the file attributions.html. See the --help flag for more 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 \
  --hide

Planned Development

  • ⚙️ Support more attention-based and occlusion-based feature attribution methods (documented in #107 and #108).

  • ⚙️ Interoperability with ferret for attribution plausibility and faithfulness evaluation.

  • ⚙️ Rich and interactive visualizations in a tabbed interface using Gradio Blocks.

Contributing

Our vision for Inseq is to create a centralized, comprehensive and robust set of tools to enable fair and reproducible comparisons in the study of sequence generation models. To achieve this goal, contributions from researchers and developers interested in these topics are more than welcome. Please see our contributing guidelines and our code of conduct for more information.

Citing Inseq

A demo paper showcasing the Inseq library is presently in the works. In the meantime, if you use Inseq we kindly ask you to include the link https://github.com/inseq-team/inseq as a footnote and cite it as:

@software{inseq,
  author    = {Sarti, Gabriele and Sickert, Ludwig and Feldhus, Nils and van der Wal, Oskar},
  title     = {Inseq: An Interpretability Toolkit for Sequence Generation Models},
  month     = jan,
  year      = 2023,
  publisher = {Zenodo},
  version   = {0.3.3},
  doi       = {10.5281/zenodo.7550249},
  url       = {https://doi.org/10.5281/zenodo.7550249}
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

inseq-0.4.0.tar.gz (96.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

inseq-0.4.0-py3-none-any.whl (112.3 kB view details)

Uploaded Python 3

File details

Details for the file inseq-0.4.0.tar.gz.

File metadata

  • Download URL: inseq-0.4.0.tar.gz
  • Upload date:
  • Size: 96.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.9.13 Linux/5.15.0-60-generic

File hashes

Hashes for inseq-0.4.0.tar.gz
Algorithm Hash digest
SHA256 7aa842ff1f53c6853404384e860f20cce49c70de0e77f4e1bc1cd4571a111693
MD5 dd994345d7453eba59a2ed5951a1c0d3
BLAKE2b-256 5c0448c44cfd680463ebee4ddbaadf1843af00fcccf0306991f507b66b5be4fd

See more details on using hashes here.

File details

Details for the file inseq-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: inseq-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 112.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.9.13 Linux/5.15.0-60-generic

File hashes

Hashes for inseq-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 63855babec38c8f27338ddf9b0765491613a07af148060fe18072e48463595d2
MD5 928721a6de800c52195e6c109c42a818
BLAKE2b-256 c0cd88e041b0981aae13b690a700d064f40dd9821d4dc6a45e4efb0d5993918a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page