第七章 文本表示:哈希表示(四)
目录前置案例——文本的表示与应用一、概念介绍二、向量空间模型三、主题模型LDA四、词嵌入模型Embding五、 哈希模型--Simhash五、 哈希模型--Simhash5.1 概述SimHash 是局部敏感哈希Locality Sensitive Hash, LSH的经典实现由 Moses Charikar 提出核心能力是将高维的文本特征向量映射为一段固定长度的二进制指纹通常为 64 位且内容越相似的文本生成的指纹在二进制位上的差异越小从而通过极低的计算成本实现海量文本的快速去重与相似度判定。5.2 基本原理SimHash 本质是基于随机超平面投影的加权局部敏感哈希LSH核心设计目标是让高维空间中越相似的特征向量映射得到的二进制哈希指纹的汉明距离Hamming Distance越小它能实现 “内容相似→哈希相似” 的特性。与普通哈希函数不同普通哈希如 MD5、SHA追求即使输入只有微小变化输出也完全不同的雪崩效应而 SimHash 则希望相似的输入产生相似的输出因此非常适合文本去重和相似度快速检索。SimHash 的计算流程如下分词与加权对文本进行分词并为每个词赋予权重可使用词频或 TF-IDF 权重。例如词 wiwi​ 的权重为 weightiweighti​。哈希映射使用传统哈希函数如 MD5将每个词映射为一个固定长度的二进制序列如 64 位。加权累加对每个词的二进制序列进行逐位处理若某位为 1则在对应维度上加上该词的权重若为 0则减去该词的权重。最终得到一个长度为 64 的实数向量。降维生成指纹对累加得到的向量逐位判断若该位大于 0则指纹对应位置 1否则置 0。最终得到与原始哈希长度相同的二进制串即文本的 SimHash 指纹。通过这种方式原始的高维文本特征被压缩为一个紧凑的二进制表示。两个文本的相似度可以通过计算它们 SimHash 指纹的汉明距离即不同位的个数来衡量。通常认为64 位 SimHash 的汉明距离 ≤ 3 可视为高度相似。5.3 应用实践Python 中有多个 SimHash 实现库常用的是simhash库。安装命令pip install simhash代码示例from simhash import Simhash # 待比较的文本 text1 人工智能正在改变教育方式 text2 人工智能正在改变教育模式 text3 今天天气很好适合出去散步 # 计算 SimHash 指纹 hash1 Simhash(text1) hash2 Simhash(text2) hash3 Simhash(text3) # 计算汉明距离 print(text1 与 text2 的距离:, hash1.distance(hash2)) print(text1 与 text3 的距离:, hash1.distance(hash3)) # 查看指纹 print(text1 的指纹:, hex(hash1.value))结果示例text1 与 text2 的距离: 16 text1 与 text3 的距离: 34 text1 的指纹: 0x23137e00205905c应用场景网页去重新闻推荐日志分析抄袭检测。优点高效将高维向量压缩为定长二进制串汉明距离计算极快适合大规模实时去重。可增量处理对新文本只需计算其指纹与已有指纹库比较无需重新训练。实现简单算法流程清晰易于理解和部署。缺点仅基于词面SimHash 主要依据词频或词权重进行哈希无法捕捉同义词或语义关联如“汽车”和“轿车”可能指纹差异较大。阈值敏感汉明距离阈值需要根据具体数据调整不同场景下合理阈值可能不同。降维损失压缩过程中必然丢失部分信息可能造成误判或漏判。5.4 深度哈希模型简介随着深度学习的发展研究者提出了多种深度文本哈希模型试图在保留语义相似性的同时生成更紧凑的二进制编码。例如DeepTextHashing 工具包中集成了 VDSH、NbrReg、NASH、B-VAE、Doc2Hash、RBSH、AMMI、PairRec、WISH、MISH、SNUH、SSB-VAE、SMASH、HierHash 和 DHSH 等多种模型覆盖了变分自编码、图增强、语义对齐等技术方向。这些模型通常通过神经网络学习文本的语义表示并约束其输出为二进制码从而在保持高检索效率的同时提升语义匹配能力。相对于传统 SimHash深度哈希模型能够更好地处理语义相似但字面差异较大的文本但训练成本更高且需要大量标注或对比数据。在实际应用中若数据规模极大且对实时性要求极高SimHash 仍是首选若追求更高的语义准确性且具备训练条件可尝试深度哈希方法。