A INSEQ é um kit de ferramentas hackable baseado em Pytorch para democratizar o acesso a análises comuns de pós- interpretação em modelos de geração de sequeência .
O INSEQ está disponível no Pypi e pode ser instalado com pip para 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 Instale extras para visualização em notebooks Jupyter e? DataSets Attribution como 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 Para desenvolvedores de bibliotecas, você pode usar o comando make install-dev para instalar todas as dependências de desenvolvimento (qualidade, documentos, extras).
Após a instalação, você poderá executar make fast-test e make lint sem erros.
A instalação do pacote tokenizers requer uma instalação do compilador de ferrugem. Você pode instalar a ferrugem em https://rustup.rs e adicionar $HOME/.cargo/env ao seu caminho.
A instalação sentencepiece requer vários pacotes, instale com sudo apt-get install cmake build-essential pkg-config ou brew install cmake gperftools pkg-config .
Este exemplo usa o método de atribuição de gradientes integrados para atribuir a tradução em inglês-francês de uma frase tirada do 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 ()Isso produz uma visualização das pontuações de atribuição para cada token na frase de entrada (a agregação no nível do token é tratada automaticamente). Aqui está a aparência da visualização dentro de um notebook Jupyter:
A INSEQ também suporta modelos somente para decodificadores, como o GPT-2, permitindo o uso de uma variedade de métodos de atribuição e configurações personalizáveis diretamente do 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 () ATRIBUIÇÃO DE RECURSO DA GERAÇÃO DE SEQUÊNCIA para a maioria dos modelos de generação ForConditionalGeneration (codificador-decodificador) e ForCausalLM (somente decodificador) de? Transformadores
Suporte para vários métodos de atribuição de recursos, estendendo os suportados por Captum
Pós-processamento, filtragem e fusão de mapas de atribuição por meio de classes Aggregator .
Visualização de atribuição em notebooks, navegador e linha de comando.
Atribuição eficiente de exemplos únicos ou inteiros? conjuntos de dados com a INSEQ CLI.
Atribuição personalizada das funções de destino, apoiando métodos avançados, como atribuições de recursos contrastantes e detecção de dependência de contexto.
Extração e visualização de pontuações personalizadas (por exemplo, probabilidade, entropia) em cada geração etapa dos mapas de atribuição.
Use a função inseq.list_feature_attribution_methods para listar todos os identificadores de método disponíveis e inseq.list_step_functions para listar todas as funções de etapas disponíveis. Os seguintes métodos são suportados atualmente:
saliency : Dentro de redes convolucionais: visualização de modelos de classificação de imagens e mapas de saliência (Simonyan et al., 2013)
input_x_gradient : Redes convolucionais profundas: Visualizando modelos de classificação de imagens e mapas de saliência (Simonyan et al., 2013)
integrated_gradients : Axiomatic Attribution for Deep Networks (Sundararajan et al., 2017)
deeplift : Aprendendo recursos importantes através da propagação de diferenças de ativação (Shrikumar et al., 2017)
gradient_shap : Uma abordagem unificada para interpretar previsões de modelos (Lundberg e Lee, 2017)
discretized_integrated_gradients : Gradientes integrados discretizados para explicar modelos de idiomas (Sanyal e Ren, 2021)
sequential_integrated_gradients : gradientes integrados sequenciais: um método simples, mas eficaz, para explicar modelos de linguagem (Enguehard, 2023)
attention : Atenção Atribuição de peso, da tradução da máquina neural aprendendo em conjunto para alinhar e traduzir (Bahdanau et al., 2014) occlusion : Visualizar e entender as redes convolucionais (Zeiler e Fergus, 2014)
lime : "Por que eu deveria confiar em você?": Explicando as previsões de qualquer classificador (Ribeiro et al., 2016)
value_zeroing : Quantificando a mistura de contexto em transformadores (Mohebbi et al. 2023)
reagent : Reagente: um método de atribuição de recursos-modelo modelo para modelos de linguagem generativa (Zhao et al., 2024)
As funções de etapa são usadas para extrair pontuações personalizadas do modelo em cada etapa do processo de atribuição com o argumento de step_scores no model.attribute . Eles também podem ser usados como alvos para métodos de atribuição que dependem de saídas do modelo (por exemplo, métodos baseados em gradiente), passando-os como o argumento attributed_fn . As funções seguintes são suportadas atualmente:
logits : logits do token de destino.probability : probabilidade do token alvo. Também pode ser usado para probabilidade de log passando logprob=True .entropy : entropia da distribuição preditiva.crossentropy : perda de entropia cruzada entre o token alvo e a distribuição prevista.perplexity : perplexidade do token alvo.contrast_logits / contrast_prob : logits / probabilidades do token de destino quando diferentes entradas contrastantes são fornecidas ao modelo. Equivalente a logits / probability quando não são fornecidas entradas contrastantes.contrast_logits_diff / contrast_prob_diff : diferença nos logits / probabilidade entre o par original e o alvo de alvo, pode ser usado para avaliação contrastiva, como em atribuição contrastiva (Yin e Neubig, 2022).pcxmi : Informações cruzadas contextuais em ponto (P-CXMI) para o token alvo, dadas contextos originais e contrastantes (Yin et al. 2021).kl_divergence : KL Divergência da distribuição preditiva, dados contextos originais e contrastantes. Pode ser restrito às opções de token de destino mais prováveis usando os parâmetros top_k e top_p .in_context_pvi : Informações V-Usable Pointwise (PVI) no Contexto (PVI) para medir a quantidade de informações contextuais usadas nas previsões do modelo (Lu et al. 2023).mc_dropout_prob_avg : Probabilidade média do token de destino em várias amostras usando o MC Dropout (Gal e Ghahramani, 2016).top_p_size : O número de tokens com probabilidade cumulativa maior que top_p na distribuição preditiva do modelo. O exemplo a seguir calcula atribuições contrastantes usando a função 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 ()Consulte a documentação para um exemplo, incluindo registro de função personalizado.
A biblioteca INSEQ também fornece comandos úteis do cliente para permitir a atribuição repetida de exemplos individuais e até inteiros? conjuntos de dados diretamente do console. Consulte as opções disponíveis digitando inseq -h no terminal após a instalação do pacote.
Três comandos são suportados:
inseq attribute : Wrapper para ativar model.attribute Atributo Uso no console.
inseq attribute-dataset : estende attribute ao conjunto de dados completo usando datasets.load_dataset de face hugging.load_dataset API.
inseq attribute-context : Detects and attribute context dependence for generation tasks using the approach of Sarti et al. (2023).
Todos os comandos suportam toda a gama de parâmetros disponíveis para attribute , visualização de atribuição no console e salvando saveiros no disco.
inseq attribute O exemplo a seguir executa uma atribuição simples de recurso de uma frase em inglês traduzida para o italiano usando um modelo de tradução de Mariannmt da transformers . O resultado final é impresso no 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 O código a seguir pode ser usado para executar a atribuição (fonte e o lado alvo) das traduções italianas para uma amostra fictícia de 20 frases em inglês retiradas do corpus paralelo FLORES-101, usando um modelo de tradução de Mariannmt dos transformers de Facos de Abraço. Salvamos as visualizações no formato HTML nas attributions.html de arquivo.html. Consulte o sinalizador --help para obter mais opções.
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 O exemplo a seguir usa um pequeno LM para gerar uma continuação de input_current_text e usa o contexto adicional fornecido por input_context_text para estimar sua influência na geração. Nesse caso, a produção "to the hospital. He said he was fine" é produzida e a geração do hospital Token é dependente do token do contexto sick de acordo com a função de etapa 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 "Resultado:
Apoie mais métodos de atribuição de recursos baseados em atenção e baseados em oclusão (documentados em #107 e #108).
Interoperabilidade com Ferret para plausibilidade de atribuição e avaliação da fidelidade.
Visualizações ricas e interativas em uma interface com guias usando blocos graduados.
Nossa visão para a INSEQ é criar um conjunto de ferramentas centralizado, abrangente e robusto para permitir comparações justas e reproduzíveis no estudo dos modelos de geração de sequência. Para atingir esse objetivo, as contribuições de pesquisadores e desenvolvedores interessados nesses tópicos são mais do que bem -vindos. Consulte nossas diretrizes contribuintes e nosso código de conduta para obter mais informações.
Se você usar o INSEQ em sua pesquisa, sugerimos, incluindo uma menção à versão específica (por exemplo, v0.6.0) e pedimos gentilmente que você cite nosso trabalho de referência como:
@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 " ,
}
O INSEQ tem sido usado em vários projetos de pesquisa. Uma lista de publicações conhecidas que usam o INSEQ para conduzir análises de interpretabilidade de modelos generativos é mostrada abaixo.
Dica
Última atualização: agosto de 2024. Abra uma solicitação de tração para adicionar sua publicação à lista.