文本相似度
距离方法
1、文本的表示
1.1、VSM表示
1.2、词向量表示
1.3、迁移方法
2、距离计算方法
2.1、欧氏距离 (L2 范数)、曼哈顿距离 (L1范数)、 明氏距离
2.2、汉明距离
2.3、Jaccard相似系数、 Jaccard距离( 1-Jaccard相似系数)
2.4、余弦距离
2.5、皮尔森相关系数
2.5、编辑距离
场景举例:
1)计算 Query 和文档的相关度、2)问答系统中计算问题和答案的相似度、3)广告系统中计算 Query 和广告词的匹配程度、4)推荐系统中 要给某个用户推荐某件物品,计算这件物品和这个用户兴趣的相似度
更多地,判断两个query表达的意思是否相同也可以看作属于文本相似度的范畴。
相似度一定是指两个东西(姑且分别用 P 和 Q 表示)的相似程度,而这两个东西可以是任何形式的,例如文本、图片、声音等等。最终要计算相似度,那必须把这些东西抽象成数学形式,说白了 ,就是怎么用数字把 这些 东西表示出来, 一 般会表示成向量或者矩阵。那如果表示成了向量, 计算相似度就可以使用大家在数学课上学的知识了。
这里希望可以比较清晰全面地介绍一下文本相似度的计算方法,目前来说,大致分为距离、hash、深度学习三种方法。
距离方法
这些所谓的距离其实都是一些 固定 的公式而己,关键在于如何应用。实际应用中可以使用tf-idf、word2vec、LDA等方法实现相似度的距离计算。
1、 文本的表示
很多相似度的第一步其实都是文本的表示问题,即把文本用数字的形式表示出来,这一步目前主要有VSM(vector space model),和词向量表示两种方式。
1.1、VSM表示
这种方法其实灵活性较大,可以基于分词,对于中文基于字符或n-grams的表示也有一定效果。
1) tf-idf/bow表示:在给定文档集合C和词典D的条件下,将某篇文档通过词袋模型表示成一个个的词,而后根据 TF-IDF 为每个词计算出一个实数值;
由于词典D的大小为M,因此将这篇文档转化成一个M维向量,如果词典中某个词未出现在文档中,则这个词的在向量中对应的元素为0,若某个词出现在文档中,则这个词在向量中对应的元素值为这个词的tf-idf值。这样,就把文档表示成向量了,而这就是 向量空间模型(vector space model)。从这里也可看出:向量空间模型并没有catch住词(term)与词(term)之间的关系,它假设各个term之间是相互独立的。
而有了文档向量,就可以计算文档之间的相似度了。
这种表示方法与词典大小相关,往往会使文本的表示比较稀疏且高维,可以通过PCA缓解这一问题。
2) 主题模型表示:实际上VSM可以作为一种文本表示的思想:把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似度表达语义的相似度。
在这个角度,使用LDA,LSA等主题模型同样可以完成文本的VSM表示:将文本表示为topic的向量空间。
这种方法维度可自定义(topic数),且不稀疏,但是可能存在文本对之间距离相似度分布空间密集的情况导致效果不佳。
1.2 词向量表示
这种方法一般直接将文本分词后将词向量相加除以句子长度就可得到。也可以使用如smooth inverse frequency的加权方法将词向量加权:每个词嵌入都由a/(a + p(w))进行加权,其中a的值经常被设置为0.01,而p(w)是词语在语料中预计出现的频率。
一般来说word2vec的词向量方法强于glove方法,而对于word2vec,cbow方法强于skip-gram(具体原因并不复杂,感兴趣可以从训练方法角度思考一下~)
1.3 迁移方法
更多地,上述文本表示方法其实会损失或无法捕捉到语义信息,通过bert、elmo等预训练方法的表示更加靠谱,也可以用于无监督的文本相似度计算。
2、距离计算方法
2.1、欧氏距离(L2范数)、曼哈顿距离(L1范数)、闵可夫斯基距离
欧氏距离:
曼哈顿距离:
闵可夫斯基距离:
是前两种距离测度的推广,在极限情况下的距离是切比雪夫距离
2、汉明距离
表示两个(相同长度)字对应位不同的数量,我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。
2.3、Jaccard相似系数、Jaccard距离(1-Jaccard相似系数)
(1)雅各相似系数:
两个集合A和B的交集元素在A,B的并集中所占的比例,称为两个集合的杰卡德相似系数,用符号J(A,B)表示。
杰卡德相似系数是衡量两个集合的相似度一种指标。
实际使用中,可以用去重与不去重两种方式计算,更多地,可以转换为交集的tf-idf值之和除以并集的tf-idf值之和
(2) 杰卡德距离
与杰卡德相似系数相反的概念是杰卡德距离(Jaccard distance)。
杰卡德距离可用如下公式表示:
杰卡德距离用两个集合中不同元素占所有元素的比例来衡量两个集合的区分度。
2.4 余弦距离
夹角余弦取值范围为[-1,1]。夹角余弦越大表示两个向量的夹角越小,夹角余弦越小表示两向量的夹角越大。当两个向量的方向重合时夹角余弦取最大值1,当两个向量的方向完全相反夹角余弦取最小值-1。文本的相似度一般取绝对值。
2.5 皮尔森相关系数
皮尔森相关系数在推荐系统用的较多,它的公式如下 :
其中, 和 ,分别为向量所在位的值, 和分别是 Q 和 D 的平均值 。 r(Q,D)的范围是- 1 (弱相关)到 1 (强相关〉。
2.6、编辑距离
指两个字符串,由一个变成另一个所需的最少的编辑次数,这个编 就包括替换、插入、删除操作。
文本相似度的计算一般使用VSM/cbow+cos距离/欧式距离,或jaccard距离
2.7 Dice系数
Dice 系数可以计算两个字符串的相似度:Dice(s1,s2)=2*comm(s1,s2)/(leng(s1)+leng(s2))。
Reference
https://blog.csdn.net/weixin_43526820/article/details/89883640?spm=1001.2014.3001.5501