Kode Sumber untuk kertas ACL 2022 "Peningkatan Koherensi: Ketika model bahasa pretrain Anda tidak memberikan perhatian yang cukup" (Arxiv, ACL Anthology)
Koherensi semantik jarak jauh tetap menjadi tantangan dalam pembuatan dan pemahaman bahasa otomatis. Kami menunjukkan bahwa model bahasa besar tidak cukup mempelajari efek kata-kata jauh pada prediksi berikutnya. Kami menyajikan peningkatan koherensi , prosedur inferensi yang meningkatkan fokus LM pada konteks yang panjang. Kami menunjukkan manfaat peningkatan koherensi dengan model pretrained dengan analisis distribusi dari tanggapan teks biasa dan dialog. Juga ditemukan bahwa peningkatan koherensi dengan model canggih untuk berbagai tugas NLP nol-shot menghasilkan keuntungan kinerja tanpa pelatihan tambahan.
Jika Anda menemukan kertas dan kode berguna, silakan bintangi repo ini dan kutip kertas. Terima kasih banyak!
@inproceedings { malkin-etal-2022-coherence , title = " Coherence boosting: When your pretrained language model is not paying enough attention " , author = " Malkin, Nikolay and Wang, Zhen and Jojic, Nebojsa " , booktitle = " Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) " , month = may, year = " 2022 " , address = " Dublin, Ireland " , publisher = " Association for Computational Linguistics " , url = " https://aclanthology.org/2022.acl-long.565 " , doi = " 10.18653/v1/2022.acl-long.565 " , pages = " 8214--8236 " }Kami menyajikan program demo untuk menunjukkan kurangnya koherensi pada LM pra-terlatih yang ada, yaitu, gagal memprediksi token selanjutnya dengan konteks, yang jelas membutuhkan pemahaman tentang kata-kata yang jauh. Kesalahan semacam itu dapat diselesaikan dengan peningkatan koherensi yang kami usulkan, yang secara kontras memprediksi token berikutnya dengan log-linear mencampur dua distribusi dari konteks penuh dan konteks parsial.
> >> from cb_demo import contrasting > >> contrasting ( model_name = 'gpt2' , context = ' Ballad metre is "less regular and more conversational" than common metre' , - - partial_length = 8 , - - alpha = 0.5 ) [ out ] Top tokens based on full context : Ballad metre is "less regular and more conversational" than common Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġsense - 2.405 9.03 % 2 Ġin - 3.900 2.02 % 3 . - 3.978 1.87 % 4 , - 4.097 1.66 % 5 Ġpractice - 4.287 1.37 % ... ... ... ... 13 Ġmetre ** - 5.098 0.610609 % * * Target Token Top tokens based on partial context : regular and more conversational " than common Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġsense - 2.547 7.83 % 2 ĠEnglish - 3.352 3.50 % 3 . - 3.427 3.25 % 4 Ġconversation - 3.445 3.19 % 5 , - 3.634 2.64 % ... ... ... ... 14103 Ġmetre ** - 13.450 0.000144 % * * Target Token Contrastive next token prediction : Rank Tokens Logprobs Probs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 Ġmetre ** - 0.923 39.74 % 2 Ġsense - 2.334 9.69 % 3 Ġmeter - 2.785 6.17 % 4 Ġin - 3.210 4.03 % 5 Ġfoot - 3.220 3.99 % * * Target TokenAnda dapat mereplikasi hasil untuk beberapa contoh pada Gambar 1 dari makalah dengan kode berikut:
python cb_demo . py - - context = ' Ballad metre is "less regular and more conversational" than common metre' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5 python cb_demo . py - - context = ' Isley Brewing Company: Going Mintal — a minty milk chocolate stout' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5 python cb_demo . py - - context = ' Other times anxiety is not as easy to see, but can still be just as debilitating' - - model_name = 'gpt2' - - partial_length = 8 - - alpha = 0.5Lambada mirip dengan contoh yang ditunjukkan di atas di mana model diharapkan untuk memprediksi kata akhir dalam bagian -bagian dari beberapa kalimat. Dataset ini adalah tolok ukur standar untuk mengevaluasi model Langauge modern (contoh).
Lebih penting lagi, tugas ini secara eksplisit membutuhkan penalaran dalam konteks yang luas: manusia dapat dengan andal menebak kata terakhir ketika diberi seluruh bagian, tetapi tidak ketika hanya diberikan kalimat terakhir. Properti seperti itu membuat tolok ukur ini menjadi testbed yang sempurna untuk mengevaluasi efektivitas peningkatan koherensi yang kami usulkan.
Untuk menjalankan eksperimen Lambada, cukup jalankan perintah berikut:
python main . py - - tasks = 'lambada' - - models = 'gpt2-small' - - use_val = False - - alpha_start = 1 - - alpha_end = 1 - - alpha_step = 0.1 - - slen_start = 10 - - slen_end = 10Argumen penting terdaftar sebagai berikut, silakan gunakan python main.py --help .
--models : Nama model bahasa pra-terlatih, dipisahkan oleh titik koma jika Anda ingin menjalankan banyak model pada saat yang sama, misalnya, 'gpt2-small;gpt2-medium' ; Jika Anda ingin menggunakan model GPT-3, lihat catatan tentang GPT-3.--use_val : Whether to use a validation set to select two hyperparameters, alpha and slen representing the boosting coefficient and length for the partial context--alpha_start , --alpha_end , --alpha_step : Grid search parameters for the alpha hyperparameter--slen_start , --slen_end , --slen_step : Grid search parameters for the slen hyperparameter; Perhatikan bahwa kedua pengaturan hiperparameter mempengaruhi kecepatan inferensi untuk tugas lambadaKami mengevaluasi peningkatan koherensi yang diusulkan pada tugas -tugas NLU berikut.
| Tugas | Tutup Tugas | Pertanyaan Menjawab | Klasifikasi Teks | NLI | Fakta Pengambilan Pengetahuan |
|---|---|---|---|---|---|
| Dataset | Storycloze Hellaswag Copa | Commonsenseqa OpenBookQA Busur mudah/tantangan PIQA | SST-2/5 Trec Agnews | Rte CB BOOLQ | LAMA |
Sebagian besar dataset dapat dimuat oleh dataset Hugginface; Hanya beberapa dari mereka yang membutuhkan pengunduhan secara manual dengan instruksi yang diminta saat Anda menjalankan kode.
Untuk menjalankan eksperimen NLU, cukup jalankan perintah berikut:
python main . py - - tasks = 'storycloze;csqa;openbookqa' - - models = 'gpt2-small;gpt2-medium;gpt2-large' - - alpha_start = 2 - - alpha_end = - 3 - - alpha_step = 0.01Beberapa python main.py --help penting.
--models : Nama model bahasa pra-terlatih, dipisahkan oleh titik koma jika Anda ingin menjalankan banyak model pada saat yang sama, misalnya, 'gpt2-small;gpt2-medium'--use_val : apakah akan menggunakan set validasi- alpha slen yang mewakili koefisien pendorong dan panjangnya-pawai partial-partial-partial partial,--alpha_end partial partial-partial --alpha_start --alpha_step . Parameter pencarian grid untuk hyperparameter alpha ; Perhatikan bahwa kode menyimpan hasil perantara dan Anda bebas untuk mengubah parameter ini setelah menjalankan inferensi untuk satuapi_key.txtselain tugas-tugas sebelumnya, basis kode kami cukup fleksibel untuk menggabungkan dataset multi-pilihan baru dengan upaya minial (terinspirasi oleh proyek open-source, LM-evaluasi-Harness). Ada sekitar tiga langkah:
__init__.py di folder tasks .MultipleChoiceTask dengan fungsi preprocessing data (misalnya, load_data , standardize )get_contrast_ctx , yang merupakan tempat Anda mendefinisikan prompt premis Anda sendiri untuk meningkatkan koherensi.Lihat kelas tugas lain sebagai contoh dan silakan bebas merasa untuk memberi tahu kami jika Anda menemukan masalah jika ada masalah ketika mengadopsi kami.
Kami menyediakan pembungkus model generasi yang kompatibel dengan pustaka transformers Huggingface di generation/generation.py . Anda dapat membuat varian koherensi yang ditandai dari setiap lm autoregresif menggunakan kelas dalam skrip contoh:
> >> boosted_model = generation . BoostedModel ( base_model , k = 8 , alpha_long = 1.5 , alpha_short = - 0.5 )boosted_model kemudian dapat digunakan secara fleksibel dengan fungsi generate ,
> >> ins = T . LongTensor ([ tokenizer . encode ( 'Once upon a midnight dreary,' )]) > >> outputs = boosted_model . generate ( input_ids = ins , do_sample = True , max_length = 100 , top_p = 0.95 ) > >> tokenizer . decode ( outputs [ 0 ]) "Once upon a midnight dreary, while I pondered over these things, I suddenly became aware of a strange and terrible noise. I turned round, and saw that the old man was standing near me. He was wearing a black suit, with a black tie, and a black hat. He had a long, thin, black beard, and his eyes were black. His hair was of a dark brown colour, and was very long. His face was rather large, and his lips were somewhat". Diadaptasi dengan skenario di mana konteks pendek adalah teks yang saat ini dihasilkan dikurangi awalan dengan panjang tertentu ( misalnya , belokan sebelumnya dalam percakapan) dengan mengatur secara dinamis boosted_model.k ke panjang awalan negatif.
Kami menyajikan beberapa output generasi bersyarat. Metrik evaluasi yang ditunjukkan pada Tabel 1 dapat dievaluasi menggunakan kode dari repositori ini untuk empat kolom pertama atau menggunakan kode di sini untuk metrik koherensi jarak jauh baru yang kami perkenalkan.
Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi Kolya (Nikolay.malkin di Mila.Quebec) dan Zhen (Wang.9215 di OSU.edu).