BERT可以使用无监督的预训练模型做文本相似度任务吗?

这个问题是个好问题, 也困扰了我好久,一般不熟悉的人会使用word2vector的思路考虑,那么这个问题显然是成立的,但是本质上是错的,不能这么去用。

看一下大神们的回答:

(1)先看一下苏神的: (大神说话就是硬气)

看了楼主的问题,以及你在前面几个回答下的评论,发现你总是反复反问一个事情:取最后一层pool out效果差的原因是什么?
我也来反问一个:你潜意识里觉得它会好的原因是什么?
别说“我就是直觉觉得它会好呀”这样的话,那只能说明你根本就没理由觉得它会好。既然没理由觉得它会好,那它差就是很容易接受的事情。说白了,差才是正常的,差才不需要理由,如果效果居然好,那就需要理由了。
说回特征,pool out的特征是用来做二分类的,既然是二分类,那么就意味着这个输出最终会被集中在两个向量附近,既然只有两个,那多数句子的cos很接近不是很正常的么?

(2)

最近工作也在做这个事,分享下我的实验结论
1.首先一点是在不finetune的情况下,cosine similairty绝对值没有实际意义,bert pretrain计算的cosine similairty都是很大的,如果你直接以cosine similariy>0.5之类的阈值来判断相似不相似那肯定效果很差。如果用做排序,也就是cosine(a,b)>cosine(a,c)->b相较于c和a更相似,是可以用的。总而言之就是你模型评价的标准应该使用auc,而不是accuracy
2.短文本(新闻标题)语义相似度任务用先进的word embedding(英文fasttext/glove,中文tencent embedding)mean pooling后的效果就已经不错;而对于长文本(文章)用simhash这种纯词频统计的完全没语言模型的简单方法也ok
3.bert pretrain模型直接拿来用作 sentence embedding效果甚至不如word embedding,cls的emebdding效果最差(也就是你说的pooled output)。把所有普通token embedding做pooling勉强能用(这个也是开源项目bert-as-service的默认做法),但也不会比word embedding更好。
4.用siamese的方式训练bert,上层通过cosine做判别,能够让bert学习到一种适用于cosine作为最终相似度判别的sentence embedding,效果优于word embedding,但因为缺少sentence pair之间的特征交互,比原始bert sentence pair fine tune还是要差些。参考Siamese bert,https://arxiv.org/abs/1908.10084

参考:https://www.zhihu.com/question/354129879/answer/886821182

发布了342 篇原创文章 · 获赞 794 · 访问量 178万+

猜你喜欢

转载自blog.csdn.net/u014365862/article/details/104825666