摘    在搜索引擎的检索结果页面中,用户经常会得到内容相似的重复页面,它们中大多是由于网站之间转载造成的。为提高检索效率和用户满意度,提出一种基于特征向量的大规模中文近似网页检测算法DDW(Detect near-Duplicate WebPages )。试验证明,比起其他网页去重算法(I-Match),DDW具有很好的抵抗噪声的能力及近似线性的时间和空间复杂度,在大规模实验中获得良好测试结果。

关键词  网页去重算法   特征向量   近似网页   支持向量机

第一部分介绍现有去重算法;第二部分论述DDW算法设计;第三部分介绍我们的试验结果和对结果的分析;第四部分是结论。

现有近似网页检测算法介绍

我们大致可以把文本复制检测算法分为两类:基于语法的方法(基于Shingle的方法)和基于语义的方法(基于Term的方法)。

1.1  基于Shingle的方法

Shingle是指文档中一组临近的有序词。基于shingle的算法要求从文档中选取一系列shingle,然后把shingle映射到Hash表中,一个shingle对应一个Hash值,最后统计Hash表中相同的shingle数目或者比率,作为判断文本相似度依据。参考文献[5-10]都是常用的基于single的算法。为实现大规模文档的检测,各研究者采用了不同的采样策略,用于减少参加比较的shingle的数量。

Heintze[8]选取Hash值最小的N个shingle, 并去除频繁出现的shingles。Bharat[6]选取Hash值为25倍数的shingle,每篇文档最多选取400个shingle。Broder[7]将多个single联合起来组成一个supershingle并通过比较supershingle的Hash值计算文档的相似度。尽管supershingle 算法计算量更小,但Broder发现它不适用于短小文档的检测。Fetterly[13]把连续出现的5个词视为一个shingle,每篇文档采样 84个shingle,然后将这些shingle组合为6个supershingle; 具有2个相同supershingles的文档被视为内容相似的文档。吴平博等[9]利用标点符号多数出现在网页文本中的特点,以句号两边各五个汉字作为single来唯一地标识网页。

对于各种基于shingle的算法,Ye[10]就其参数选择进行了系统研究。

1.2  基于Term的方法

基于Term的方法[11-14]采用单个词条作为计算的基本单元。通过计算文档特征向量的余弦值来获得文档的相似度,而不考虑词条出现的位置和顺序。由于采用了许多特征提取(尤其是特征向量的选择)技术,使得基于Term的方法比基于Shingle的算法更为复杂。

Chowdhury 的I-Match[11]算法通过计算逆文本频率指数(IDF :inverse document frequency)来确定选择哪些词作为特征向量。IDF = log (N/n),其中N 为文档集中文档的数目,n 为包含该关键词的文档的数目。I-Match算法正是基于“在文档集中频繁出现的词并不会增加文档的语义信息”[13]的推断,去掉IDF值较小的词,从而获得了更好的文档表示。经过过滤的关键词按降序排列构成文档的“指纹”(fingerprint),指纹相同的文档被视为近似文档。最坏情况下(所有文档都是近似文档),I-Match算法的时间复杂度为O(nlogn)。

基于特征向量的去重算法设计

本文提出的基于特征向量的大规模中文网页去重算法,采用类似I-Match的关键词向量提取方法,但同时采用关键词的位置和权重信息构建特征向量来进行文档表示。不计算特征向量的hash值而是利用分类信息和检索系统来进行文档相似度计算和排重。具体设计方案如下:

2.1  网页的文本提取

网页中包含的广告信息、链接到其他网页的导航信息等,都会对该网页内容检索产生干扰。因此,在对网页的内容建立索引之前,我们需要对其中的有效正文信息进行了提取。采用的是我们另一项课题的研究成果[15]:

1)根据网页的视觉信息将文章分块,并人工标注各个内容块是否为有效信息块。

2)提取内容块的空间位置、视觉特征、语言信息及结构特征。

3)提取文章标题,使用潜语义分析方法计算内容块与文章标题的潜在语义相关度。

4)将以上信息构成内容块的特征向量。

5)使用人工标注的内容块做六折交叉法,训练SVM(Support Vector Machine)分类器。

6)使用训练好的SVM分类器判断新的内容块是否为有效信息块;提取有效信息块中的文本作为有效的正文信息。

2.2  文本的表示

迄今为止,文本的表示主要还是采用向量空间模型(VSM)。在该模型中,文档空间被看作是由一组正交向量张成的向量空间。若该空间的维数为n,则每个文档d可被表示为一个特征向量Vd=(ω1,ω2,…,ω1,…,ωn),其中ωi表示特征向量中第i个特征项的权重。

特征项的选取即文本特征的提取过程。目前常用的特征选择策略有:文档频数(Document Frequency)、信息增益(Information Gain)和互信息(Mutual In formation)等特征选择方法。

从中文信息处理角度来看,比较好的方式是利用意义较大的多字词来表示文档的内容,将文本分词后,将这些词的权重作为向量的分量来表示文本。但由于中文分词的词典规模一般在5万到25万词条之间[16]。也就是说中文的特征空间维数比英文高很多。在相同规模训练语料条件下,更高的维数必然导致更多的低频词出现。在这样的情况下使用IG和MI进行特征抽取,由于它们对低频词的倚重,必定将会有更多的低频词作为特征使用。从而导致了特征向量抽取的不准确。文献[17]的试验结果表明在中文特征向量问题上它们的表现远远不及TFIDF。

因此,我们在系统中采用了一种使用比较普遍的TF-IDF公式来计算各个分量的权重!

2.3  索引构建

为了对特征向量进行快速访问,必须对特征项建立索引机制。倒排索引具有实现相对简单、查询速度快、容易支持同义词查询等优点。本文对特征项建立倒排索引文件。在我们的系统中有文章类别信息的支持,可以针对不同类别建立特征项索引,以提高检索效率。

2.4  特征向量检索

由于网页噪声的影响,重复网页的文本特征向量有时不完全相同,精确匹配会导致匹配失败。但由于特征向量是最能代表一篇文章的一组词,因此只用检索排在前边的n维特征向量并计算其相似度,即可基本确定两篇文章是否是近似文档。在得出匹配检索后,采用余弦公式(3)进行相似度计算。

若sim(d1,d2)>阈值可以推断d1,d2是近似网页。

3  实验结果及对比分析

结论

转自:http://www.cnindex.fudan.edu.cn/zgsy/2009n1/caoyujuan.htm

一个基于特征向量的近似网页去重算法——term用SVM人工提取训练,基于term的特征向量,倒排索引查询相似文档,同时利用cos计算相似度的更多相关文章

  1. 高效网页去重算法-SimHash

    记得以前有人问过我,网页去重算法有哪些,我不假思索的说出了余弦向量相似度匹配,但如果是数十亿级别的网页去重呢?这下糟糕了,因为每两个网页都需要计算一次向量内积,查重效率太低了!我当时就想:论查找效率肯 ...

  2. 网页去重之Simhash算法

    Simhash算法是Google应用在网页去重中的一个常用算法,在开始讲解Simhash之前,先了解——什么是网页去重?为什么要进行网页去重?如何进行网页去重,其基本框架是什么?   网页去重,顾名思 ...

  3. 基于 vite2 + Vue3 写一个在线帮助文档工具

    提起帮助文档,想必大家都会想到 VuePress等,我也体验了一下,但是感觉和我的思路不太一样,我希望的是那种可以直接在线编辑文档,然后无需编译就可以直接发布的方式,另外可以在线写(修改)代码并且运行 ...

  4. 学习排序算法(一):单文档方法 Pointwise

    学习排序算法(一):单文档方法 Pointwise 1. 基本思想 这样的方法主要是将搜索结果的文档变为特征向量,然后将排序问题转化成了机器学习中的常规的分类问题,并且是个多类分类问题. 2. 方法流 ...

  5. 基于word2vec的文档向量模型的应用

    基于word2vec的文档向量模型的应用 word2vec的原理以及训练过程具体细节就不介绍了,推荐两篇文档:<word2vec parameter learning explained> ...

  6. 算法提高 新建Microsoft Word文档

      算法提高 新建Microsoft Word文档   时间限制:1.0s   内存限制:256.0MB      问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:“你出 ...

  7. Kmeans文档聚类算法实现之python

    实现文档聚类的总体思想: 将每个文档的关键词提取,形成一个关键词集合N: 将每个文档向量化,可以参看计算余弦相似度那一章: 给定K个聚类中心,使用Kmeans算法处理向量: 分析每个聚类中心的相关文档 ...

  8. Java实现 蓝桥杯 算法提高 新建Microsoft world文档

    算法提高 新建Microsoft Word文档 时间限制:1.0s 内存限制:256.0MB 问题描述 L正在出题,新建了一个word文档,想不好取什么名字,身旁一人惊问:"你出的题目叫&l ...

  9. 【实践】如何利用tensorflow的object_detection api开源框架训练基于自己数据集的模型(Windows10系统)

    如何利用tensorflow的object_detection api开源框架训练基于自己数据集的模型(Windows10系统) 一.环境配置 1. Python3.7.x(注:我用的是3.7.3.安 ...

随机推荐

  1. CentOS 6.9上安装mysql-5.6.37

    CentOS 6.9上安装mysql-5.6.37 1.准备数据存放的文件系统 新建一个逻辑卷,并将其挂载至特定目录即可.这里不再给出过程. 这里假设其逻辑卷的挂载目录为/data,而后需要创建/da ...

  2. 【转】python测试开发面试题

    出处:http://my.oschina.net/u/1433482/blog/467954?fromerr=WrfxL2Kw 试卷时间 60分钟,请不要在试卷上作答,用A4纸做答题纸作答. 一,中文 ...

  3. Ajax跨域请求,无法传递及接收cookie信息解决方案

    最近的项目中涉及到了应用ajax请求后台系统登录,身份认证失败,经过不断的调试终于找到解决方案. 应用场景: 项目测试环境:前端应用HTML,js,jQuery ajax请求,部署在Apache服务器 ...

  4. 【BZOJ4358】permu kd-tree

    [BZOJ4358]permu Description 给出一个长度为n的排列P(P1,P2,...Pn),以及m个询问.每次询问某个区间[l,r]中,最长的值域连续段长度. Input 第一行两个整 ...

  5. ArcGIS API for javascript Bookmarks(书签)示例2

    1.运行效果图 说明:这篇博文介绍的书签位于地图之上 有关博文中引用的API文件 怎么iis上部署,请参考我前面的博文 2.HTML代码 <!DOCTYPE html> <html ...

  6. GCD多线程在swift中的变化

    1.异步线程加载主线程刷新 DispatchQueue.global().async { // TODO:执行异步线程网络请求 DispatchQueue.main.async(execute: { ...

  7. lua调试小技巧

    lua中,如果碰到某个属性值改变了,但是修改的地方又特别多,调试就特别麻烦了,有个小技巧,直接贴代码 local m = {    __index = function( t, k )         ...

  8. 我的Android进阶之旅------>Android关于Log的一个简单封装

    android.util.Log类,可以方便地用于在编码调试过程中打印日志.但是在发布后的产品中,如果有太多的日志打印,则会严重地影响性能.对android.util.Log类做一个简单的封装,当产品 ...

  9. cocos2d-x3.6 生成带类图的离线文档

    我的博客:http://blog.csdn.net/dawn_moon cocos2d-x的官网有点慢,并且最新3.6的在线API文档居然没有了类图,不知道什么原因,之前2.2.6都是有的. 只是能够 ...

  10. Jquery禁用所有checkbox

    $("input[type=checkbox]").each(function(){ $(this).attr("disabled",false);});