Prompt-Tuning的鼻祖--PET

这篇文章介绍了PET(Pattern-ExploitingTraining)这一半监督学习技术,它利用BERT的预训练知识进行少量样本的文本分类。PET通过构造完形填空问题,将预训练模型参数有效利用,尤其在资源匮乏的NLP场景中提升效果。方法包括Pattern-Verbalizer-Pair、知识蒸馏和iPET迭代,显著扩大了有标注数据的应用范围。

PET(Pattern-Exploiting Training)出自《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》(EACL2021),是一种半监督的训练方法。

在这里插入图片描述

目标

​ 由于大量的language、domain和task以及人工标注数据的成本,在NLP的实际使用中,通常只有少量带标签的示例,所以few-shot是值得研究的部分;如果依然使用传统的监督学习方法,容易过拟合,效果会非常差,因为当仅有很少的样本时,仅有的文本无法让模型知道要具体如何进行分类

​ 在本文中,作者提出了Pattern-Exploiting Training(PET),一种半监督的训练方法,将一句完整的输入样本构造成完形填空的语句后再进行输入预处理模型。

先前的预训练模型

​ BERT的预训练其中一个任务是MLM,就是去预测被【MASK】掉的token,采用的是拿bert的最后一个encoder(base版本,就是第12层的encoder的输出,也即下图左图蓝色框)作为输入,然后接全连接层,做一个全词表的softmax分类(这部分就是左图的红色框)。但在fine tuning的时候,我们是把MLM任务的全连接层抛弃掉,在最后一层encoder后接新的初始化层来做具体的下游任务。
在这里插入图片描述

能不能通过某些巧妙的设计,把MLM层学习到的参数也利用上?

举例:

输入一条汽车论坛的评论,输出这个评论是属于【积极】or【消极】每个类别如果只有10个labeled数据,1K条unlabeled数据。

现在通过改造输入,如下图,
在这里插入图片描述
model对下划线__部分进行预测。BERT预训练时MLM任务是预测整个词表,而这里把词表限定在{好,差},cross entropy交叉熵损失训练模型。预测时,假如预测出好,即这个样例预测label就为积极,预测为差,这个样例就是消极。

「BERT预训练时的MLM层的参数能利用上」。而且「即使model没有进行fine tunning,这个model其实就会含有一定的准确率

参数说明

Pattern-Verbalizer-Pair

### Prompt-Tuning 和 P-Tuning 的区别 #### 实现方式 Prompt-Tuning 主要通过固定预训练模型参数的方式,在输入端引入可学习的连续向量表示作为提示 (soft prompts),这些提示被嵌入到原始输入序列中[^3]。相比之下,P-Tuning 则进一步扩展了这一思路,不仅使用软提示 (soft prompts),还额外引入了一个基于 LSTM 或 MLP 的编码器模块来优化提示的质量和表达能力[^4]。 #### 参数更新范围 在 Prompt-Tuning 中,仅需调整少量新加入的提示向量参数,而无需修改原生大语言模型中的任何权重[^1]。这种策略显著降低了计算成本并提高了效率。然而对于 P-Tuning 而言,除了上述提到的 soft prompts 外还需要训练其内部所含有的复杂神经网络组件(即LSTM/MLP),因此涉及到了更多的可变参数。 #### 训练难度与资源消耗对比 由于 P-Tuning 需要同时处理更多类型的变量并且依赖于更复杂的架构设计,所以在实际操作过程中可能会面临更高的技术挑战以及更大的硬件需求。与此同时,Prompt-Tuning凭借简单明了的设计理念及其较低的学习曲线成为了一种更为轻便的选择方案之一[^2]。 #### 应用场景分析 当目标领域数据规模较小或者希望快速部署解决方案时,可以优先考虑采用相对简单的 Prompt-Tuning 方法来进行任务定制化改造工作;而对于那些追求极致性能表现且具备充足算力支持条件下的项目,则可能更适合选用功能强大但配置较为繁琐一些的 P-Tuning 技术路线去达成预期成果。 ```python # 示例代码展示如何定义一个基本的 Soft Prompts 结构用于 Prompt Tuning import torch.nn as nn class SimpleSoftPrompts(nn.Module): def __init__(self, num_tokens=10, embedding_dim=768): super(SimpleSoftPrompts, self).__init__() self.soft_prompts = nn.Parameter(torch.randn(num_tokens, embedding_dim)) def forward(self): return self.soft_prompts # 对应地,如果我们要构建一个带有LSTM增强版的Soft Prompts(类似于P-Tuning),则如下所示: import torch class AdvancedSoftPromptsWithLSTM(nn.Module): def __init__(self,...): # 省略部分初始化逻辑... ... ... # 进一步实现细节省略... ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值