Gabriele Sarti • Grzegorz Chrupała • Malvina Nissim • Arianna Bisazza
pecore proses dua langkah" width="300" style="max-width: 100%;"> contoh pecore" width="500" style="max-width: 100%;">
Abstrak: Menentukan apakah model bahasa dapat menggunakan informasi kontekstual dengan cara yang masuk akal adalah hal yang penting untuk memastikan penerapannya secara aman di dunia nyata. Namun, pertanyaan mengenai kapan dan bagian mana dari konteks yang mempengaruhi pembuatan model biasanya ditangani secara terpisah, dan evaluasi yang masuk akal saat ini secara praktis terbatas pada beberapa tolok ukur buatan. Untuk mengatasi hal ini, kami memperkenalkan Plausibility Evaluation of Context Reliance ( pecore ), sebuah kerangka kerja interpretasi ujung ke ujung yang dirancang untuk mengukur penggunaan konteks dalam generasi model bahasa. Pendekatan kami memanfaatkan internal model untuk (i) secara kontras mengidentifikasi token target yang sensitif terhadap konteks dalam teks yang dihasilkan dan (ii) menghubungkannya dengan isyarat kontekstual yang membenarkan prediksi mereka. Kami menggunakan pecore untuk mengukur kemungkinan model terjemahan mesin yang sadar konteks, membandingkan dasar pemikiran model dengan anotasi manusia di beberapa fenomena tingkat wacana. Terakhir, kami menerapkan metode kami pada generasi yang tidak diberi anotasi untuk mengidentifikasi prediksi yang dimediasi konteks dan menyoroti contoh penggunaan konteks yang (tidak) masuk akal dalam terjemahan model.
Repositori ini berisi skrip dan buku catatan yang terkait dengan makalah "Mengukur Kemungkinan Ketergantungan Konteks dalam Terjemahan Mesin Neural". Jika Anda menggunakan salah satu konten berikut untuk karya Anda, kami dengan hormat meminta Anda untuk mengutip makalah kami:
@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 "
}
Tip
Anda dapat mencoba pecore dari demo online kami di Hugging Face Spaces.
Meskipun repositori ini mengimplementasikan fungsi yang digunakan dalam evaluasi eksperimental makalah yang disebutkan di atas, kami menyediakan implementasi CLI pecore baru melalui pustaka interpretabilitas Inseq. Kami sangat menyarankan para peneliti untuk mengadopsi implementasi tersebut karena lebih kuat dan dapat digeneralisasikan, mendukung semua model decoder-only dan encoder-decoder dari perpustakaan Huggingface untuk deteksi dan atribusi ketergantungan konteks input dan output. Lihat bagian inseq attribute-context
di README Inseq untuk lebih jelasnya.
Semua artefak untuk makalah ini, termasuk model yang disempurnakan dan kumpulan data pelatihan/evaluasi tersedia di pecore HuggingFace Collection. Demo akan segera tersedia, pantau terus!
Model NMT sadar konteks dilatih menggunakan skrip train_context_aware_mt_model.py
. Scriptnya merupakan modifikasi dari run_translation_no_trainer.py
yang asli. Skrip menambahkan kolom berikut untuk pelatihan model kontekstual:
context_size
: Jumlah kalimat konteks yang akan digunakan untuk pelatihan. Nilai defaultnya adalah 0 (pelatihan tingkat kalimat).
sample_context
: Jika disetel, ukuran konteks untuk setiap contoh diambil sampelnya dari distribusi seragam antara 0 dan context_size
(inklusif). Jika tidak lolos dan context_size
lebih besar dari 0, ukuran konteks selalu sama dengan context_size
.
context_word_dropout
: Kemungkinan antara 0 dan 1 untuk menghilangkan sebuah kata dari konteksnya. Nilai defaultnya adalah 0 (tidak ada dropout).
use_target_context
: Jika disetel, konteksnya juga disertakan dalam teks terjemahan untuk kerugian pelatihan. Dalam hal ini, format output untuk input src_ctx <brk> src
menjadi tgt_ctx <brk> tgt
. Jika tidak, format keluarannya adalah tgt
(hanya src
yang diterjemahkan).
Berikut adalah contoh penyempurnaan model mBART 1 hingga 50 pada kumpulan data IWSLT17 yang ditambah konteks dengan hingga 4 kalimat konteks dan 10% kata konteks yang hilang:
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
Berikut adalah contoh melanjutkan penyempurnaan model En->Fr OpusMT yang sadar konteks pada bagian pelatihan SCAT dengan hingga 4 kalimat konteks dan 10% kata konteks putus:
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
pecore CLI adalah antarmuka baris perintah untuk menjalankan langkah-langkah pecore pada model dan kumpulan data tertentu. CLI diimplementasikan dalam skrip pecore /cli.py
dan dapat digunakan sebagai pecore -viz
setelah menginstal paket dengan pip install -e .
. Implementasi saat ini mendukung identifikasi target peka konteks (CTI) dan imputasi isyarat kontekstual (CCI) untuk semua model encoder-decoder yang didukung oleh kerangka Inseq, termasuk model dengan tag awalan bahasa (mBART-50, NLLB, M2M100) dan model yang dilatih dengan tag konteks khusus (misalnya kumpulan model yang ditemukan dalam organisasi konteks-mt di HF Hub). CLI dapat digunakan untuk menjalankan langkah-langkah pecore pada model tertentu dan contoh sebagai berikut:
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. "
Contoh di atas menghasilkan keluaran berikut, dengan tepat menyoroti ketergantungan kata ganti "il" pada kata benda "sapi" dan "hewan" dalam konteksnya.
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.
Saat menggunakan CLI untuk menjalankan model reguler, langkah tambahan akan diperlukan untuk menentukan posisi pemutusan konteks dalam pembuatan model jika keluaran tidak dipaksakan oleh pengguna. Berikut ini contoh penggunaan model mBART-50 reguler dari 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. "
Pengguna akan diminta dengan pesan berikut:
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:
Pengguna kemudian dapat menulis ulang keluarannya dengan menambahkan <brk>
jika perlu untuk menandai jeda konteks:
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.
Hasil akhirnya adalah:
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.
Dalam hal ini, kita melihat model memilih untuk menghasilkan apostrof melengkung '
daripada yang lurus '
yang digunakan secara default dalam keluaran tanpa konteks agar tetap menggunakan gaya konteks keluaran, menggunakan karakter tersebut pada beberapa kesempatan (diidentifikasi sebagai isyarat kontekstual oleh pecore ) .
Dalam contoh ini, kami menggunakan bobot perhatian kepala 8 di lapisan 5 untuk mengatribusikan ketergantungan konteks. Kepala ini ditemukan secara empiris selaras dengan intuisi manusia.
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