CCL2023纸的代码和数据集重新调整K-NN,用于微调预训练的语言模型。
我们的模型的架构可以看如下:

我们重新访问K-NN分类器,以增强基于PLMS的分类器。具体而言,我们建议通过两个步骤采用PLM的文本表示的K-NN:
(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
胶水任务的环境要求和重新任务之间存在一些差异:
transformers的版本为4.11.3,而RE任务中的transformers版本为4.7。transformers框架的胶水任务,基于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{words_words} .pt将保存在数据集中,您需要在get_label_word.py中分配model_name_or_path和dataset_name。
在几个镜头的情况下,我们采用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由于尺寸的限制,我们只提供了几个数据。完整的数据可以在其原始论文中找到。
运行的SCIPT放置在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运行的SCIPT放置在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 }
}