P-tuning-v2

GitHub
2.1k 208 中等 1 次阅读 5天前Apache-2.0语言模型
AI 解读 由 AI 自动生成,仅供参考

P-tuning-v2 是一种优化的深度提示微调策略,旨在让预训练语言模型在各类任务和不同规模下,达到与传统全量微调相当的性能表现。它主要解决了传统提示学习(Prompt Tuning)在小中型模型或复杂任务(如序列标注)中效果不佳、难以媲美全量微调的痛点。

该工具的核心技术亮点在于“深度提示微调”:不同于仅在输入层添加提示,P-tuning-v2 将连续提示向量应用到预训练 Transformer 的每一层输入中。这种设计显著增加了提示的表达能力,有效缩小了参数高效微调与全量微调之间的性能差距,同时保持了主干模型参数冻结的优势,大幅降低了计算资源消耗。

P-tuning-v2 特别适合 AI 研究人员和开发者使用,尤其是那些希望在有限算力条件下(如单卡或多卡消费级 GPU),对 BERT、RoBERTa 等中小规模模型进行高效适配,或从事命名实体识别、关系抽取等序列标注任务的团队。相比需要更新全部模型参数的传统微调,它提供了一种更轻量、更通用的替代方案,且代码开源,支持在常见深度学习环境中复现论文结果,是探索大模型高效应用的重要工具。

使用场景

某医疗科技公司的算法团队需要在资源有限的服务器上,将预训练语言模型快速适配到“电子病历实体识别(NER)”任务中,以提取疾病和药品名称。

没有 P-tuning-v2 时

  • 算力门槛高:传统全量微调(Fine-tuning)需要更新模型所有参数,导致显存占用巨大,团队现有的单张 RTX 3090 显卡无法加载大模型进行训练。
  • 小样本效果差:在医疗标注数据稀缺(少样本)的场景下,直接微调容易导致模型过拟合,泛化能力严重不足,识别准确率波动大。
  • 迭代周期长:每次尝试新任务或调整超参数都需重新保存和加载完整的模型权重,存储成本高且实验迭代效率极低。
  • 任务适配难:对于序列标注这类复杂任务,简单的提示工程(Prompt Engineering)往往无法捕捉深层语义,性能远不及微调模型。

使用 P-tuning-v2 后

  • 显存大幅降低:P-tuning-v2 采用深度提示调优策略,仅训练每层输入的连续提示向量而冻结主干参数,使单卡训练大模型成为可能。
  • 少样本性能跃升:该方法在小规模医疗数据集上实现了与全量微调相当甚至更优的准确率,有效解决了数据稀缺导致的过拟合问题。
  • 参数高效迭代:只需存储极小的提示向量参数(而非整个模型),使得多任务切换和超参数搜索的速度提升了数倍,显著加快研发节奏。
  • 复杂任务胜任:通过在所有 Transformer 层注入可学习提示,P-tuning-v2 成功捕捉了病历文本中的深层依赖关系,在 NER 任务上达到了生产级精度。

P-tuning-v2 的核心价值在于它以极低的计算成本,让小模型在数据稀缺的垂直领域任务中也能获得媲美全量微调的卓越性能。

运行环境要求

操作系统
  • Linux
GPU
  • 必需 NVIDIA GPU
  • 官方复现实验使用 NVIDIA GeForce RTX 3090 (24GB),需安装 CUDA 11.0 或 11.1
内存

未说明

依赖
notes1. 官方实验基于 Ubuntu 服务器进行,Windows 和 macOS 未明确提及支持。2. 最佳超参数对服务器环境和包版本敏感,若环境不一致,强烈建议运行超参数搜索脚本。3. 序列标注(NER, SRL)数据集需从非官方链接单独下载并解压至项目根目录。4. 其他依赖库需通过 'pip install -r requirements.txt' 安装,具体列表未在 README 文本中直接列出。
python3.8.5
pytorch==1.7.1
torchvision==0.8.2
torchaudio==0.7.2
cudatoolkit=11.0
P-tuning-v2 hero image

快速开始

P-tuning v2

源代码和数据,用于:

一种优化的提示调优策略,在小型/中型模型以及序列标注任务上实现了与微调相当的性能。

请参阅我们之前的版本 P-tuning v1,适用于知识探测和少样本 SuperGLUE 任务。如果您能为我们仓库点赞,将极大地激励我们继续努力 :)

您可能也会对我们最近的工作感兴趣:GLM-130B:一个开源的双语预训练模型(2022年10月6日)。这是一款开源的大规模语言模型,在多个基准测试中表现超越 GPT-3 175B。只需 4 张 RTX 3090 或 8 张 RTX 2080 Ti 卡,即可免费获取模型权重、进行推理以及使用 P-Tuning v2!免费获取

P-tuning v2 采用了 深度提示调优 方法,即为预训练 Transformer 的每一层输入应用连续提示。深度提示调优提升了连续提示的表达能力,并缩小了其与微调之间的差距,尤其是在小型模型和复杂任务上。

感谢 @rainatam 在整理代码以供发布方面所做的共同努力!

常见问题

  1. 一些读者注意到 SuperGLUE 中 P-tuning (v1) 和 P-tuning v2 之间存在 “不匹配”:这是因为 P-tuning 的 SuperGLUE 实验为了与 PET 进行公平比较,遵循了 PET 的实验设置,即骨干预训练模型参数与连续提示嵌入共同调优;而 P-tuning v2 则遵循 Prefix tuning 和 Lester 等人的参数高效设置,即冻结骨干预训练模型参数。

复现提示

由于我们在论文中报告的实验均是在 NVIDIA DGX-A100 服务器上进行的(这类设备可能难以获得),因此我们使用以下配置在 BERT-large/RoBERTa-large 上重新实现了 P-tuning v2 的结果:

  • 配备 NVIDIA GeForce RTX 3090 (24G) 显卡的 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
总 epoch 数 100 80 60 80 80 40 30 45
最佳 epoch 数 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
总 epoch 数 100 120 100 50 10 30 80 60 45 15 - 30 10
最佳 epoch 数 86 78 65 31 3 28 45 59 37 13 - 24 9

有关其他超参数,请参考训练脚本。如果您无法在最佳 epoch 达到报告的结果,很可能是环境不匹配所致,此时需要进行超参数搜索。

引用

如果您认为我们的工作有所帮助,请引用我们的论文:

@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}
}

常见问题

相似工具推荐

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

160.8k|★★☆☆☆|今天
开发框架Agent语言模型

LLMs-from-scratch

LLMs-from-scratch 是一个基于 PyTorch 的开源教育项目,旨在引导用户从零开始一步步构建一个类似 ChatGPT 的大型语言模型(LLM)。它不仅是同名技术著作的官方代码库,更提供了一套完整的实践方案,涵盖模型开发、预训练及微调的全过程。 该项目主要解决了大模型领域“黑盒化”的学习痛点。许多开发者虽能调用现成模型,却难以深入理解其内部架构与训练机制。通过亲手编写每一行核心代码,用户能够透彻掌握 Transformer 架构、注意力机制等关键原理,从而真正理解大模型是如何“思考”的。此外,项目还包含了加载大型预训练权重进行微调的代码,帮助用户将理论知识延伸至实际应用。 LLMs-from-scratch 特别适合希望深入底层原理的 AI 开发者、研究人员以及计算机专业的学生。对于不满足于仅使用 API,而是渴望探究模型构建细节的技术人员而言,这是极佳的学习资源。其独特的技术亮点在于“循序渐进”的教学设计:将复杂的系统工程拆解为清晰的步骤,配合详细的图表与示例,让构建一个虽小但功能完备的大模型变得触手可及。无论你是想夯实理论基础,还是为未来研发更大规模的模型做准备

90.1k|★★★☆☆|1周前
语言模型图像Agent

spec-kit

Spec Kit 是一款专为提升软件开发效率而设计的开源工具包,旨在帮助团队快速落地“规格驱动开发”(Spec-Driven Development)模式。传统开发中,需求文档往往与代码实现脱节,导致沟通成本高且结果不可控;而 Spec Kit 通过将规格说明书转化为可执行的指令,让 AI 直接依据明确的业务场景生成高质量代码,从而减少从零开始的随意编码,确保产出结果的可预测性。 该工具特别适合希望利用 AI 辅助编程的开发者、技术负责人及初创团队。无论是启动全新项目还是在现有工程中引入规范化流程,用户只需通过简单的命令行操作,即可初始化项目并集成主流的 AI 编程助手。其核心技术亮点在于“规格即代码”的理念,支持社区扩展与预设模板,允许用户根据特定技术栈定制开发流程。此外,Spec Kit 强调官方维护的安全性,提供稳定的版本管理,帮助开发者在享受 AI 红利的同时,依然牢牢掌握架构设计的主动权,真正实现从“凭感觉写代码”到“按规格建系统”的转变。

88.7k|★★☆☆☆|2天前
语言模型图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|2周前
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85.3k|★★☆☆☆|昨天
图像数据工具视频

funNLP

funNLP 是一个专为中文自然语言处理(NLP)打造的超级资源库,被誉为"NLP 民工的乐园”。它并非单一的软件工具,而是一个汇集了海量开源项目、数据集、预训练模型和实用代码的综合性平台。 面对中文 NLP 领域资源分散、入门门槛高以及特定场景数据匮乏的痛点,funNLP 提供了“一站式”解决方案。这里不仅涵盖了分词、命名实体识别、情感分析、文本摘要等基础任务的标准工具,还独特地收录了丰富的垂直领域资源,如法律、医疗、金融行业的专用词库与数据集,甚至包含古诗词生成、歌词创作等趣味应用。其核心亮点在于极高的全面性与实用性,从基础的字典词典到前沿的 BERT、GPT-2 模型代码,再到高质量的标注数据和竞赛方案,应有尽有。 无论是刚刚踏入 NLP 领域的学生、需要快速验证想法的算法工程师,还是从事人工智能研究的学者,都能在这里找到急需的“武器弹药”。对于开发者而言,它能大幅减少寻找数据和复现模型的时间;对于研究者,它提供了丰富的基准测试资源和前沿技术参考。funNLP 以开放共享的精神,极大地降低了中文自然语言处理的开发与研究成本,是中文 AI 社区不可或缺的宝藏仓库。

79.9k|★☆☆☆☆|1周前
语言模型数据工具其他