Gabriele Sarti • Grzegorz Chrupała • Malvina Nissim • Arianna Bisazza
Proceso de dos pasos de pecore" width="300" style="max-width: 100%;"> ejemplos de pecore" width="500" style="max-width: 100%;">
Resumen: Establecer si los modelos de lenguaje pueden utilizar información contextual de una manera plausible para los humanos es importante para garantizar su adopción segura en entornos del mundo real. Sin embargo, las cuestiones de cuándo y qué partes del contexto afectan a las generaciones de modelos suelen abordarse por separado, y las evaluaciones de plausibilidad actuales están prácticamente limitadas a un puñado de puntos de referencia artificiales. Para abordar esto, presentamos la evaluación de plausibilidad de la dependencia del contexto ( pecore ), un marco de interpretabilidad de un extremo a otro diseñado para cuantificar el uso del contexto en las generaciones de modelos de lenguaje. Nuestro enfoque aprovecha los elementos internos del modelo para (i) identificar de manera contrastante tokens objetivo sensibles al contexto en los textos generados y (ii) vincularlos a señales contextuales que justifiquen su predicción. Usamos pecore para cuantificar la plausibilidad de los modelos de traducción automática conscientes del contexto, comparando los fundamentos del modelo con anotaciones humanas en varios fenómenos a nivel del discurso. Finalmente, aplicamos nuestro método a generaciones no anotadas para identificar predicciones mediadas por el contexto y resaltar casos de uso de contexto (im) plausible en traducciones de modelos.
Este repositorio contiene scripts y cuadernos asociados al artículo "Cuantificar la plausibilidad de la dependencia del contexto en la traducción automática neuronal". Si utiliza alguno de los siguientes contenidos para su trabajo, le rogamos que cite nuestro artículo:
@inproceedings { sarti-etal-2023-quantifying ,
title = " Quantifying the Plausibility of Context Reliance in Neural Machine Translation " ,
author = " Sarti, Gabriele and
Chrupa{l}a, Grzegorz and
Nissim, Malvina and
Bisazza, Arianna " ,
booktitle = " The Twelfth International Conference on Learning Representations (ICLR 2024) " ,
month = may,
year = " 2024 " ,
address = " Vienna, Austria " ,
publisher = " OpenReview " ,
url = " https://openreview.net/forum?id=XTHfNGI3zT "
}
Consejo
Puede probar pecore desde nuestra demostración en línea en Hugging Face Spaces.
Si bien este repositorio implementa las funciones utilizadas en la evaluación experimental del artículo mencionado anteriormente, proporcionamos una nueva implementación CLI de pecore a través de la biblioteca de interpretabilidad Inseq. Recomendamos encarecidamente a los investigadores que adopten esa implementación, ya que es más sólida y generalizable, y admite todos los modelos de solo decodificador y codificador-decodificador de la biblioteca Huggingface para la detección y atribución de dependencia del contexto de entrada y salida. Consulte la sección inseq attribute-context
en el archivo README de Inseq para obtener más detalles.
Todos los artefactos del artículo, incluidos los modelos ajustados y los conjuntos de datos de capacitación/evaluación, están disponibles en la colección pecore HuggingFace. Pronto habrá una demostración disponible, ¡estad atentos!
Los modelos NMT sensibles al contexto se entrenan utilizando el script train_context_aware_mt_model.py
. El script es una modificación del run_translation_no_trainer.py
original. El script agrega los siguientes campos para el entrenamiento del modelo contextual:
context_size
: el número de oraciones contextuales que se utilizarán para el entrenamiento. El valor predeterminado es 0 (entrenamiento a nivel de oración).
sample_context
: si se establece, el tamaño del contexto para cada ejemplo se muestra a partir de una distribución uniforme entre 0 y context_size
(inclusive). Si no se pasa y context_size
es mayor que 0, el tamaño del contexto siempre es igual a context_size
.
context_word_dropout
: Probabilidad entre 0 y 1 de eliminar una palabra del contexto. El valor predeterminado es 0 (sin abandono).
use_target_context
: si se establece, el contexto también se incluye en el texto traducido para la pérdida de entrenamiento. En ese caso, el formato de salida para una entrada src_ctx <brk> src
se convierte en tgt_ctx <brk> tgt
. De lo contrario, el formato de salida es tgt
(solo se traduce src
).
A continuación se muestra un ejemplo de ajuste de un modelo mBART 1 a 50 en el conjunto de datos IWSLT17 aumentado por contexto con hasta 4 oraciones de contexto y una omisión de palabras de contexto del 10%:
accelerate launch scripts/train_context_aware_mt_model.py
--model_name_or_path facebook/mbart-large-50-one-to-many-mmt
--source_lang en_XX
--target_lang fr_XX
--dataset_name gsarti/iwslt2017_context
--dataset_config_name iwslt2017-en-fr
--output_dir outputs/models/iwslt17-mbart50-1toM-ctx4-cwd1-en-fr
--num_beams 5
--max_source_length 512
--max_target_length 128
--num_train_epochs 20
--gradient_accumulation_steps 4
--per_device_train_batch_size 8
--num_warmup_steps 500
--learning_rate 3e-4
--checkpointing_steps epoch
--with_tracking
--report_to tensorboard
--context_size 4
--sample_context
--context_word_dropout 0.1
A continuación se muestra un ejemplo de cómo continuar con el ajuste de un modelo En->Fr OpusMT consciente del contexto en la parte de entrenamiento de SCAT con hasta 4 oraciones de contexto y una omisión de palabras de contexto del 10%:
accelerate launch scripts/train_context_aware_mt_model.py
--model_name_or_path context-mt/iwslt17-marian-big-ctx4-cwd1-en-fr
--dataset_name inseq/scat
--dataset_config_name sentences
--output_dir outputs/models/scat-marian-big-ctx4-cwd1-en-fr
--num_beams 5
--max_source_length 512
--max_target_length 128
--num_train_epochs 2
--gradient_accumulation_steps 2
--per_device_train_batch_size 8
--num_warmup_steps 0
--learning_rate 5e-5
--checkpointing_steps 1000
--logging_steps 200
--with_tracking
--report_to tensorboard
--context_size 4
--sample_context
--context_word_dropout 0.1
La CLI pecore es una interfaz de línea de comandos para ejecutar los pasos pecore en un modelo y conjunto de datos determinados. La CLI se implementa en el script pecore /cli.py
y se puede usar como pecore -viz
al instalar el paquete con pip install -e .
. La implementación actual admite la identificación de objetivos sensibles al contexto (CTI) y la imputación de señales contextuales (CCI) para todos los modelos de codificador-decodificador admitidos por el marco Inseq, incluidos los modelos con etiquetas de prefijo de idioma (mBART-50, NLLB, M2M100). y modelos entrenados con etiquetas de contexto especiales (por ejemplo, la colección de modelos que se encuentran en la organización context-mt en HF Hub). La CLI se puede utilizar para ejecutar los pasos pecore en un modelo y ejemplo determinados de la siguiente manera:
pecore -viz
--model_name context-mt/scat-marian-small-ctx4-cwd1-en-fr
--attributions_aggregate_fns sum
--model_use_ctx_break
--impute_with_contextless_output
--force_context_aware_output_prefix
--input " Did I mention we stole a cow? A beautiful animal, truly. We brought it to the stable and kept it there for ages.<brk> Sadly, we could not foresee it would disappear. "
El ejemplo anterior produce el siguiente resultado, resaltando correctamente la dependencia del pronombre "il" de los sustantivos "vaca" y "animal" en el contexto.
Context with contextual cues (std λ=1.00) followed by output sentence
with context-sensitive target spans (std λ=1.00):
Input context: Did I mention we stole a cow ? A beautiful animal, truly. We brought it to the stable and kept it there for ages.
Input current: Sadly, we could not foresee it would disappear.
Context-aware output: Malheureusement, nous n ' avons pas pu prévoir qu ' il disparaîtrait.
Using ' <brk> ' to separate context and current inputs.
# 1. (CTI |kl_divergence| > 0.14, CCI |saliency| > 0.71)
Contextless output: Malheureusement, nous n ' avons pas pu prévoir qu ' il disparaîtrait.
Current output: Malheureusement, nous n ' avons pas pu prévoir qu ' il(0.412) disparaîtrait.
Input context: Did I mention we stole a cow(1.524) ? A beautiful animal(1.472), truly. We brought it to the stable and kept it
there for ages.
Cuando se utiliza la CLI para ejecutar un modelo normal, se necesitará un paso adicional para especificar la posición de la interrupción del contexto en la generación del modelo si el usuario no fuerza una salida. A continuación se muestra un ejemplo que utiliza el modelo mBART-50 normal del HF Hub:
pecore -viz
--model_name facebook/mbart-large-50-one-to-many-mmt
--input_lang eng --output_lang fra --model_type mbart50-1toM
--impute_with_contextless_output
--force_context_aware_output_prefix
--input " Did I mention we stole a cow? A beautiful animal, truly. We brought it to the stable and kept it there for ages.<brk> Sadly, we could not foresee it would disappear. "
El usuario recibirá el siguiente mensaje:
The following output was generate by the model: J’ai mentionné que nous avons volé une vache, c’est vraiment un beau animal, que nous avons emmené à l’élevage et que nous l’avons gardée pendant des époques. Malheureusement, nous n’avons pas pu prévoir qu’elle disparaîtrait.
Rewrite it here by adding ' <brk> ' wherever appropriate to mark context break:
Luego, el usuario puede reescribir la salida agregando <brk>
donde sea apropiado para marcar la ruptura de contexto:
J’ai mentionné que nous avons volé une vache, c’est vraiment un beau animal, que nous avons emmené à l’élevage et que nous l’avons gardée pendant des époques. < brk > Malheureusement, nous n’avons pas pu prévoir qu’elle disparaîtrait.
El resultado final será:
Context with contextual cues (std λ=1.00) followed by output sentence
with context-sensitive target spans (std λ=1.00):
Input context: Did I mention we stole a cow ? A beautiful animal, truly. We brought it to the stable and kept it there for ages.
Input current: Sadly, we could not foresee it would disappear.
Output context: J’ai mentionné que nous avons volé une vache, c’est vraiment un beau animal, que nous avons emmené à l’élevage et que nous l’avons gardée pendant
des époques.
Context-aware output: J’ai mentionné que nous avons volé une vache, c’est vraiment un beau animal, que nous avons emmené à l’élevage et que nous l’avons gardée
pendant des époques. Malheureusement, nous n’avons pas pu prévoir qu’elle disparaîtrait.
Using language tags for model type ' mbart50-1toM ' (eng - > fra).
# 1. (CTI |kl_divergence| > 1.08, CCI |saliency| > 0.00)
Contextless output: Malheureusement, nous n ' avons pas pu prévoir sa disparition.
Current output: Malheureusement, nous n’(3.505)avons pas pu prévoir qu’elle disparaîtrait.
Input context: Did I mention we stole a cow? A beautiful animal, truly. We brought it to the stable(0.002) and kept it there for ages.
Output context: J’(0.004)ai mentionné que nous avons volé une vache, c’(0.002)est vraiment un beau animal, que nous avons emmené à l’(0.003)élevage et que nous
l’(0.007)avons gardée pendant des époques.
En este caso, vemos que el modelo opta por generar el apóstrofo curvo '
en lugar del recto '
usado por defecto en la salida sin contexto para ceñirse al estilo de contexto de salida, empleando ese carácter en varias ocasiones (identificado como señales contextuales por pecore ). .
En este ejemplo, utilizamos el peso de atención del encabezado 8 en la capa 5 para atribuir dependencia del contexto. Se descubrió empíricamente que esta cabeza se alineaba bien con la intuición humana.
pecore -viz
--model_name context-mt/scat-marian-small-ctx4-cwd1-en-fr
--attributions_aggregate_fns mean mean
--model_use_ctx_break
--impute_with_contextless_output
--force_context_aware_output_prefix
--input " Did I mention we stole a cow? A beautiful animal, truly. We brought it to the stable and kept it there for ages.<brk> Sadly, we could not foresee it would disappear. "
--attribution_method attention
--select_attributions_idx 7 4
python scripts/translate.py
--model_type mbart50-1toM
--model_id mbart50-1toM-scat
--model_name context-mt/scat-mbart50-1toM-ctx4-cwd1-en-fr
--context_size 4
--dataset scat
--context_word_dropout 1
python scripts/translate.py
--model_type marian-big
--model_id marian-big-scat-target
--model_name context-mt/scat-marian-big-target-ctx4-cwd0-en-fr
--context_size 4
--dataset disc_eval_mt
--context_word_dropout 0
--dataset_config anaphora
python scripts/translate.py
--model_type marian-big
--model_id marian-big-scat-target
--model_name context-mt/scat-marian-big-target-ctx4-cwd0-en-fr
--context_size 4
--dataset disc_eval_mt
--context_word_dropout 0
--dataset_config lexical-choice
python scripts/translate.py
--model_type marian-big
--model_id marian-big-scat
--model_name context-mt/scat-marian-big-ctx4-cwd1-en-fr
--context_size 4
--dataset disc_eval_mt
--context_word_dropout 1
--dataset_config anaphora
python scripts/translate.py
--model_type marian-big
--model_id marian-big-scat
--model_name context-mt/scat-marian-big-ctx4-cwd1-en-fr
--context_size 4
--dataset disc_eval_mt
--context_word_dropout 1
--dataset_config lexical-choice
python scripts/translate.py
--model_type mbart50-1toM
--model_id mbart50-1toM-scat
--model_name context-mt/scat-mbart50-1toM-ctx4-cwd1-en-fr
--context_size 0
--dataset disc_eval_mt
--context_word_dropout 0
--dataset_config lexical-choice
python scripts/evaluate_mt_outputs.py
--filepath outputs/translations/ctx/scat-marian-small-scat-target.txt
--model_id marian-small-scat-target
--dataset scat
--src_lang eng
--tgt_lang fra
--metrics bleu comet accuracy flip
--has_target_context
--max_idx 250
python scripts/evaluate_mt_outputs.py
--filepath outputs/translations/ctx/disc_eval_mt-anaphora-marian-small-scat-target.txt
--model_id marian-small-scat-target
--dataset disc_eval_mt
--src_lang eng
--tgt_lang fra
--metrics bleu comet accuracy flip
--has_target_context
--max_idx 250
python scripts/evaluate_mt_outputs.py
--filepath outputs/translations/ctx/scat-mbart50-1toM-scat.txt
--model_id mbart50-1toM-scat
--dataset scat
--src_lang eng
--tgt_lang fra
--metrics bleu comet accuracy
python scripts/evaluate_mt_outputs.py
--filepath outputs/translations/ctx/scat-mbart50-1toM-scat.txt
--model_id mbart50-1toM-scat
--dataset scat
--src_lang eng
--tgt_lang fra
--metrics comet accuracy
python scripts/generate_examples.py
--dataset scat
--model_name context-mt/scat-marian-small-target-ctx4-cwd0-en-fr
--src_lang eng
--tgt_lang fra
--model_id marian-small-scat-target
--model_type marian-small
--has_context
--has_contrast
--has_target_context
python scripts/generate_examples.py
--dataset scat
--model_name context-mt/scat-mbart50-1toM-target-ctx4-cwd0-en-fr
--src_lang eng
--tgt_lang fra
--model_id mbart50-1toM-scat-target
--model_type mbart50-1toM
--has_context
--has_target_context
--has_contrast
python scripts/generate_examples.py
--dataset disc_eval_mt
--dataset_config anaphora
--model_name context-mt/scat-marian-small-ctx4-cwd1-en-fr
--src_lang eng
--tgt_lang fra
--model_id marian-small-scat
--model_type marian-small
--has_context
--has_contrast
python scripts/generate_examples.py
--dataset scat
--model_name Helsinki-NLP/opus-mt-en-fr
--src_lang eng
--tgt_lang fra
--model_id marian-small
--model_type marian-small
--has_contrast
python scripts/tag_cti_metrics.py
--examples_path outputs/processed_examples/scat-marian-small-scat.tsv
--model_name context-mt/scat-marian-small-ctx4-cwd1-en-fr
--model_type marian-small
python scripts/tag_cti_metrics.py
--examples_path outputs/processed_examples/scat-marian-big-scat.tsv
--model_name context-mt/scat-marian-big-ctx4-cwd1-en-fr
--model_type marian-big
python scripts/tag_cti_metrics.py
--examples_path outputs/processed_examples/scat-mbart50-1toM-scat.tsv
--model_name context-mt/scat-mbart50-1toM-ctx4-cwd1-en-fr
--model_type mbart50-1toM
python scripts/tag_cti_metrics.py
--examples_path outputs/processed_examples/scat-marian-small-scat-target.tsv
--model_name context-mt/scat-marian-small-target-ctx4-cwd0-en-fr
--model_type marian-small
python scripts/tag_cti_metrics.py
--examples_path outputs/processed_examples/scat-marian-big-scat-target.tsv
--model_name context-mt/scat-marian-big-target-ctx4-cwd0-en-fr
--model_type marian-big
python scripts/tag_cti_metrics.py
--examples_path outputs/processed_examples/scat-mbart50-1toM-scat-target.tsv
--model_name context-mt/scat-mbart50-1toM-target-ctx4-cwd0-en-fr
--model_type mbart50-1toM
python scripts/tag_cci_metrics.py
--examples_path outputs/processed_examples/scat-marian-small-scat.tsv
--model_name context-mt/scat-marian-small-ctx4-cwd1-en-fr
--model_type marian-small
python scripts/tag_cci_metrics.py
--examples_path outputs/processed_examples/scat-mbart50-1toM-scat-target.tsv
--model_name context-mt/scat-mbart50-1toM-target-ctx4-cwd0-en-fr
--model_type mbart50-1toM
python scripts/evaluate_tagged_metrics.py
--scores_path outputs/scores/scat-marian-small-scat-cti.tsv
--eval_mode cti
--use_trained_model
python scripts/evaluate_tagged_metrics.py
--scores_path outputs/scores/scat-marian-small-scat-cti.tsv
--eval_mode cti
--average_example_scores
--metrics random pcxmi kl_divergence
--save_preds
python scripts/evaluate_tagged_metrics.py
--scores_path outputs/scores/scat-marian-small-scat-cci.tsv
--eval_mode cci
--example_target_column is_supporting_context
--average_example_scores
--metrics random saliency_contrast_prob_diff attention_default attention_best
python scripts/evaluate_tagged_metrics.py
--scores_path outputs/scores/scat-marian-small-scat-target-cti.tsv
--eval_mode cti
--average_example_scores
--metrics random pcxmi kl_divergence
--save_preds