文本相似度计算(一):距离方法


场景举例:
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范数)、 明氏距离

欧式距离:
d ( x , y ) = ∑ i = 1 N ( x i − y i ) 2 d(x,y) = \sqrt{\sum_{i=1}^N{ {(x_i - y_i)}^2}} d(x,y)=i=1N(xiyi)2
曼哈顿距离:
d ( x , y ) = ∑ i = 1 N ∣ x i − y i ∣ d(x,y) = \sum_{i=1}^N{|x_i - y_i|}

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值