第七章 文本表示:哈希表示(四)

发布时间:2026/10/4 5:44:35

第七章 文本表示:哈希表示(四) 目录前置案例——文本的表示与应用一、概念介绍二、向量空间模型三、主题模型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 仍是首选若追求更高的语义准确性且具备训练条件可尝试深度哈希方法。
延伸阅读

更多相关文章

2026/10/4 2:42:13

飞书文档批量导出实战:一条命令把700+知识库文档备份到本地

飞书文档批量导出实战:一条命令把700知识库文档备份到本地 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 假如你所在的公司要从飞书迁移到其他协作平台,而知识库里躺着70…

2026/9/30 6:09:16

带权二分(WQS二分)算法详解:从凸优化到工程实践

1. 带权二分:从“玄学”到“利器”的深度解析 如果你在刷题或者研究算法时,被“恰好选K个物品”这类问题卡住,常规的动态规划(DP)状态爆炸,而你又隐约听说有一种叫“带权二分”或“wqs二分”的神奇方法能将…

2026/10/2 7:55:43

TMC2209 UART模式实战:静音步进电机驱动配置与Arduino应用

在3D打印机、CNC雕刻机等步进电机驱动项目中,你是否遇到过电机运行时啸叫刺耳、低速抖动严重,或者调试参数需要频繁插拔跳线的烦恼?这些问题不仅影响设备体验,也增加了开发和维护的复杂度。TMC2209作为一款集成了UART通信接口的静…

2026/10/4 5:41:18

F280049C X-BAR交叉开关原理与工程配置实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 5:41:18

OpenShell:一个跨平台命令行统一入口的设计与实现

1. 一个不重构不改名的"顺手工具":OpenShell的起点与定位事情要从一次平常的远程排查说起。那段时间我频繁在几台机器之间切换:办公室的Windows、家里的Linux、还有一些临时申请的云服务器。每次登录新环境,第一件事就是把常用别名…

2026/10/4 5:41:18

基于FPGA之光电编码器的M法测数模块

M 法测速模块 Speed_M 详解(光电编码器)一、模块是干什么的Speed_M 实现的是经典的 M 法测速(也叫"测频法"):在固定的采样窗口内数脉冲,用"单位时间内有多少个脉冲"反推转速。它假设上…

2026/10/4 5:41:18

Stata中的自相关矩阵与ARMA模型:从AR(2)原理到实操

做时间序列分析的人,几乎都会遇到同一个问题:手里一串数据,今天和昨天相关,昨天和前天相关,但这种相关性到底是怎么衰减的?是一天比一天弱,还是每隔几期又反弹回来?要回答这个问题&a…

2026/10/4 5:41:18

VASP表面吸附能计算全流程:以CO在Pt(111)表面为例

经常有刚接触VASP表面吸附计算的同学问我:同样是算CO在金属表面的吸附能,为什么文献里数值能差出0.3 eV甚至更多?多数时候问题不在VASP本身,而在整个流程里那些看似不起眼的选择上——slab建得多厚、真空层留多大、底部几层固定、…

2026/10/4 5:36:18

Python实现四叉树:空间索引与范围查询性能优化实战

有一次我在做一个地图坐标检索的小工具,数据量到了八万个点之后,鼠标框选查询开始肉眼可见地卡顿。逐点遍历判断其实只是最基本的四则运算,架不住每秒重复几十次,CPU时间就这样被烧掉了。后来把数据结构换成四叉树(qua…

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 0:01:02

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/4 0:01:02

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/4 1:01:05

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑