<< 新闻中心

文本相似度算法——SimHsah+汉明距离、Jaccard相似性系数


——文本相似度算法小讲堂

2020-07-07 17:36:25 作者 书写人生

SimHsah+汉明距离是skycto文本相似度计算服务中10大相似算法之一,skycto文本相似算法服务主要以webservice形式对外提供相似度计算接口,独立自主可控,可用于国产化平台。skycto文本相似度服务能够独立部署、联合部署、嵌入部署等多种形式,支持国产化OpenJDK、中标麒麟、龙芯、飞腾等软硬件。skycto文本相似算法服务支持1:1相似度计算(阈值范围:0.0-1.0),支持1:N计算相似度Top排序(按照最相似前N排序返回),支持数据库指定字段计算并排序,支持数据库多个字段联合计算排序,支持Lucene快速索引等。

√  算法四:SimHsah+汉明距离

 概念:在信息论中,两个等长字符串之间的汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。

 步骤:

 1011101 与 1001001 之间的汉明距离是 2

 "toned" 与 "roses" 之间的汉明距离是 3

 首先我们来计算SimHash

 (1)提取文档关键词得到[word(分词),weight(权值)]

 (2)用hash算法将word转换为固定长度值二进制的字符串[hashwordweight]

 (3)用wordhash从左到右与权重相乘,如果为1则乘以1 ,如果是0则曾以-1

 (4)接着计算下个数,直到将所有分词得出的词计算完,然后将每个词第三步得出的数组中的每一个值相加。

 (5)对第四步得到的数组中每一个值进行判断,如果>0记为1,如果<0记为0

 第四步得出的就是这个文档的SimHash

 这样我们就能将两个不同长度的文档转换为同样长度的SimHash值,so,我们现在可以计算第一个文档的值和第二个文档的汉明距离(一般<3就是相似度高的)。

 SimHash本质上是局部敏感性的hash(如果是两个相似的句子,那么只会有部分不同),

 如果想要小数形式的可以这么做:1 - 汉明距离 / 最长关键词数组长度。

 eg

 假设文本:雇员是人

 (1[雇员,5][是,2][人,3]

 (2)使用hash算法hash[雇员,5]hash [是,2]hash [人,7],得到结果分别为hash[雇员,5]=101011hash [是,2]=001010, hash [人,3]=111011

 (3)加权hash[雇员,5]=[5,-5,5,-5,5,5], hash [是,2]=[-2,-2,2,-2,2,-2], hash [人,3]=[3,3,3-3,3,3]

 (4)合并累加:[6,-4,10,-10,10,6]

 5降维:[1,0,1,0,1,1]

 雇员的汉明距离0,是的汉明距离是2,人的汉明距离是1

√  算法五:Jaccard相似性系数(Jaccard similarity coefficient

 概念:Jaccard相似性系数(Jaccard similarity coefficient),通过计算两个集合交集的大小除以并集的大小来评估他们的相似度

 步骤:

 (1)将对比的两个句子进行分词,列出所有的分词

 (2)取句子A和句子B的交集

 (3)取句子A和句子B的并集,

 (4)用两个句子的共同都有的词除以两个句子所有的词。

 相似度=共同词/两个句子所有的词

 eg

 A:我爱购物,B:我爱读书

 共同词:我/

 所有的词:我//购物/读书

 相似度=2/4=0.5


 以上算法在我司的NPL服务器有商业化实现。可用于搜索引擎,机器人客服,文件归档等业务场景,可以方便找到与目标文本最相关的文本。以下是我们的联系方式:

 公司名称:四川书写人生科技有限公司

 通信地址:成都市金牛区兴盛西路2号固特大厦3A405A

 公司座机:028-83410634

 微信电话:191-8044-7517

 联系邮件:admin@skycto.com

 我们承诺:邮件12小时回,微信4小时回复,欢迎致电联系。

推荐阅读

首页 分享微博 分享微信 回到顶部