يغطي هذا الريبو تنفيذ الورقة التالية: التعلم المقارن لمتعلمي اللغات قليلي الخبرة القائمين على أساس سريع بقلم يرين جيان، وتشونغيانغ جاو، وسوروش فوسوغي، وتم قبولهم في NAACL 2022.
إذا وجدت هذا الريبو مفيدًا لبحثك، فيرجى التفكير في الاستشهاد بالورقة البحثية.
@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.",
}
تم استعارة الكود الخاص بنا بشكل كبير من LM-BFF وSupCon ( /src/losses.py
).
تم اختبار هذا الريبو باستخدام Ubuntu 18.04.5 LTS وPython 3.7 وPyTorch 1.6.0 وCUDA 10.1. ستحتاج إلى وحدة معالجة رسومات 48 جيجابايت للتجارب مع RoBERTa-base، ووحدات معالجة رسومات 4x 48 جيجابايت لـ RoBERTa-large. نحن نجري تجاربنا على Nvidia RTX-A6000 وRTX-8000، ولكن Nvidia A100 بسعة 40 جيجابايت يجب أن يعمل أيضًا.
نحن نستخدم مجموعات البيانات المعالجة مسبقًا (SST-2، SST-5، MR، CR، MPQA، Subj، TREC، CoLA، MNLI، SNLI، QNLI، RTE، MRPC، QQP) من LM-BFF. يقدم LM-BFF نصوصًا مفيدة لتنزيل مجموعة البيانات وإعدادها. ما عليك سوى تشغيل الأوامر أدناه.
cd data
bash download_dataset.sh
ثم استخدم الأمر التالي لإنشاء مجموعات بيانات مكونة من 16 طلقة استخدمناها في الدراسة.
python tools/generate_k_shot_data.py
تم تحديد المطالبات الأساسية (القوالب) المستخدمة للمهام مسبقًا في run_experiments.sh
. يمكن العثور على القوالب المساعدة المستخدمة عند إنشاء طرق عرض متعددة لمدخلات التعلم المتباين في /auto_template/$TASK
.
بافتراض أن لديك وحدة معالجة رسومات واحدة في نظامك، فإننا نعرض مثالاً على تشغيل الضبط الدقيق على SST-5 (قوالب عشوائية وعروض توضيحية عشوائية لـ "العرض المعزز" للمدخلات).
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/
ينطبق إطار عملنا أيضًا على الطريقة المستندة إلى الموجه دون العروض التوضيحية، على سبيل المثال، TYPE=prompt
(في هذه الحالة، نقوم فقط بأخذ عينات عشوائية من القوالب لإنشاء "طرق عرض معززة"). يتم حفظ النتائج في log
.
يتطلب استخدام RoBERTa-large كنموذج أساسي 4 وحدات معالجة رسوميات، تحتوي كل منها على ذاكرة بسعة 48 جيجابايت. تحتاج أولاً إلى تعديل السطر 20 في src/models.py
ليكون 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'}"
سيقوم بجمع النتائج من log
وحساب المتوسط والانحراف المعياري خلال تقسيمات اختبار التدريب الخمسة.
لأية أسئلة، يرجى الاتصال بالمؤلفين.
شكرًا لـ LM-BFF وSupCon، على التطبيقات الأولية.