INSEQ es un conjunto de herramientas hackable basado en Pytorch para democratizar el acceso a los análisis comunes pos-hoc en la interpretabilidad de los modelos de generación de seguridad .
Inseq está disponible en Pypi y se puede instalar con 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 visualización en cuadernos Jupyter y? La atribución de conjuntos de datos 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 los desarrolladores de la biblioteca, puede usar el comando make install-dev para instalar todas las dependencias de desarrollo (calidad, documentos, extras).
Después de la instalación, debería poder ejecutar make fast-test y make lint sin errores.
La instalación del paquete tokenizers requiere una instalación del compilador de óxido. Puede instalar Rust en https://rustup.rs y agregar $HOME/.cargo/env a su ruta.
La instalación de sentencepiece requiere varios paquetes, instale con sudo apt-get install cmake build-essential pkg-config o brew install cmake gperftools pkg-config .
Este ejemplo utiliza el método de atribución de gradientes integrados para atribuir la traducción en inglés-francés de una oración tomada del 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 ()Esto produce una visualización de los puntajes de atribución para cada token en la oración de entrada (la agregación a nivel de token se maneja automáticamente). Así es como se ve la visualización dentro de un cuaderno de Jupyter:
INSEQ también admite modelos de decodificadores como GPT-2, lo que permite el uso de una variedad de métodos de atribución y configuraciones personalizables directamente desde la consola:
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 () Atribución de características de la generación de secuencias para la mayoría de los modelos de ForConditionalGeneration (Coder-Decoder) y ForCausalLM (solo decodificador) de? Transformadores
Soporte para múltiples métodos de atribución de características, extendiendo los compatibles con Captum
Postprocesamiento, filtrado y fusión de mapas de atribución a través de clases Aggregator .
Visualización de atribución en cuadernos, navegador y línea de comandos.
¿Atribución eficiente de ejemplos individuales o enteros? conjuntos de datos con la CLI inseq.
Atribución personalizada de las funciones objetivo, que admiten métodos avanzados, como atribuciones de características de contraste y detección de dependencia del contexto.
Extracción y visualización de puntajes personalizados (p. Ej., Probabilidad, entropía) en cada paso de generación a lo largo de los mapas de atribución.
Use la función inseq.list_feature_attribution_methods para enumerar todos los identificadores de métodos disponibles e inseq.list_step_functions para enumerar todas las funciones de paso disponibles. Los siguientes métodos son compatibles actualmente:
saliency : Redes convolucionales profundas dentro: Visualización de modelos de clasificación de imágenes y mapas de prominencia (Simonyan et al., 2013)
input_x_gradient : redes de convolucionales profundas: visualización de modelos de clasificación de imágenes y mapas de prominencia (Simonyan et al., 2013)
integrated_gradients : Atribución axiomática para redes profundas (Sundararajan et al., 2017)
deeplift : Aprender características importantes a través de la propagación de diferencias de activación (Shrikumar et al., 2017)
gradient_shap : un enfoque unificado para interpretar las predicciones del modelo (Lundberg y Lee, 2017)
discretized_integrated_gradients : gradientes integrados discretizados para explicar modelos de idiomas (Sanyal y Ren, 2021)
sequential_integrated_gradients : gradientes integrados secuenciales: un método simple pero efectivo para explicar modelos de lenguaje (Enguehard, 2023)
attention : Atribución de peso de atención, desde la traducción del automóvil neuronal mediante el aprendizaje conjunta a alinearse y traducir (Bahdanau et al., 2014) occlusion : visualización y comprensión de redes convolucionales (Zeiler y Fergus, 2014)
lime : "¿Por qué debería confiar en ti?": Explicando las predicciones de cualquier clasificador (Ribeiro et al., 2016)
value_zeroing : cuantificar la mezcla de contexto en transformadores (Mohebbi et al. 2023)
reagent : Reactivo: un método de atribución de características agnósticas modelo para modelos de lenguaje generativo (Zhao et al., 2024)
Las funciones de paso se utilizan para extraer puntajes personalizados del modelo en cada paso del proceso de atribución con el argumento step_scores en model.attribute . También se pueden utilizar como objetivos para los métodos de atribución que se basan en las salidas del modelo (por ejemplo, métodos basados en gradientes) pasándolos como el argumento attributed_fn . Actualmente se admiten las siguientes funciones de paso:
logits : logits del token de destino.probability : probabilidad del token objetivo. También se puede utilizar para la probabilidad de registro pasando logprob=True .entropy : entropía de la distribución predictiva.crossentropy : pérdida de entropía cruzada entre el token objetivo y la distribución prevista.perplexity : perplejidad del token objetivo.contrast_logits / contrast_prob : logits / probabilidades del token de destino cuando se proporcionan diferentes entradas de contraste al modelo. Equivalente a logits / probability cuando no se proporcionan entradas contrastantes.contrast_logits_diff / contrast_prob_diff : la diferencia en logits / probabilidad entre el par de tokens de destino originales y de aluminio, se puede utilizar para la evaluación contrastante como en una atribución contrastante (Yin y Neubig, 2022).pcxmi : Información intermutual contextual puntual (P-CXMI) para el token objetivo dado contextos originales y contrastantes (Yin et al. 2021).kl_divergence : Divergencia KL de la distribución predictiva dada contextos originales y contrastantes. Puede restringirse a las opciones de token de destino más probables utilizando los parámetros top_k y top_p .in_context_pvi : Información utilizable en V de punto en V-Context (PVI) para medir la cantidad de información contextual utilizada en las predicciones del modelo (Lu et al. 2023).mc_dropout_prob_avg : probabilidad promedio del token objetivo en múltiples muestras utilizando MC Delout (Gal y Ghahramani, 2016).top_p_size : el número de tokens con probabilidad acumulativa mayor que top_p en la distribución predictiva del modelo. El siguiente ejemplo calcula las atribuciones de contraste utilizando la función de paso 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 la documentación para obtener un ejemplo que incluya el registro de funciones personalizadas.
¿La biblioteca inseq también proporciona comandos de cliente útiles para habilitar la atribución repetida de ejemplos individuales e incluso enteros? conjuntos de datos directamente desde la consola. Consulte las opciones disponibles escribiendo inseq -h en el terminal después de instalar el paquete.
Se admiten tres comandos:
inseq attribute : WRAPPER para habilitar model.attribute .
inseq attribute-dataset : extiende attribute al conjunto de datos completo utilizando conjuntos datasets.load_dataset de abrazadera.
inseq attribute-context : detecta y atribuye dependencia del contexto para tareas de generación utilizando el enfoque de Sarti et al. (2023).
Todos los comandos admiten la gama completa de parámetros disponibles para attribute , visualización de atribución en la consola y guardando salidas en el disco.
inseq attribute El siguiente ejemplo realiza una atribución de característica simple de una oración en inglés traducida al italiano utilizando un modelo de traducción Mariannmt de transformers . El resultado final se imprime en la consola.
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 El siguiente código se puede utilizar para realizar una atribución (tanto de origen como en el lado objetivo) de las traducciones italianas para una muestra ficticia de 20 oraciones en inglés tomadas del corpus paralelo Flores-101, utilizando un modelo de traducción de Mariannmt de transformers faciales de abrazos. Guardamos las visualizaciones en formato HTML en el archivo attributions.html . Vea la bandera --help para obtener más opciones.
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 El siguiente ejemplo utiliza un pequeño LM para generar una continuación de input_current_text , y utiliza el contexto adicional proporcionado por input_context_text para estimar su influencia en la generación. En este caso, la salida "to the hospital. He said he was fine" se produce, y se encuentra que la generación del hospital de tokens depende de la sick de token de contexto de acuerdo con la función de paso 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:
Admite métodos de atribución de características más basados en la atención y de oclusión (documentados en el #107 y #108).
Interoperabilidad con hurón para la plausibilidad de atribución y evaluación de fidelidad.
Visualizaciones ricas e interactivas en una interfaz con pestañas utilizando bloques de Gradio.
Nuestra visión para Inseq es crear un conjunto de herramientas centralizado, integral y robusto para permitir comparaciones justas y reproducibles en el estudio de los modelos de generación de secuencias. Para lograr este objetivo, las contribuciones de investigadores y desarrolladores interesados en estos temas son más que bienvenidos. Consulte nuestras pautas de contribución y nuestro código de conducta para obtener más información.
Si usa Inseq en su investigación, sugerimos incluir una mención de la versión específica (por ejemplo, V0.6.0) y le pedimos amablemente que cite nuestro documento de referencia 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 " ,
}
Inseq se ha utilizado en varios proyectos de investigación. A continuación se muestra una lista de publicaciones conocidas que usan inseq para realizar análisis de interpretabilidad de modelos generativos.
Consejo
Última actualización: agosto de 2024. Abra una solicitud de extracción para agregar su publicación a la lista.