SimHash 是一种局部敏感哈希(LSH)算法,由Google在2007年提出,核心是将高维数据(如文本)映射为固定长度的二进制指纹,相似内容生成的指纹汉明距离小,差异大的内容汉明距离大,专门用于海量数据的近似去重与相似度检索。
一、与传统哈希的核心区别
| 特性 | 传统哈希(MD5/SHA) | SimHash |
|---|---|---|
| 设计目标 | 雪崩效应(微小差异→完全不同) | 局部敏感(相似→相近) |
| 用途 | 数据完整性校验、加密 | 大规模文本去重、相似检索 |
| 相似性判断 | 只能判断完全相同 | 可判断近似重复 |
二、SimHash 计算步骤(以64位文本指纹为例)
- 分词与权重:将文本分词,用TF-IDF等方法给每个词分配权重(重要词权重大)。
- 特征哈希:对每个词用普通哈希生成64位二进制串。
- 加权累加:初始化64维全0向量;遍历每个词的哈希位:
- 位为 1 → 该位**+权重**
- 位为 0 → 该位**-权重**
- 二值化:累加向量中,正数→1,负数/0→0,得到64位SimHash指纹。
三、相似度判断:汉明距离
两个SimHash指纹对应位不同的位数叫汉明距离。
- 距离越小 → 文本越相似
- 实践中常用阈值:64位SimHash,汉明距离≤3 视为近似重复。
四、典型应用场景
- 搜索引擎网页去重(Google爬虫核心技术)
- 大模型训练数据去冗余
- 新闻/文章相似推荐
- 版权检测、垃圾内容过滤
五、优缺点
- ✅ 优点:O(n)复杂度、内存占用低、适合亿级数据
- ❌ 缺点:对短文本效果一般;依赖分词与权重设计