P-tuning v2
源代码和数据用于:
- [ACL 2022] P-Tuning v2:提示调优在各种规模和任务中可与微调相媲美
- [EMNLP 2023 发现] 参数高效的提示调优使神经文本检索器具有泛化性和校准性 [代码]
一种优化的提示调优策略,在小型/中型模型和序列标注任务上实现了与微调相当的性能。
查看我们之前的版本 P-tuning v1,用于知识探测和少样本 SuperGLUE。您的星标支持将极大地鼓励我们更加努力 :)
您可能也会对我们最近的工作 GLM-130B:开放的双语预训练模型 (2022-10-06) 感兴趣。这是一个开源的大型语言模型,在各种基准测试中表现超过 GPT-3 175B。只需 4 个 RTX 3090 或 8 个 RTX 2080 Ti 就可以免费获取模型权重、进行推理和 P-Tuning v2!
P-tuning v2 利用深度提示调优,即为预训练 Transformer 的每一层输入应用连续提示。 深度提示调优增加了连续提示的容量,缩小了与微调在各种设置下的差距,特别是对于小型模型和困难任务。
感谢 @rainatam 在重新组织代码以发布方面的共同努力!
常见问题
- 一些读者注意到 SuperGLUE 中 P-tuning (v1) 和 P-tuning v2 之间存在**"不匹配"**:这是因为在 P-tuning 的 SuperGLUE 实验中,为了与 PET 公平比较,我们遵循其实验设置,将主干预训练模型参数与连续提示嵌入一起调整;而在 P-tuning v2 中,我们遵循 Prefix tuning 和 Lester 等人的参数高效设置,冻结主干预训练模型参数。
复现技巧
由于我们论文中报告的实验都是在 NVIDIA DGX-A100 服务器上进行的(可能难以获得), 我们使用以下配置重新实现了 BERT-large/RoBERTa-large 的 P-tuning v2 结果:
- 配备 NVIDIA GeForce RTX 3090 (24G) GPU 的 Ubuntu 服务器
- cuda 11.1
- 特定版本的软件包(如下所示)
我们注意到,最佳超参数可能对您的服务器环境和软件包版本敏感。 如果您没有完全相同的环境,我们强烈建议您基于我们在 search_script 中的超参数搜索示例脚本和结果收集脚本 search.py 在您的环境中运行超参数搜索。
设置
我们使用 Anaconda3 进行实验。如果您已安装 Anaconda3,请为 P-tuning v2 创建环境:
conda create -n pt2 python=3.8.5
conda activate pt2
设置好基本的 conda 环境后,通过以下命令安装 pytorch 相关包:
conda install -n pt2 pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch
最后,安装我们需要的其他 Python 包:
pip install -r requirements.txt
数据
对于 SuperGLUE 和 SQuAD 数据集,我们从 Huggingface Datasets API(嵌入在我们的代码中)下载它们。
对于序列标注(NER、SRL)数据集,我们准备了一个非官方打包 在这里。 下载后,将打包文件解压到项目根目录。 请自行承担使用风险。
训练
在 run_script 中运行训练脚本(例如,RoBERTa 用于 RTE):
bash run_script/run_rte_roberta.sh
已实现的结果
目前我们已经发布了以下任务和数据集的重新实现。更多实现将很快发布。
BERT-large 的已发布结果
BoolQ | COPA | RTE | WiC | WSC | CoNLL04 | OntoNotes 5.0 | CoNLL12 | |
---|---|---|---|---|---|---|---|---|
结果 | 74.3 | 77.0 | 80.1 | 75.1 | 68.3 | 84.5 | 86.4 | 85.3 |
总轮次 | 100 | 80 | 60 | 80 | 80 | 40 | 30 | 45 |
最佳轮次 | 58 | 12 | 30 | 56 | 17 | 33 | 24 | 43 |
RoBERTa-large 的已发布结果
BoolQ | COPA | RTE | WiC | WSC | CoNLL03 | CoNLL04 | OntoNotes 5.0 | CoNLL12 | CoNLL05 WSJ | CoNLL05 Brown | SQuAD 1.1 | SQuAD 2.0 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
结果 | 84.0 | 92.0 | 86.6 | 73.7 | 64.4 | 91.8 | 88.4 | 90.1 | 84.7 | 89.4 | 83.9 | 88.1/94.2 | 81.3/84.7 |
总轮次 | 100 | 120 | 100 | 50 | 10 | 30 | 80 | 60 | 45 | 15 | - | 30 | 10 |
最佳轮次 | 86 | 78 | 65 | 31 | 3 | 28 | 45 | 59 | 37 | 13 | - | 24 | 9 |
关于其他超参数,请参考训练脚本。 如果您在最佳轮次无法达到报告的结果,可能是由于环境不匹配,需要进行超参数搜索。
引用
如果您觉得我们的工作有用,请引用我们的论文:
@article{DBLP:journals/corr/abs-2110-07602,
author = {Xiao Liu and
Kaixuan Ji and
Yicheng Fu and
Zhengxiao Du and
Zhilin Yang and
Jie Tang},
title = {P-Tuning v2: Prompt Tuning Can Be Comparable to Fine-tuning Universally
Across Scales and Tasks},
journal = {CoRR},
volume = {abs/2110.07602},
year = {2021},
url = {https://arxiv.org/abs/2110.07602},
eprinttype = {arXiv},
eprint = {2110.07602},
timestamp = {Fri, 22 Oct 2021 13:33:09 +0200},
biburl = {https://dblp.org/rec/journals/corr/abs-2110-07602.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}