每天给你送来NLP技术干货!
论文:Prompt-Learning for Fine-Grained Entity Typing 链接:https://arxiv.org/pdf/2108.10604.pdf 单位:清华大学、首尔大学
提取摘要
提示学习(Prompt-learning)一个有效的tune预训练模型到特定任务上的方法,最近受到了各方学者的关注。
通过使用填空形式(cloze-style)来激活预训练模型的通用知识,Prompt-learning已经在很多NLP任务上达到了理想的效果,比如自然语言推理、情感分类和知识检索等。
这篇文章主要探索prompt-learning在细粒度实体分类(fine-grained entity typing)上的fully supervised, few-shot和zero-shot场景下的应用。
本文提出一种简单有效的面向实体表达器和模板来指导基于掩码语言模型(MLM)的prompt-learning管道方法。
此外,为了解决zero-shot问题,我们提出了一种自监督方法,该方法在prompt-learning中进行分布级别优化,以自动汇总实体类型的信息。
最后,在三个公开数据集的大量实验中得出,fully supervised, few-shot 和 zero-shot场景下prompt-learning方法远高于基于finetune的baseline,尤其是在训练不充足的情况下。
如果不了解prompt-learning的话,我在这里简单介绍下,之前通用的finetune方法是让预训练模型迁就下游任务,而prompt-learning是让下游任务迁就预训练模型。而实际上,prompt-learning更能发挥预训练模型的真实能力。
使用prompt-learning最基本的模板,比如输入文本为
He is from New York
加入基于mask的prompt模板为:
He is from New York. In this sentence, New York is [MASK]
背景
实体分类任务定义
比如有数据集有n个句子:
每个句子x都包含一个实体m,预测该实体m在这个句子中的类别就是实体分类任务,其中,实体类别是一个固定集合。比如句子:
London is the fifth album by the rock band Jesus Jones...
London是这里的实体,显然London预测为Music而不是Location。
FineTune
输入一个句子:
其中实体为:
通过预训练模型得到蕴含语义的隐层:
最终选取
作为最后的隐层表示,然后通过一个W和softmax映射到概率分布来达到预测的效果:
其中W、b和所有预训练模型参数都要通过损失进行调整,其中损失为:
Prompt-based Tuning
对于每一个label y,Prompt方法需要定义一个新的label集合,该集合中的所有label都是预训练模型vocab里的word:
每个label都会对应若干新的label集合。通过取每个标签的并集,最终得到一个整体字典集合。
比如在情感分析中,label y = POSITIVE,它的prompt方法对应的新label集合为{great, good, wonderful...}。
除了重新定义label,prompt-learning的另一个重要的是模板T(.),该模板很好理解,就是在原始的输入文本最后,加入一些新的token,其中使用[MASK]作为预测在上述构建新的label集合中的分类。
因此,一个分类问题就变为预训练模型最擅长的预测[MASK]的语言模型问题(PLM:在本领域作战,岂能败乎?):
实体分类的Prompt-learning
一共分为3部分:
构建新的label;适应于该分类的模板T(.);以及训练Training。
新的Label集合
针对每一个原始label,寻找其类似的且不能和其他原始label产生模糊性,比如city有十个相近的词(通过该工具查找:https://relatedwords.org):
metropolis, town, municipality, urban, suburb, municipal, megalopolis, civilization, downtown, country
他们就和CITY这原始label有这很强的联系,但是和类似的原始label:LOCATION却没有很大的关联。
在MLM预测的时候,比如原始label:CITY预测的分数为对应的新的label集合预测的分数的加权和:
其中,lambda为新label集合每个词的重要性指标,可作为超参,也可作为训练参数。
模板
模板有两种,一种是hard版本,就是自己设计好,这种版本作者设计了3个:
还有一种soft版本的,就是
其中,[Ent]为x中的实体copy,[P]为开始符,[Pi]也为新加入的tokens,l为超参,这些新的tokens都是随机初始化并参与训练的。
训练和推理
为φ为模板的参数,θ为预训练模型参数,loss采用交叉熵:
推理直接采用上面的公式3。
针对zero-shot的自监督Prompt-learning
上面的都是有训练数据集的情况,而针对没有训练数据的zero-shot问题来说,就不适用了。
作者发现比如一句话:
Steve Jobs found Apple. In this sentence, Steve Jobs is a [MASK]
中的Steve Jobs预测为person的概率要远大于location,作者认为合理地利用这个优越的初始化点,就有可能使plm自动总结类型信息,并最终提取正确的实体类型。
作者认为相同的实体在不同的句子中具有类似的类型,比如
“Steve Jobs” 在不同句子中可以为entrepreneur, designer, philanthropist
所以优化同样的实体的句子使得它们的预测具有相同的分布。这种方法在自监督学习中不仅弱化了监督性,也加强了除了实体词外其他词的重要性。
如上图所示,其中作者为了防止过拟合,也采用[HIDE]的方法来替代实体,根据实验选择0.4的概率。
其中JS为Jensen-Shannon divergence,主要为了使两分布更加相近。
另外也找了正负样例,其中负样例来自一个大型的实体链接库(English Wikipedia)。
实验
实验的数据分布
在few-shot情况下的性能比较
可以发现训练数据越少该方法性能越高,而且是断层式提高。
Hard和Soft模板在全量数据下的性能
在zero-shot下未使用和使用自监督学习的方法对比,展示自监督的有效性
以及对比图
最后,作者也做了在few-shot为8-shot的情况下模板的对比
可以看出,数量较少情况下,可训练的soft-encoding的模板性能更加好。
感兴趣的小伙伴可以亲自看看去,真是很适合阅读的一篇佳作。