文本相似在问答系统中有很重要的应用,如基于知识的问答系统(Knowledge-based QA),基于文档的问答系统(Documen-based QA),以及基于FAQ的问答系统(Community-QA)等。像 对于问题的内容,需要进行相似度匹配,从而选择出与问题最接近,同时最合理的答案。本节介绍 基于simhash相似度。
在之前的两篇博文分别介绍了常用的hash方法([Data Structure & Algorithm] Hash那点事儿)以及局部敏感hash算法([Algorithm] 局部敏感哈希算法(Locality Sensitive Hashing)),本文介绍的SimHash是一种局部敏感hash,它也是Google公司进行海量网页去重使用的主要算法。
传统的Hash算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上仅相当于伪随机数产生算法。传统的hash算法产生的两个签名,如果原始内容在一定概率下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节,所产生的签名也很可能差别很大。所以传统的Hash是无法在签名的维度上来衡量原内容的相似度,而SimHash本身属于一种局部敏感哈希算法,它产生的hash签名在一定程度上可以表征原内容的相似度。
显然这里是一个两层循环,平方的时间复杂度,如果列表有1万个元素,这就变成了1亿次循环(平方就是这么可怕)!
原文链接:海量数据文本相似度解决方式SimHash+分词方法+基于内容推荐算法 – 约翰史密斯 – CSDN博客
一. Simhash 计算文档相似度的算法, 比如用在搜索引擎的爬虫系统中,收录重复的网页是毫无意义的,只会造成存储和计算资源的浪费。有时候我们需要处理类似的文档,比如新闻,很多不同新闻网的新闻内容十分相近,标题略有相似。如此问题,便可以应用Simhash 文档相似度算法,查看两篇文档相似程度,删去相似度高的web文档。
simhash算法是google发明的,专门用于海量文本去重的需求,所以在这里记录一下simhash工程化落地问题。
一直想写个总结来回顾simhash,一直没抽出时间,现在还是好好写写总结一下。作者随笔,废话有点多,不喜勿喷,欢迎指教。
提升产品体验,节省用户感知度。——想想,如果看到一堆相似性很高的新闻,对于用户的留存会有很大的影响。
最近和相似度杠上了,今天和大家分享一下周末研究的东西:SimHash。记得看到最后哟。
如果搜索文档有很多重复的文本,比如一些文档是转载的其他的文档,只是布局不同,那么就需要把重复的文档去掉,一方面节省存储空间,一方面节省搜索时间,当然搜索质量也会提高。 simhash是google用来处理海量文本去重的算法。
对于前两点需求,基本上在线去重就可以解决。后两种需求,需要更仔细严谨的分析算法(例如建立初始语料库训练word2vec进行进一步主成分分析等等),一般是离线方式实现。这个在之后会详细讲解。
传统的 hash 算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法。产生的两个签名,如果相等,说明原始内容在一定概 率 下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节,所产生的签名也很可能差别极大。从这个意义 上来 说,要设计一个 hash 算法,对相似的内容产生的签名也相近,是更为艰难的任务,因为它的签名值除了提供原始内容是否相等的信息外,还能额外提供不相等的 原始内容的差异程度的信息。 而 Google 的 simhash 算法产生的签名,可以满足上述要求。出人意料,这个算法并不深奥,其思想是非常清澈美妙的。
在数据分析和挖掘领域,我们经常需要知道个体间差异大小,从而计算个体相似性。如今互联网内容爆发时代,针对海量文本的相似识别拥有极大需求。本文将通过识别两段文本是否相似,来看看常见的相似算法,及线上落地方案。
对于文本去重来说,我个人处理上会从数据量、文本特征、文本长度(短文本、长文本)几个方向考虑。 常见的去重任务,如网页去重,帖子去重,评论去重等等。 好的去重任务是不仅比对文本的相似性,还要比对语义上的相似性。
传统的hash 算法只负责将原始内容尽量均匀随机地映射为一个签名值,原理上相当于伪随机数产生算法。产生的两个签名,如果相等,说明原始内容在一定概率 下是相等的;如果不相等,除了说明原始内容不相等外,不再提供任何信息,因为即使原始内容只相差一个字节,所产生的签名也很可能差别极大。从这个意义上来 说,要设计一个 hash 算法,对相似的内容产生的签名也相近,是更为艰难的任务,因为它的签名值除了提供原始内容是否相等的信息外,还能额外提供不相等的 原始内容的差异程度的信息。
这是一个相似匹配的问题(文本相似匹配基础→ 词频与余弦相似度)。但是,亿级数据库,用传统的相似度计算方法太慢了,我们需要一个文本查询方法,可以快速的把一段文本的相似文本查出来。
在前一篇文章 《海量数据相似度计算之simhash和海明距离》 介绍了simhash的原理,大家应该感觉到了算法的魅力。但是随着业务的增长 simhash的数据也会暴增,如果一天100w,10天就1000w了。我们如果插入一条数据就要去比较1000w次的simhash,计算量还是蛮大,普通PC 比较1000w次海明距离需要 300ms ,和5000w数据比较需要1.8 s。看起来相似度计算不是很慢,还在秒级别。给大家算一笔账就知道了:
simhash是Google用来处理海量文本去重的算法。 Google出品,你懂的。 simhash最牛逼的一点就是将一个文档,最后转换成一个64位的字节,暂且称之为特征字,然后判断重复只需要判断他们
在前一篇文章中,简单的以为可以将计算总数的部分去掉,但是如果去掉了总数的计算,就没法计算每个文章的热度(就是相似文章的数量),这点客户没法接受。
通过 采集系统 我们采集了大量文本数据,但是文本中有很多重复数据影响我们对于结果的分析。分析前我们需要对这些数据去除重复,如何选择和设计文本的去重算法?常见的有余弦夹角算法、欧式距离、Jaccard相似度、最长公共子串、编辑距离等。这些算法对于待比较的文本数据不多时还比较好用,如果我们的爬虫每天采集的数据以千万计算,我们如何对于这些海量千万级的数据进行高效的合并去重。最简单的做法是拿着待比较的文本和数据库中所有的文本比较一遍如果是重复的数据就标示为重复。看起来很简单,我们来做个测试,就拿最简单的两个数据使用Apache提供的 Levenshtein for 循环100w次计算这两个数据的相似度。代码结果如下:
海量高维数据查找与某个数据最相似的一个或者多个数据。与其它基于Tree的数据结构,诸如KD-Tree、SR-Tree相比,它较好地克服了Curse of Dimension,能够将KNN的时间复杂度缩减到sub-linear。LSH多被用于文本、多媒体(图像、音频)的相似性判断。
本文算是《日久见人心:论建模用户长期兴趣的几种姿势》一文的后续。主要是近期读了美团2022年的新论文《Sampling Is All You Need on Modeling Long-Term User Behaviors for CTR Prediction》有感而发。结合阿里之前ETA的工作,我感到在用户长行为序列建模这一领域,SimHash有望取代Attention,成为新的主力建模工具。本文通过梳理长行为序列建模的发展脉络,对比阿里ETA与美团的SDIM在利用SimHash时的异同,帮助读者快速了解这个建模用户长期序列的新范式。
在爬取网页数据时,避免对同一URL发起重复的请求,这样可以减少不必要的网络流量和服务器压力,提高爬虫的效率,在将爬取到的数据存储到数据库或其他存储系统之前,去除重复的数据条目,确保数据的唯一性和准确性。,它不仅关系到数据的质量,也影响着爬虫的性能和效率。
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/51068097
之前我们对下载的url地址进行了去重操作,避免同样的url下载多次。其实不光url需要去重,我们对下载的内容也需要去重。
本文介绍了如何使用Python和OpenCV库实现图像的局部敏感哈希(LSH)算法,并通过具体实验展示了该算法的有效性。同时,本文还探讨了如何将LSH算法应用于海量数据查找中,提供了一种高效的海量数据查找方法。
文章主要讲述了如何通过自然语言处理技术,如词向量、文本分类、情感分析等,来对文本进行相似性分析。同时,文章也介绍了一些具体的应用场景,如搜索引擎、文本分类、情感分析等。
在大多数情况下,大量的重复文本一般不会是什么好事情,比如互相抄袭的新闻,群发的垃圾短信,铺天盖地的广告文案等,这些都会造成网络内容的同质化并加重数据库的存储负担,更糟糕的是降低了文本内容的质量。因此需要一种准确而高效率的文本去重算法。而最朴素的做法就是将所有文本进行两两比较,简单易理解,最符合人类的直觉,对于少量文本来说,实现起来也很方便,但是对于海量文本来说,这明显是行不通的,因为它的时间复杂度是,针对亿级别的文本去重时,时间消耗可能就要以年为单位,此路不通。
众所周知,目前微信公众号是最具商业价值的写作平台,这与它优秀的原创保护机制密不可分,如果你想将其他公众号上的文章标为原创,微信会给出类似如下的信息告诉你未通过原创校验逻辑。
SimHash是什么 SimHash是Google在2007年发表的论文《Detecting Near-Duplicates for Web Crawling 》中提到的一种指纹生成算法或者叫指纹提取算法,被Google广泛应用在亿级的网页去重的Job中,作为locality sensitive hash(局部敏感哈希)的一种,其主要思想是降维,什么是降维? 举个通俗点的例子,一篇若干数量的文本内容,经过simhash降维后,可能仅仅得到一个长度为32或64位的二进制由01组成的字符串,这一点非常相似我们的
解释一下图片:这里feature可以指一篇文档分词后的某个词,即将文档中的某个词作为一个特征。weight是这个词的权重,这里可以是这个词在这个句子中出现的次数。
做舆情系统,爬虫采集了很多文章,这些文章都保存在了ES上,当用户看到一篇文章的时候,需要将这篇文章的相似文章都找出来。ES的底层是一个搜索引擎,查找相似文章没问题,不过文章都比较长,直接基于整个文章去计算相似性,恐怕不太妙。
马克·吐温曾经说过,所谓经典小说,就是指很多人希望读过,但很少人真正花时间去读的小说。这种说法同样适用于“经典”的计算机书籍。
机械相似性代表着,两个文本内容上的相关程度,比如“你好吗”和“你好”的相似性,纯粹代表着内容上字符是否完全共现,应用场景在:文章去重;
今天给大家带来的是美团在CIKM2022上中稿的论文,重点关注于CTR预估中的超长用户行为序列建模。与SIM、ETA这类基于“检索”的建模范式不同,论文提出了一种简单而且有效的基于“采样”的建模范式。基于采样多个hash function和SimHash,弥补了基于“检索”的建模范式中信息缺失以及效果和效率难以平衡的缺点,极大降低计算复杂度的同时实现了在超长行为序列下类似target-attention的建模效果,一起来看一下。
在我们舆情分析系统里,有一个功能是文章搜索,返回相似性去重后的文章,这里比较耗时的是一个相似性去重的功能,就是在返回的数据集里将相似的文章去掉。
上一文中从0到1,了解NLP中的文本相似度说到了simhash,结尾的时候,我们提到其主要适用于在海量数据比较时候高效率,那么具体是如何实现的呢?
某些网站为了实现友好的用户交互,提供了一种自定义的错误页面,而不是显示一个大大的404
本文将从预备知识的概念开始介绍,从距离名词,到文本分词,相似度算法。
如果你恰好是一个编程新手,并纠结于该如何开始 GitHub 开源项目的学习与研究,这本手册就恰恰能很好解决这一难题,它的最大亮点就在于 GitHub 入门。
项目地址:https://github.com/Jonekaka/javaweb-crawler-1-62
在业务中我们经常会遇到查重的需求,例如给定一个文本字符串,判断在已有的文档中,是否存在与其相似的。
文本相似度度量就是衡量两个文本相似度的算法。主要包括两个步骤:将文本表示为向量(文本表示);衡量两个向量的相似度(相似度度量)。
在上一期中,我们介绍了API资产的识别技术,探讨了API资产的定义以及各类风格API的识别技术。在本期中,我们将继续介绍API资产识别中的API聚合技术。
CTR预估中,我们可以利用用户行为序列来捕捉用户不断变化的偏好。但是,历史序列往往具有严重的同源性和稀缺性。本文提出了一种数据驱动的方法来丰富用户表征。将用户画像和召回的item看作是跨阶段框架内的两个理想数据源,分别包括u2u(用户对用户)和i2i(item对item)。本文提出了一种新的体系结构,称为召回增强排序(RAR),由两个子模块组成,它们协同地从大量相似的用户和召回item中收集信息,从而产生丰富的用户表征。
本文介绍了图像相似度检测技术的背景、原理、实现方法和关键点。首先介绍了图像相似度检测的意义,然后阐述了基于分块、特征提取、哈希、深度学习的方法,以及实现过程中需要注意的关键点。最后,总结了当前图像处理领域的发展趋势,包括特征提取、哈希、深度学习等方面的应用,并提出了改进点。
手机用户的普遍如何快速的应答与高质量的沟通是智能客服的关键问题。 采用合理的分层结构流程与先进的中间组件(例如,语音识别、语音合成、智能对话、知识图谱等技术组建),建立客服热线自动语音应答系统。缓解人工忙线,客户问题简单,如法充分利用资源的情况。 借用AI相关的技术,建立稳定、有效的智能语音应答系统的研究目标。
项目地址,阅读原文可以直达,欢迎参与和Star: https://github.com/RandyPen/TextCluster 这个项目的作者是AINLP交流群里的昭鸣同学,该项目开源了一个短文本聚类工具,内存友好,速度不错,还不用尝试隐变量个数,欢迎使用。
领取专属 10元无门槛券
手把手带您无忧上云