无监督语义相似度

没有成对的文本,如何计算语义相似度

1. bert方面的坑

bert计算出来句子之间的相似度很接近,在我的数据集上finetune之后稍微好一点点,用的是cls的输出直接作为句子的向量,然后计算cosine,结果有点翻车,主要问题在:

  • 句子之间的距离都很近
  • 句子的长短也会影响,相同长度的句子之间距离更接近。针对这个问题,我有尝试把每个字的字向量加起来处以字符数量,但是发现还是一样

后来,看了一个知乎的回答,原文:https://www.zhihu.com/question/354129879

用字向量的pool,效果确实比cls的输出好一些。

此外,cosine只是计算两个向量之间角度的距离大小,如果想换成欧式也行,但其实差距不大。

2.cilin的坑

词林的效果也不好,还不如bert,不知道是不是方法有问题,我的方法是:计算句子A和句子B中每个词两两之间的距离,然后取距离最近的词,其实就是词移距离了,只不过词之间的距离是用cilin计算的。

这个翻车原因有两个:

  • cilin里面的词语还是有限的。
  • 只计算词语之间是否相似,词语的重要性。就算是乘上tfidf权重,结果也不好。分析原因有:分词会引入噪声,cilin词典里面也缺少重要的词语,tfidf还好,但整体来看,这个方法是不行的。

用tfidf过滤权重不重要的词,对于短文本来说,能过滤的很少

猜你喜欢

转载自blog.csdn.net/qq_20849045/article/details/109333157