Repo ini mencakup implementasi makalah berikut: Pembelajaran Kontrastif untuk Pembelajar Bahasa Sedikit Berbasis Cepat oleh Yiren Jian, Chongyang Gao dan Soroush Vosoughi, diterima di NAACL 2022.
Jika Anda merasa repo ini berguna untuk penelitian Anda, mohon pertimbangkan untuk mengutip makalahnya.
@inproceedings { jian-etal-2022-contrastive ,
title = " Contrastive Learning for Prompt-based Few-shot Language Learners " ,
author = " Jian, Yiren and
Gao, Chongyang and
Vosoughi, Soroush " ,
booktitle = " Proceedings of the 2022 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies " ,
month = jul,
year = " 2022 " ,
address = " Seattle, United States " ,
publisher = " Association for Computational Linguistics " ,
url = " https://aclanthology.org/2022.naacl-main.408 " ,
pages = " 5577--5587 " ,
abstract = "The impressive performance of GPT-3 using natural language prompts and in-context learning has inspired work on better fine-tuning of moderately-sized models under this paradigm. Following this line of work, we present a contrastive learning framework that clusters inputs from the same class for better generality of models trained with only limited examples. Specifically, we propose a supervised contrastive framework that clusters inputs from the same class under different augmented {``}views{''} and repel the ones from different classes. We create different {``}views{''} of an example by appending it with different language prompts and contextual demonstrations. Combining a contrastive loss with the standard masked language modeling (MLM) loss in prompt-based few-shot learners, the experimental results show that our method can improve over the state-of-the-art methods in a diverse set of 15 language tasks. Our framework makes minimal assumptions on the task or the base model, and can be applied to many recent methods with little modification.",
}
Kode kami banyak dipinjam dari LM-BFF dan SupCon ( /src/losses.py
).
Repo ini telah diuji dengan Ubuntu 18.04.5 LTS, Python 3.7, PyTorch 1.6.0, dan CUDA 10.1. Anda memerlukan GPU 48 GB untuk eksperimen dengan basis RoBERTa, dan GPU 4x 48 GB untuk RoBERTa-besar. Kami menjalankan eksperimen kami pada Nvidia RTX-A6000 dan RTX-8000, tetapi Nvidia A100 dengan 40 GB juga dapat berfungsi.
Kami menggunakan kumpulan data yang telah diproses sebelumnya (SST-2, SST-5, MR, CR, MPQA, Subj, TREC, CoLA, MNLI, SNLI, QNLI, RTE, MRPC, QQP) dari LM-BFF. LM-BFF menawarkan skrip yang berguna untuk mengunduh dan menyiapkan kumpulan data. Cukup jalankan perintah di bawah ini.
cd data
bash download_dataset.sh
Kemudian gunakan perintah berikut untuk menghasilkan kumpulan data 16-shot yang kami gunakan dalam penelitian ini.
python tools/generate_k_shot_data.py
Perintah utama (templat) yang digunakan untuk tugas telah ditentukan sebelumnya di run_experiments.sh
. Templat tambahan yang digunakan saat membuat multi-tampilan masukan untuk pembelajaran kontrastif dapat ditemukan di /auto_template/$TASK
.
Dengan asumsi Anda memiliki satu GPU di sistem Anda, kami menunjukkan contoh menjalankan penyesuaian pada SST-5 (template acak dan demonstrasi acak untuk "tampilan tambahan" input).
for seed in 13 21 42 87 100 # ### random seeds for different train-test splits
do
for bs in 40 # ### batch size
do
for lr in 1e-5 # ### learning rate for MLM loss
do
for supcon_lr in 1e-5 # ### learning rate for SupCon loss
do
TAG=exp
TYPE=prompt-demo
TASK=sst-5
BS= $bs
LR= $lr
SupCon_LR= $supcon_lr
SEED= $seed
MODEL=roberta-base
bash run_experiment.sh
done
done
done
done
rm -rf result/
Kerangka kerja kami juga berlaku untuk metode berbasis prompt tanpa demonstrasi, yaitu, TYPE=prompt
(Dalam hal ini, kami hanya mengambil sampel templat secara acak untuk menghasilkan "tampilan tambahan"). Hasilnya disimpan di log
.
Penggunaan RoBERTa-large sebagai model dasar memerlukan 4 GPU, masing-masing dengan memori 48 GB. Anda harus mengedit terlebih dahulu Baris 20 di src/models.py
menjadi def __init__(self, hidden_size=1024)
.
for seed in 13 21 42 87 100 # ### random seeds for different train-test splits
do
for bs in 10 # ### batch size for each GPU, total batch size is then 40
do
for lr in 1e-5 # ### learning rate for MLM loss
do
for supcon_lr in 1e-5 # ### learning rate for SupCon loss
do
TAG=exp
TYPE=prompt-demo
TASK=sst-5
BS= $bs
LR= $lr
SupCon_LR= $supcon_lr
SEED= $seed
MODEL=roberta-large
bash run_experiment.sh
done
done
done
done
rm -rf result/
python tools/gather_result.py --condition "{'tag': 'exp', 'task_name': 'sst-5', 'few_shot_type': 'prompt-demo'}"
Ini akan mengumpulkan hasil dari log
dan menghitung mean dan deviasi standar dari 5 pemisahan tes kereta tersebut.
Untuk pertanyaan apa pun, silakan hubungi penulis.
Terima kasih kepada LM-BFF dan SupCon untuk implementasi awal.