概述: 通常大家说的文本相似度多指文本语义的相似度,但是对于部分场景却会非常关注文本字面上的相似度,比如对于内容投放平台需要去判重,这就涉及看文本是否字面大量重复,需要去比较文本的字面相似度。
梳理了下常用的字面相似度算法:
文本字面相似度包括:
- Simhash
- 序列相似度(Sequence Similarity)
- Jaccard相似度
- 余弦相似度(Cosine Similarity)
- Levenshtein距离
- N-gram相似度
各种算法的概述:
1、Simhash相似度
-
主要思想: Simhash是一种局部敏感哈希算法,旨在快速检测近似重复的文档。它将长文本或文档转换为固定长度的指纹(通常是64位整数),使得相似的文档会产生相似的指纹。SimHash算法是Google在2007年发表的论文《Detecting Near-Duplicates for Web Crawling》中提到的一种指纹生成算法,被应用在Google搜索引擎网页去重的工作之中。
实现步骤:
- 将文档分割成特征(如词或n-gram)
- 对每个特征计算哈希值
- 对每个哈希值的每一位进行加权
- 合并所有特征的加权结果
- 对合并结果进行阈值化,得到最终的指纹
应用场景:
- 网页去重
- 文档相似度检测
- 抄袭检测
对于文本去重这个问题,常见的解决办法有余弦算法、欧式距离、Jaccard相似度、最长公共子串等方法。但是这些方法并不能对海量数据高效的处理。
比如说,在搜索引擎中,会有很多相似的关键词,用户所需要获取的内容是相似的,但是搜索的关键词却是不同的,如“北京好吃的火锅“和”哪家北京的火锅好吃“,是两个可以等价的关键词,然而通过普通的hash计算,会产生两个相差甚远的hash串。而通过SimHash计算得到的Hash串会非常的相近,从而可以判断两个文本的相似程度。
通过对不同文本的SimHash值进而比较海明距离,从而判断两个文本的相似度。海明距离越小,相似度越低(根据 Detecting Near-Duplicates for Web Crawling 论文中所说),一般海明距离为3就代表两篇文章相同。

最低0.47元/天 解锁文章
1547

被折叠的 条评论
为什么被折叠?



