Gabriele Sarti, Grzegorz Chrupała, Malvina Nissim, Arianna Bisazza
processus pecore en deux étapes" width="300" style="max-width: 100%;"> quelques exemples" width="500" style="max-width: 100%;">
Résumé : Il est important de déterminer si les modèles de langage peuvent utiliser des informations contextuelles d'une manière plausible pour l'homme afin de garantir leur adoption en toute sécurité dans des contextes du monde réel. Cependant, les questions de savoir quand et quelles parties du contexte affectent les générations de modèles sont généralement abordées séparément, et les évaluations de plausibilité actuelles se limitent pratiquement à une poignée de références artificielles. Pour résoudre ce problème, nous introduisons l'évaluation de la plausibilité de la fiabilité du contexte ( pecore ), un cadre d'interprétabilité de bout en bout conçu pour quantifier l'utilisation du contexte dans les générations de modèles de langage. Notre approche exploite les éléments internes du modèle pour (i) identifier de manière contrastée les jetons cibles sensibles au contexte dans les textes générés et (ii) les lier à des indices contextuels justifiant leur prédiction. Nous utilisons pecore pour quantifier la plausibilité des modèles de traduction automatique sensibles au contexte, en comparant les justifications des modèles avec les annotations humaines sur plusieurs phénomènes au niveau du discours. Enfin, nous appliquons notre méthode aux générations non annotées pour identifier les prédictions médiées par le contexte et mettre en évidence les cas d'utilisation du contexte (im) plausible dans les traductions de modèles.
Ce référentiel contient des scripts et des cahiers associés à l'article "Quantifying the Plausibility of Context Reliance in Neural Machine Translation". Si vous utilisez l'un des contenus suivants pour votre travail, nous vous demandons de bien vouloir citer notre article :
@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 "
}
Conseil
Vous pouvez essayer pecore à partir de notre démo en ligne sur Hugging Face Spaces.
Bien que ce référentiel implémente les fonctions utilisées dans l'évaluation expérimentale de l'article susmentionné, nous proposons une nouvelle implémentation CLI de pecore via la bibliothèque d'interprétabilité Inseq. Nous conseillons vivement aux chercheurs d'adopter cette implémentation car elle est plus robuste et généralisable, prenant en charge tous les modèles de décodeur uniquement et d'encodeur-décodeur de la bibliothèque Huggingface pour la détection et l'attribution de la dépendance au contexte d'entrée et de sortie. Reportez-vous à la section inseq attribute-context
dans le fichier README Inseq pour plus de détails.
Tous les artefacts de l'article, y compris les modèles affinés et les ensembles de données de formation/évaluation, sont disponibles dans la collection pecore HuggingFace. Une démo sera bientôt disponible, restez connectés !
Les modèles NMT contextuels sont formés à l'aide du script train_context_aware_mt_model.py
. Le script est une modification du run_translation_no_trainer.py
original. Le script ajoute les champs suivants pour la formation du modèle contextuel :
context_size
: Le nombre de phrases contextuelles à utiliser pour la formation. La valeur par défaut est 0 (formation au niveau de la phrase).
sample_context
: Si défini, la taille du contexte pour chaque exemple est échantillonnée à partir d'une distribution uniforme entre 0 et context_size
(inclus). Si elle n'est pas transmise et context_size
est supérieur à 0, la taille du contexte est toujours égale à context_size
.
context_word_dropout
: Probabilité entre 0 et 1 de supprimer un mot du contexte. La valeur par défaut est 0 (pas d'abandon).
use_target_context
: S'il est défini, le contexte est également inclus dans le texte traduit pour la perte d'entraînement. Dans ce cas, le format de sortie d'une entrée src_ctx <brk> src
devient tgt_ctx <brk> tgt
. Sinon, le format de sortie est tgt
(seul src
est traduit).
Voici un exemple de réglage fin d'un modèle mBART 1 à 50 sur l'ensemble de données IWSLT17 augmenté en contexte avec jusqu'à 4 phrases contextuelles et une suppression de mots contextuels de 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
Voici un exemple de poursuite du réglage fin d'un modèle OpusMT En->Fr contextuel sur la partie formation de SCAT avec jusqu'à 4 phrases contextuelles et un abandon de mots contextuels de 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 est une interface de ligne de commande permettant d'exécuter les étapes pecore sur un modèle et un ensemble de données donnés. La CLI est implémentée dans le script pecore /cli.py
et peut être utilisée comme pecore -viz
lors de l'installation du package avec pip install -e .
. La mise en œuvre actuelle prend en charge l'identification de cibles sensibles au contexte (CTI) et l'imputation d'indices contextuels (CCI) pour tous les modèles d'encodeur-décodeur pris en charge par le framework Inseq, y compris les modèles avec balises de préfixe de langage (mBART-50, NLLB, M2M100). et des modèles formés avec des balises de contexte spéciales (par exemple, la collection de modèles trouvés dans l'organisation context-mt sur le HF Hub). La CLI peut être utilisée pour exécuter les étapes pecore sur un modèle et un exemple donnés comme suit :
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. "
L'exemple ci-dessus produit le résultat suivant, mettant correctement en évidence la dépendance du pronom « il » aux noms « vache » et « animal » dans le contexte.
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.
Lors de l'utilisation de la CLI pour exécuter un modèle standard, une étape supplémentaire sera nécessaire pour spécifier la position de la rupture de contexte dans la génération du modèle si une sortie n'est pas forcée par l'utilisateur. Voici un exemple utilisant le modèle mBART-50 standard du 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. "
L'utilisateur sera invité avec le message suivant :
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:
L'utilisateur peut ensuite réécrire la sortie en ajoutant <brk>
partout où cela est approprié pour marquer la rupture de contexte :
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.
Le résultat final sera :
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.
Dans ce cas, nous voyons que le modèle choisit de générer l'apostrophe courbe '
plutôt que l'apostrophe droite '
utilisée par défaut dans la sortie sans contexte pour s'en tenir au style de contexte de sortie, en employant ce caractère à plusieurs reprises (identifié comme indices contextuels par pecore ) .
Dans cet exemple, nous utilisons le poids d'attention de la tête 8 dans la couche 5 pour attribuer la dépendance au contexte. Il a été constaté empiriquement que cette tête correspondait bien à l’intuition humaine.
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