余弦相似度匹配
今天的产品涉及到一个相似度匹配算法,上网查了这类算法很多。跟研发讨论,研发推荐使用余弦值相似度算法。
余弦值相似度算法是个什么算法?
余弦距离,也称为余弦相似度,是用向量空间中两个向量夹角的余弦值作为衡量两个个体间差异的大小的度量。
余弦值越接近1,也就是两个向量越相似,这就叫"余弦相似性",余弦值越接近0,也就是两个向量越不相似,也就是这两个字符串越不相似。
是不是更加云里雾里了?没关系,我数学这么差的人都能理解,相信你通过下面的例子也能理解的。
举一个例子来说明,用上述理论计算文本的相似性。为了简单起见,先从句子着手。
句子A:这只皮靴号码大了。那只号码合适。
句子B:这只皮靴号码不小,那只更合适。
怎样计算上面两句话的相似程度?
基本思路是:如果这两句话的用词越相似,它们的内容就应该越相似。因此,可以从词频入手,计算它们的相似程度。
第一步,分词。
句子A:这只/皮靴/号码/大了。那只/号码/合适。
句子B:这只/皮靴/号码/不/小,那只/更/合适。
第二步,计算词频。(也就是每个词语出现的频率)
句子A:这只1,皮靴1,号码2,大了1。那只1,合适1,不0,小0,更0
句子B:这只1,皮靴1,号码1,大了0。那只1,合适1,不1,小1,更1
第三步,写出词频向量。
句子A:(1,1,2,1,1,1,0,0,0)
句子B:(1,1,1,0,1,1,1,1,1)
第四步:运用上面的公式:计算如下:
计算结果中夹角的余弦值为0.81非常接近于1,所以,上面的句子A和句子B是基本相似的。
上面这个例子是网上最常用的例子,理解了这个算法,这个算法就能包容所有,有没有优缺点呢?
句子A:女
句子B: 女性
按照感官看,他们是一个概念,应该是100%匹配。按照理性,分字词的逻辑理解,应该是50%的匹配,我们用余弦值计算,得出结果70.7%,很相似但是达不到100%相似,因为电脑无法去理解语意。
这里扯个题外话,发现英文中有很多辅助工作的插件和软件,如书写邮件,帮助提高办公用语的书写规范等等,但是搜索半天,没有发现任何一款类似的中文工具,难道是因为中文的语义太复杂。
如何设置相似度大于等于80%,这条就不匹配了。
再看一个例子:
句子A:太好了。
句子B:太好了太好了太好了。
如果按照余弦值计算,相似度才5%左右,完全不达标。
如果出现语义一样的一句话,但是重叠数很多,可能计算会不达标,优点对单字分组的相似度匹配很高,忽略排序影响。
经过这个算法的学习,更加认识到人类的思维真是一个复杂的东西,没有一个算法就能解决所有问题,如果AI成功,需要一个很大很大的架构模型,还是任重道远的。
参考: