【NLP】Prompt+对比学习,更好地学习句子表征
作者 | 王嘉宁@华师数据学院
整理 | NewBeeNLP
https://wjn1996.blog.csdn.net/article/details/125528859
虽然BERT等语言模型有很大的成果,但在对句子表征方面(sentence embeddings)上表现依然不佳,因为BERT存在 sentence bias 、 anisotropy 问题;
我们发现prompt,再给定不同的template时可以生成不同方面的positive pair,且避免embedding bias。
相关工作
Contrastive Learning(对比学习) 可以利用BERT更好地学习句子表征。其重点在于如何寻找正负样本。例如,使用inner dropout方法构建正样本。
现有的研究表明,BERT的句向量存在一个 坍缩现象 ,也就是句向量受到高频词的影响,进而坍缩在一个凸锥,也就是各向异性,这个性质导致度量句子相似性的时候存在一定的问题,这也就是 anisotropy 问题。
发现
(1)Original BERT layers fail to improve the performance.
对比两种不同的sentence embedding方法:
对BERT的输入input embedding进行平均;
对BERT的输出(last layer)进行平均
评价两种sentence embedding的效果,采用sentence level anisotropy评价指标:
anisotropy :将corpus里面的sentence,两两计算余弦相似度,求平均。
对比了不同的语言模型,预实验如下所示:
从上表可以看出,貌似anisotropy对应的spearman系数比较低,说明相关性不大。比如bert-base-uncased,
可以看出static token embedding的anisotropy很大,但是最终的效果也差不多。
(2)Embedding biases harms the sentence embeddings performance.
token embedding会同时受到token frequency和word piece影响
不同的语言模型的token embedding高度受到词频、subword的影响;
通过可视化2D图,高频词通常会聚在一起,低频词则会分散
For frequency bias, we can observe that high fre- quency tokens are clustered, while low frequency tokens are dispersed sparsely in all models (Yan et al., 2021). The begin-of-word tokens are more vulnerable to frequency than subword tokens in BERT. However, the subword tokens are more vul- nerable in RoBERTa.
三、方法
如何避免BERT在表征句子时出现上述提到的问题,本文提出使用Prompt来捕捉句子表征。但不同于先前prompt的应用(分类或生成),我们并不是获得句子的标签,而是获得句子的向量,因此关于prompt-based sentence embedding,需要考虑两个问题:
如何使用prompt表征一个句子;
如何寻找恰当的prompt;
本文提出一种基于prompt和对比学习的句子表征学习模型。
3.1 如何使用prompt表征一个句子
本文设计一个template,例如“[X] means [MASK]”,[X] 表示一个placehoder,对应一个句子,[MASK]则表示待预测的token。给定一个句子,并转换为prompt后喂入BERT中。有两种方法获得该句子embedding:
方法一:直接使用[MASK]对应的隐状态向量:;
方法二:使用MLM在[MASK]位置预测topK个词,根据每个词预测的概率,对每个词的word embedding进行加权求和来表示该句子:
方法二将句子使用若干个MLM生成的token来表示,依然存在bias,因此本文只采用第一种方法
3.2 如何寻找恰当的prompt
关于prompt设计上,可以采用如下三种方法:
manual design:显式设计离散的template;
使用T5模型生成;
OptiPrompt:将离散的template转换为continuous template;
3.3 训练
采用对比学习方法,对比学习中关于positive的选择很重要,一种方法是采用dropout。本文采用prompt方法,为同一个句子生成多种不同的template,以此可以获得多个不同的positive embedding。
The idea is using the different templates to repre- sent the same sentence as different points of view, which helps model to produce more reasonable pos- itive pairs.
为了避免template本身对句子产生语义上的偏向。作者采用一种trick:
喂入含有template的句子,获得[MASK]对应的embedding ;
只喂入template本身,且template的token的position id保留其在原始输入的位置,此时获得[MASK]对应的embeding:
最后套入对比学习loss中进行训练:
四、实验
作者在多个文本相似度任务上进行了测试,实验结果如图所示:
惊奇的发现,PromptBERT某些时候竟然比SimCSE高,作者也提出使用对比学习,也许是基于SimCSE之上精细微调后的结果。
往期精彩回顾适合初学者入门人工智能的路线及资料下载(图文+视频)机器学习入门系列下载机器学习及深度学习笔记等资料打印《统计学习方法》的代码复现专辑机器学习交流qq群955171419,加入微信群请扫码
【NLP】Prompt+对比学习,更好地学习句子表征相关推荐
- 强化学习q学习求最值_通过Q学习更深入地学习强化学习
强化学习q学习求最值 by Thomas Simonini 通过托马斯·西蒙尼(Thomas Simonini) 通过Q学习更深入地学习强化学习 (Diving deeper into Reinfor ...
- ACL2022论文分类汇总-Prompt、句子表征、检索排序摘要
写在前面 大家好,我是刘聪NLP. ACL2022会议的论文已经出来一阵子了,将论文列表过了一边,筛选了一些自己正在做或者感兴趣方向的相关论文,包括:Prompt(35篇).句子表征(21篇).检索排 ...
- Prompt+对比学习,更好地学习句子表征
每天给你送来NLP技术干货! 作者 | 王嘉宁@华师数据学院 整理 | NewBeeNLP https://wjn1996.blog.csdn.net/article/details/12552885 ...
- 【NLP】对比学习——文本匹配(二)
文章目录 d. SimCSE:2021.04 Unsupervised Supervised e. R-Drop(Supervised):2021.06 f. ESimCSE(Unsupervised ...
- 超越SimCSE两个多点,Prompt+对比学习的文本表示新SOTA
可能是因为对比学习,今年以来文本表示方向突然就卷起来了,SOTA刷的嗖嗖的,我还停留在我们ConSERT的阶段,结果别人不精调就已经超了. 昨天实习同学发了我几篇Open Review上ACL的投稿, ...
- 【NLP】对比学习——文本匹配(一)
文章目录 1. 任务简介 2. NLP的对比学习算法 a.BERT-Flow 2020.11 b.BERT-Whitening 2021.03 c.ConSERT 2021.05 3. 总结 1. 任 ...
- Robert+Prompt+对比学习+对抗训练文本分类
基于Robert的文本分类任务,在此基础上考虑融合对比学习.Prompt和对抗训练来提升模型的文本分类能力,我本地有SST-2数据集的train.txt.dev.txt两个文件,每个文件包含文本内容和 ...
- 吃瓜笔记 | Momenta王晋玮:让深度学习更高效运行的两个视角
主讲人:王晋玮 | Momenta合伙人 屈鑫 编辑整理 量子位 出品 | 公众号 QbitAI 2月1日晚,量子位·吃瓜社联合Momenta带来吃瓜社第五期:让深度学习更高效运行的两个视角. 作为顶 ...
- 【NLP】相当全面:各种深度学习模型在文本分类任务上的应用
论文标题:Deep Learning Based Text Classification:A Comprehensive Review 论文链接:https://arxiv.org/pdf/2004. ...
最新文章
- 求求你了,配个GC日志呗,不然咋分析故障原因
- anything, if you have made a choice
- idea 使用maven构建项目时,target bytecode version经常自动变化
- python学习三 函数
- lua transliterate实现(lua程序设计10.6练习10.3题)
- 魅族17将配备GaN氮化镓充电器:快充安全又高效
- nagios 监控slave(check_mysql_health插件)
- Python(七):输入输出(IO)、文件读写
- 微信小程序优惠券的购买和核销的操作流程设计
- 淘宝商品详情API接口(商品描述信息查询接口)
- 苹果电脑如何双开微信
- Mandelbrot集Julia集分形的MATLAB实现(分形艺术)
- linux 2.6.32文件系统的dentry父子关系
- 树莓派linux系统识别u盘启动,U盘安装树莓派系统,利用U盘启动Raspberry
- php 读取图片bgr,快速解决cv2.imread()读取图像为BGR的问题
- vi使用手册(zt)
- 为什么他们能成为大师-7位华人诺贝尔科学奖得主的成功法则
- win10添加美式键盘_Windows10添加中文美式键盘,传统语言栏,采用ctrl+shift切换输入法...
- 网络层(王道视频笔记)
- 【观察】生态赋能与聚链共赢背后,解读 SAP 产业集群策略新价值