提示学习 | Prompt-Tuning这么好用?

每天给你送来NLP技术干货!


 干货 

作者:十方

来自:炼丹笔记

使用prompts去调节预训练模型处理文本分类任务在小样本上已经取得了比直接finetuning模型更好的效果,prompt-tuning的核心思想就是嵌入一小段文本,比如对于文本分类任务,将其转变成填空任务,还有就是构建个映射器(verbalizer)可以在label和word之间相互映射,verbalizer是人工精妙设计的且用梯度下降学习的。论文提到verbalizer可能缺少覆盖度且引入很高的偏差和方差,所以论文提出引入额外知识到verbalizer里,构建一个Knowledgable Prompt-tuning(KPT)去提升效果。Finetuning虽然效果很好,但是也需要充足的样本去重新训练网络,在模型tuning领域,有很多prompts的研究在预训练目标和下游任务构建了桥梁。论文给了个很好的例子:

句子x: What's the relation between speed and acceleration?

category: SCIENCE

模板: A [MASK] question: x

预估结果基于[MASK]所填word的概率,如果[MASK]填science概率比较高,那verbalizer的作用就是把science映射到真正的类别SCIENCE上。verbalizer就是构建vocabulary和label之间的桥梁。

现存很多工作都是人工制定verbalizer的,人工指定verbalizer就有很多问题,比如上述例子只把science映射成SCIENCE类,就很多限制,因为physics和maths同样可以映射到SCIENCE,因此这种人工one-one映射限制了模型的收敛,同时预估也会有问题,也容易在verbalizer中引入偏差。还有很多工作尝试缓解人工verbalizer的缺陷,用梯度下降寻找最好的verbalizer,然而这样的方法很难推断science和physics之间的联系。如果我们能把{science, physics}->SCIENCE这种信息直接注入到verbalizer,预估的效果就会显著提升,这就是KPT做的事。

c103c4a86e60549e96c7aacf9e09f161.png

e7b2a80b28a093d019c48a62c8b7e14d.png

KPT概述

KPT有3步

  • construction stage

用external KBs为每个label创建一系列的label words。值得注意的是扩展label words不仅仅是找同义词,而是从各种粒度视角。

  • refinement stage

用PLM本身去给扩展的label words降噪。对于zero-shot的效果,该文提出了contextualized calibration去删除一些先验概率较低的words。对于few-shot learning,该文又提出了一个可学习的权重用于verbalizer的降噪。

  • utilization stage

最后用个average loss function去优化expanded verbalizers,把对一系列label words的打分映射到真正标签的打分上。

整体框架如下图:

提示学习 | Prompt-Tuning这么好用?_第1张图片

该文的重点就是构建一个优秀的融合各种外在知识的verbalizer。verbalizer就是把vocabulary中的少数词的概率,映射到label的概率,label words的集合是V,label空间是Y,Vy表示标签y的label words集合,是V的子集,最终预估y的概率就是下式,g就是把label words的概率转成label的概率:

5d60f87c47aa955425862e9d1f055996.png

344de5642923944ba36618174ec2a4a9.png

7e3c422a488e78647557cf88a0e818d2.png

KPT Method

基于上下文预估masked的word并不是一个单选问题,是没有标准答案的,所以verbalizer必须有两个特性,广覆盖和少主观偏差。幸运的是external structured knowledge在主题分类和情感分类会同时满足这两个特性。对于主题分类而言,核心就是要从各个角度找到与topic相关的label words,论文选了个知识图谱作为外部信息(external KB),该图谱可以用来衡量label words和topic直接的相关性,用此选出与topic最相关的label words集合,如下表所示:

提示学习 | Prompt-Tuning这么好用?_第2张图片

尽管用了个知识图谱构建了一个verbalizer,但是这个verbalizer是充满噪声的,因为PLM可能根本不认可,所以需要refinement的过程。对于zero-shot learning,有3个问题需要解决。首先就是OOV问题,PLM没见过KB推荐的词咋办呢?这些词可能有很多类目的信息,处理这个问题,可以简单的把没见过的词mask后预估应该填的词的平均概率,作为这个词的概率。第二个问题是处理一些长尾词汇,PLM预估长尾词汇的概率往往是不准确的。该文提出用contextualized calibration去删除一些先验概率较低的words,具体是我们可以计算label words的概率期望:

84e934c77e8c76ed1ff5f372ce7d8b05.png

我们从训练集采样一批样本然后mask掉word v并近似计算其期望:

5147b7a5eba35e1ccc6500efaeb07cef.png

如果这个值小于一个阈值就删除。

第三个问题就是有些label words和其他相比,很难被预估个比较高的score,所以KB中的label words的概率需要被修正,用下公式:

6b7a9ca543e474b05c8424dee9e4a400.png

对于Few-shot learning,处理起来就相对简单了,给每个label words使用一个可学习的wv,最终weight归一化后如下:

3d1487e477ef22fa9981ccba83834202.png

最后就是优化的目标了,一种是averge的方式,一种是加权,如下所示:

21ff1b3c718d56b9c736a3b46bbb56fc.png

acb7486dfe0ee428690fc81ea3bc69bf.png

33fa97ce25cfc60a2fcbae01192f68fe.png

1ac5da213397e4ee80cbc236f84a750c.png

3cade677c302cbb76b9026399748bf7d.png

实验

实验效果如图所示:

提示学习 | Prompt-Tuning这么好用?_第3张图片

提示学习 | Prompt-Tuning这么好用?_第4张图片

f59a5d69d731b9b5aa5a34f5d7a307af.png

f920d6d3998d984d44852ad164741c7a.png

参考文献

1 KnowLedgeble Prompt-tuning: Incorporating Knowledge into Prompt Verbalizer for Text Classification

https://arxiv.org/pdf/2108.02035.pdf


投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

提示学习 | Prompt-Tuning这么好用?_第5张图片

记得备注呦

整理不易,还望给个在看!

你可能感兴趣的:(机器学习,人工智能,深度学习,自然语言处理,python)