Код и наборы данных для бумаги CCL2023, повторная K-NN для точной настройки предварительно обученных языковых моделей.
Архитектура нашей модели можно увидеть следующим образом:

Мы возвращаемся к классификаторам K-NN для дополнения классификаторов на основе PLMS. В частности, мы предлагаем принять K-NN с текстовыми представлениями PLMS в двух шагах:
(1) Используйте K-NN как предыдущие знания для калибровки учебного процесса.
(2) Линейно интерполирует предсказанное распределение K-NN с распределением классификатора PLMS.
Ключом к нашему подходу является введение тренировок K-NN, которое рассматривает K-NN-прогнозируемые вероятности в качестве признаков для легких и жестких примеров во время обучения. Мы проводим обширные эксперименты по точной настройке и быстро настройке, соответственно, в 8 разнообразных конечных задачах.
? Примечание. В нашем проекте есть две основные папки файла. Папка
GLUE_taskвключает в себя шесть задач с одной клей (SST-5, TREC, QNLI, MNLI, Boolq, CB), папкаRE_taskвключает в себя две задачи извлечения информации (Semeval, Tacrev).
Экологические требования размещаются в GLUE_task и RE_task соответственно.
pip install -r requirements.txt
Существуют некоторые различия между экологическими требованиями задачи клея и задачи RE:
transformers в задаче клей составляет 4.11.3, в то время как версия transformers в задаче RE составляет 4,7.transformers от guggingface, задачи, основанную на структуре pytorch_lightning . Мы разместили несколько выстрелов в Glue в GLUE_task/data/training_data/k_shot . Оригинальные полные наборы данных можно скачать на сайте Glue. Вы также можете запустить следующую команду, чтобы генерировать несколько выстрелов в задачах клея на основе исходных наборов данных:
cd GLUE_task
python tools/generate_k_shot_data.py --k 16 --task SST-2 --seed [13, 42, 100]Используйте Comand ниже, чтобы получить слова ответов, которые можно использовать в обучении.
cd RE_task
python get_label_word.py --model_name_or_path roberta-large-uncased --dataset_name semeval{Answer_words} .pt будет сохранен в наборе данных, вам необходимо назначить Model_name_or_path и dataSet_name в get_label_word.py.
В сценарии с несколькими снимками мы принимаем k=16 и взяли 3 разных семян по 1, 2, 3 . Несколько выстрелов будут сгенерированы для dataset/task_name/k-shot , кроме того, вам необходимо скопировать данные проверки, данные тестирования и данные о отношениях в течение нескольких выстрелов.
cd RE_task
python generate_k_shot.py --data_dir ./dataset --k 16 --dataset semeval
cd dataset
cd semeval
cp rel2id.json val.txt test.txt ./k-shot/16-1Из-за ограничения размера мы просто предоставляем несколько выстрелов. Полные данные можно найти в их первоначальных документах.
Рабочие Scipts помещаются в GLUE_task/scripts . Есть много сценариев:
run_exp.sh # PT / FT: prompt-tuning or fine-tuning without knn.
run_knn_infer_exp.sh # UNION_infer: pt or ft with knn infer based on the mdoel checkpoints of pt and ft.
run_knn_train_exp.sh # UNION_all: pt or ft with knn train and knn infer.
run_ssl_exp.sh # PT / FT in zero-shot setting.
run_ssl_exp_infer.sh # UNION_infer in zero-shot setting.
run_ssl_exp_train.sh # UNION_all in zero-shot setting.
Просто выберите один сценарий и запустите следующую команду:
cd GLUE_task
bash scripts/run_xxx.sh Рабочие скипты размещаются в RE_task/scripts . Есть также много сценариев, таких как клей.
run_exp.sh # PT / FT: prompt-tuning or fine-tuning without knn.
run_knn_infer_exp.sh # UNION_infer: pt or ft with knn infer.
run_knn_train_exp.sh # UNION_all: pt or ft with knn train and knn infer.
run_ssl_exp.sh # Zero-shot setting.
Просто выберите один сценарий и запустите следующую команду:
cd RE_task
bash scripts/run_xxx.shЕсли вы используете код, указать следующую статью:
@article { DBLP:journals/corr/abs-2304-09058 ,
author = { Lei Li and
Jing Chen and
Bozhong Tian and
Ningyu Zhang } ,
title = { Revisiting k-NN for Fine-tuning Pre-trained Language Models } ,
journal = { CoRR } ,
volume = { abs/2304.09058 } ,
year = { 2023 } ,
url = { https://doi.org/10.48550/arXiv.2304.09058 } ,
doi = { 10.48550/arXiv.2304.09058 } ,
eprinttype = { arXiv } ,
eprint = { 2304.09058 } ,
timestamp = { Tue, 02 May 2023 16:30:12 +0200 } ,
biburl = { https://dblp.org/rec/journals/corr/abs-2304-09058.bib } ,
bibsource = { dblp computer science bibliography, https://dblp.org }
}