路由器距离向量算法计算举例_文本去重算法:Minhash/Simhash/Klongsent
日前接到一个对名言警句这种短文本进行去重的小任务,下图是几个重复文本的示例:
很直观的结论就是重复度越高的文本,具有更多重复的词汇。一个最直接的去重思路可以描述为:将文本进行分词处理,统计各文本词汇的重合度。KShingle算法就是基于这样朴素的思想。
一、KShingle算法
对于一篇文档而言,K-shingle定义为文档中连续的K个词汇组成的词组,即:
对于一个包含
指定词组长度
有
(一)算法步骤
K-shingle算法通过将文档表示为K-shingle的集合,比较各文档K-shingle集合之间的相似性,来衡量文档的相似度。算法主要步骤如下:
1. 预处理:读取文档数据集,根据需求,对文档中的标点、空白、中英文、简繁体等字符进行清洗和整理。
2. 提取K-shingle:对清洗后的文档进行分词处理,指定shingle长度
3. 统计特征向量:所有文档的K-shingle互异值构成一个大小为
4. 计算Jaccard相似度:对于集合
5. 文本去重:基于文档相似度的结果,根据预定规则,舍弃重复文本。
(二)算法分析
关于K-shingle算法的几点分析如下:
1.超参数
算法需要指定的唯一超参数是shingle中包含的连续词汇的个数
(1) Shingle对文档语义特征的捕捉能力。
(2) Shingle对存储空间和计算效率的影响。
假设任一词汇
此外,随着
进一步地,由于特征向量维数的增加,大大降低了特征向量之间距离的计算效率。
2.特征向量处理
文档特征向量是取值为范围为
但不论以int还是bit来存储,得到的特征向量都是稀疏且高维的。如果能对特征向量进行降维,再计算相似度,可以提高计算效率,代表算法有minhash。
3.相似度计算
假设文档集包含
simhash。
注:minhash和simhash都属于局部敏感哈希(Local Sensitive Hash)。一般的哈希算法对于相似文本的哈希结果可能差别非常大,局部敏感哈希在普通哈希的基础上保留了一定程度的相似性,即相似文本的哈希结果距离较小。
二、Minhash算法
对海量文本而言,K-shingle算法得到的特征向量是超高维的,导致该算法非常巨大的时间复杂度和空间复杂度。Minhash算法设计了一种最小哈希函数,将原始超高维的稀疏向量转化为低维的稠密向量,降低了计算的空间复杂度。同时,对转换后的稠密向量进行分段索引,缩小潜在相似文本范围,降低了计算的时间复杂度。
最小哈希函数:对一个列向量按行进行随机排列,重排后第一个非零元素的行号就是最小哈希函数值。直观上来说,如果两个文本完全重复,那么不论如何重排,两个文本对应的最小哈希函数值都应该是一样的。
(一)算法步骤
1. 提取K-shingle特征向量:执行K-shingle算法的1~3步,将每篇文档表示为01向量。
2. 计算Minhash特征向量:生成一个随机排列,对文档矩阵进行重排:如果每一列表示一个文档,那么对行进行重排;如果每一行表示一个文档,那么对列进行重排。假设每一列表示一个文档,对行进行重排后,取每一列第一个取值为1的元素对应的行号,作为该列对应文档在此次随机排列后的最小哈希值。重复上述过程
3. 建立分段索引,提取潜在相似文本对:将
当分段数足够大时,两个相似文本有极大概率在某一段取值一样,极端情况下,每一个元素作为一段,两个重复的文本,必然每一段取值都一样。因此,可以将同一索引值下的文本两两组合,作为潜在相似文本对。
4. 计算潜在相似文本对的相似性:两个Minhash向量对应位置元素相等的比例,即为这两个文本的相似度
(二)算法分析
1. 两个集合最小哈希值相等的概率等于两个集合的Jaccard相似度,即:
关于这个结论,非严格的论证如下:
由于
2. 当分段数足够大时,两个相似文本有极大概率在某一段取值一样。
假设将
令
3. 最小哈希方案
方案一是每次重排后,取第一个非零元素下标,重复
方案二是一次重排后,随机取
方案二比方案一的计算效率更高。
三、Simhash算法
KShingle算法和Minhash算法都需要生成一个庞大的Shingle词组库,当文本数量和文本长度很大时,计算这个词组库需要耗费巨大的时间和空间资源,且各文档的特征向量计算都依赖这个共同的词组库,因此计算特征向量的过程很难完全地并行化。Simhash算法仅基于文档中包含的词汇生成文档的特征向量,极大提高了计算效率。
(一)算法步骤
1. 预处理:读取文档数据集,根据需求,对文档中的标点、空白、中英文、简繁体等字符进行清洗和整理。
2. 分词后计算词汇哈希:对文档进行分词处理,统计各词汇的词频,以字典形式表示即为
哈希函数,将词汇从字符串形式转换为长度为
3. 计算Simhash特征向量:将词汇哈希中的
4. 建立分段索引,提取潜在相似文本对:Simhash采用Hamming距离衡量文本相似度,Hamming距离小于等于
根据抽屉原理,若将Simhash分为
。与Minhash类似,可以将同一索引值下的文本两两组合,作为潜在相似文本对。
5. 计算潜在相似文本对的Hamming距离:两个Simhash向量按位异或之后取值为1的个数即为两个文本的距离
(二)算法分析
1. 哈希函数
这里的哈希函数是指将词汇哈希为01向量的函数。个人认为这个哈希函数应该具有两个特征:
一是哈希结果中的0和1尽量均匀地分布,否则在分段索引时,很容易造成某一段文本数量爆炸的情况。例如将词汇哈希为64维01向量时,采用高(低)位补零的策略,就会导致分段后高(低)位全为0的这个索引下有几乎全量的文本,无法达到缩小潜在相似文本范围的目的。
二是哈希结果最好能使相似词汇具有相近的哈希值,如果能做到那也是一个局部敏感哈希。
2. Simhash准确率低于Minhash
一是Simhash对文本进行分词处理并统计词频,可以认为是一个词袋模型,并没有考虑词汇的先后顺序。Minhash采用滑动窗口提取词组,加入了词汇次序信息。
二是Simhash对词汇特征向量按列求和再做符号映射,丢失了文本特征信息。
四、KSentence算法
KSentence算法基于一个朴素的假设:两个重复文本中,最长的K个句子应该是完全一样的。
(一)算法步骤
1.预处理:读取文档数据集,根据需求,对文档中的中英文、简繁体等字符进行清洗和整理。
2.提取语句:根据标点、换行符等划分语句,统计语句长度
3.计算指纹:拼接最长的
4.文本去重:根据文本指纹,过滤重复文本
(二)算法分析
关于KSentence算法的几点注解如下:
1.KSentence算法的假设很严格,实验结果显示,KSentence算法准确率较高,召回率低于Minhash和Simhash。
2.算法实现简单,计算效率高,很容易并行化。算法对于具有固定格式的模板类文档具有很好的辨识能力,但对于抄袭后进行部分修改的文本识别度较低。
五、总结
1. 算法步骤
2. 算法评估
实验对比Minhash、Simhash、KSentence的性能,结果如下:
运行速度:KSentence > Simhash > Minhash
准确率:KSentence > Minhash > Simhash
召回率:Simhash > Minhash > KSentence
工程应用上,海量文本用Simhash,短文本用Minhash,追求速度用KSentence。
路由器距离向量算法计算举例_文本去重算法:Minhash/Simhash/Klongsent相关推荐
- minhash算法检索相似文本_文本去重算法:Minhash/Simhash/Klongsent
日前接到一个对名言警句这种短文本进行去重的小任务,下图是几个重复文本的示例: 很直观的结论就是重复度越高的文本,具有更多重复的词汇.一个最直接的去重思路可以描述为:将文本进行分词处理,统计各文本词汇的 ...
- 路由器距离向量算法计算举例_距离向量路由选择是什么 距离向量路由选择原理介绍【图文】...
什么是距离向量路由选择 距离向量路由选择是一种由路由协议使用的算法类型,用于在互联网络上发现路由.主要的距离向量路由选择算法是Bellman-Ford算法.另一类路由算法是链路状态法. 为了发现最短路 ...
- 路由器距离向量算法计算举例_路由器基本原理是什么 路由器基本发展情况介绍【图文】...
PLC路由器原理和ARR 路由器基本原理 要实现网络中通信节点彼此之间的通信,首先必须给每个节点分配一个唯一的IP地址.路由器应该至少有两个网络端口,分别连接LAN或者WAN子网上,每个端口必须具有一 ...
- ssim算法计算图片_图像质量评估算法 SSIM(结构相似性)
SSIM的全称为structural similarity index,即为结构相似性,是一种衡量两幅图像相似度的指标.该指标首先由德州大学奥斯丁分校的图像和视频工程实验室(Laboratory fo ...
- python协同过滤算法计算时间_协同过滤算法_coding - SegmentFault 思否
协作型过滤 协同过滤是利用集体智慧的一个典型方法.要理解什么是协同过滤 (Collaborative Filtering, 简称CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部 ...
- 机器学习-无监督学习-聚类:聚类方法(二)--- 基于密度的聚类算法【DBSCAN文本聚类算法,密度最大值文本聚类算法】
密度聚类方法的指导思想是,只要样本点的密度大于某阀值,则将该样本添加到最近的簇中. 基于密度的聚类算法假设聚类结构能够通过样本分布的紧密程度确定,以数据集在空间分布上的稠密程度为依据进行聚类,即只要一 ...
- 人工鱼群算法python代码_人工鱼群算法python_鱼群算法 - Brillou的个人空间 - OSCHINA - 中文开源技术交流社区......
本算法是参照李晓磊博士的论文实现的,详细的算法原理可阅读<一种新型的智能优化方法_人工鱼群算法_李晓磊> 算法基于鱼群的生存行为:在一片水域中,鱼存在的数目最多的地方就是本水域中富含营养物 ...
- 算法——计算的灵魂(《算法》一本写了近40年的书)
计算机语言从BASIC到C\C++.Java,再到后来的PHP.Ruby等,你方唱罢我登场,让人眼花缭乱.而算法确是计算机科学的核心,万变不离其宗! 算法能为我们节约非常多的资源,甚至能够完成一些不可 ...
- 数据结构排序算法实验报告_[数据结构与算法系列]排序算法(二)
我的上一篇文章向大家介绍了排序算法中的冒泡排序.插入排序和选择排序.它们都是平均时间复杂度为 O(n^2) 的排序算法,同时还为大家讲解了什么是原地排序和什么是排序的稳定性.下图是这三种算法的比较,不 ...
最新文章
- 有三AILab成立 | 寻找合适的你
- Python基础教程:赋值、深拷贝与浅拷贝(内存地址)
- 【转载】MyBatis报错Invalid bound statement (not found)
- deactivate_sending在创建新的table entry时的作用
- java encode in ansi_Java应用中的编码问题
- pytorch —— 池化、线性、激活函数层
- python测试c语言代码_numpy C语言源代码调试(一)
- android 原生开发 3d地图 下载_arcgis api 3.x for js 入门开发系列二不同地图服务展示(附源码下载)...
- MySQL 资源大全
- primefaces教程_Primefaces BlockUI组件示例教程
- C++ GUID和string转化函数【转载】
- kali netstat使用教程
- uva 10041 - Vito's Family
- android的数据存储(3)(LitePal)
- 可转债量化系列之二:估值择时策略初探
- python基于pygame实现跨年烟花效果
- 当电摇家族进入C++(二)
- “众包2.0”版的海尔怎么玩?_第1页_福布斯中文网
- “杭州创业大街”一年沉浮路
- 阿里云服务器漏洞修复
热门文章
- hdu_1285_确定比赛名次_201312081335
- SQL Server 2005:面向信息管理的全新平台
- Stanford机器学习---第十一讲.异常检测
- win7 64位 VS2010调试提示“ORA-12154: TNS: 无法解析指定的连接标识符”的解决方法
- VisualStudio卸载后无法再次安装的解决方法
- 微众银行在联邦推荐算法上的探索及应用(文末附PPT下载链接)
- 【报告分享】2019双11洞察报告资料包(含6大权威报告下载链接)
- 什么是hypernetworks? hypernetworks简单介绍
- NLP简报(Issue#9)
- android应用内存不断膨胀,在android中膨胀简单的xml布局时出现内存不...