百度搜索引擎核心算法

藏书人摘要:百度搜索引擎核心算法百度的操作系统:bsd。百度的WEB服务器系统:Bws。百度的数据库系统,没有使用数据库,全是自己的数据结构。百度的文件系统,BFs?百度的外存存储系统,????百度的分布式搜索引擎算法,????若干个小搜索系统组成,所以有非常好...

百度搜索引擎核心算法

百度的操作系统:bsd。
百度的WEB服务器系统:Bws。
百度的数据库系统,没有使用数据库,全是自己的数据结构。
百度的文件系统,BFs?
百度的外存存储系统,????
百度的分布式搜索引擎算法,????若干个小搜索系统组成,所以有非常好的扩展性和稳定性,而非关键词索引的分布式。
百度中文分词 分词表 词表,收集了一些。


看来还是蛮多人搜索“算法”相关关键词的,可是,你知道了算法,并且实现了,程序写出来了,又怎么样呢,难道还能打造出一个象百度一样的网站,难啊,天时地利人和,现在会搞搜索的人多了,但不再有那么的机遇,现在搞搜索的还少吗,传统搜索,垂直搜索,还有那么多提供搜索技术的,上过大学的应该都知道搜索的算法了。

如果你只是想搞个站内或小范围的搜索,大可不必自己写,用现成的,硬盘搜索+spideryes 打造属于自己的搜索引擎!

看看百度如何更新

BSD (Berkeley Software Distribution,伯克利软件套件)是Unix的衍生系统,1970年代由伯克利加州大学开创。BSD用来代表由此派生出的各种套件集合。

BSD常被当作工作站级别的Unix系统,这得归功于BSD执照非常地宽松,许多1980年代成立的计算机公司,不少都从BSD中获益,比较著名的例子如DEC的Ultrix,以及SUN公司的SunOS。1990年代,BSD很大程度上被System V4.x版以及OSF/1系统所取代,但其开源版本被采用,促进了因特网的开发。




目录 [隐藏]
1 历史
1.1 PDP-11开始
1.2 VAX 版本
1.3 BSD版本
1.4 Net/2以及法律问题
1.5 4.4BSD及其后裔
2 技术
3 BSD 家族
4 结构
5 BSD的衍生产品
6 外部链接

[编辑]历史
[编辑]PDP-11开始
最初的Unix套件源自1970年代的贝尔实验室,操作系统中包含源码,这样研究人员以及大学都可以可以参与修改扩充。1974年,第一个伯克利[1]的Unix系统被安装在PDP-11机器上,计算机科学系而后将其用作扩展研究。

其他大学开始对伯克利的软件感兴趣,在1977年,伯克利的研究生Bill Joy将程序整理到磁带上,作为first Berkeley Software Distribution(1BSD)发行。1BSD被作为第六版Unix系列,而不是单独的操作系统。主要程序包括Pascal编译器,以及Joy的ex行编辑器。

Second Berkeley Software Distribution(2BSD)于1978年发布,除了对1BSD中的软件进行升级,还包括了Joy写的两个新程序:vi文本编辑器(ex的可视版本),以及C Shell。这两个新添的程序,在Unix系统中至今仍被使用。

2BSD以后的版本逐渐从PDP-11结构向VAX计算机移植。最新的2.11BSD于1992年发布,更新维护一直持续到2003年。

[编辑]VAX 版本
1978年,伯克利安装了第一台VAX计算机,但将Unix移植到VAX构架的UNIX/32V,并没有利用VAX虚拟内存的能力。伯克利的学生重写了32V的大部分内核,以实现虚拟内存的支持。1979年,3BSD诞生了,这个新系统完整包括了一个新内核、从2BSD移植到VAX的工具,还有32V原来的工具。

3BSD的成功使得Defense Advanced Research Projects Agency(DARPA,美国国防部高级研究规划署)决定资助伯克利的Computer Systems Research Group (CSRG,计算机系统研究组),以开发一个Unix标准平台,以供DARPA未来的研究。1980年10月,CSRG发布了4BSD,该版本对3BSD有许多改进。

相较于VAX机器的主流系统VMS,用户对BSD时有批评,1981年6月,终于发布了4.1BSD 。Bill Joy大幅度提高了4.1BSD内核的性能,可以跟VMS在多个平台上媲美。为了避免与AT&T的UNIX System V(UNIX第五版)混淆,这个版本没有取名为5BSD。

以后4.2BSD历经两年,实现了多项重大改进后才得以问世。之前有三个中间版本相继推出:4.1a引入了修改版的BBN预试中TCP/IP;4.1b引入了由Marshall Kirk McKusick实现的新型Berkeley Fast File System(FFS);4.1c是4.2BSD开发最后几个月的过渡版。

1983年8月,4.2BSD正式发布。这是1982年Bill Joy离开前去创建Sun公司后的第一个版本,此后Mike Karels和Marshall Kirk McKusick一直负责领导该项目。值得一提的是,这次BSD小恶魔正式出场,最初是McKusick的画作,出现在打印好的文档封面上,由USENIX发行。

[编辑]BSD版本
1986年6月,4.3 BSD发布。该版本主要是将4.2BSD的许多新贡献作性能上的提高,原来的4.1BSD没有很好地协调。在该版本之前,BSD的TCP/IP实现已经跟BBN的官方实现有较大差异。经过数月测试后,DARPA认为4.2BSD更合适,所以在4.3BSD中作了保留。(参见en:History of the Internet)

4.3BSD后,BSD逐渐抛开老式的VAX平台。Computer Consoles有限公司开发的Power 6/32平台(代号为"Tahoe"),当时看来大有可为,但不久即被他们的开发员所遗弃。然后,1988年6月移植的4.3BSD-Tahoe却表现不俗,BSD将依赖于机器跟不依赖于机器的代码分离,为未来系统的可移植性打下了良好的基础。

到此为止,所有的BSD版本混合了专属的AT&T Unix代码,这样就继续使用就要求从AT&T获得许可证。源码许可证当时非常地昂贵,几个其他组织对单独的网络代码版感兴趣,完全独立于AT&T,这样就可不受许可证的支配。1989年6月,Networking Release 1(Net/1)诞生了,没有AT&T授权也能使用,可遵照BSD许可证进行自由再发布。

1990年初,推出了4.3BSD-Reno。该版本是4.4BSD早期开发的过渡版,使用该版本被戏称为是一种赌博,因为Reno就是内华达州的赌城雷诺。

[编辑]Net/2以及法律问题
Net/1以后,Keith Bostic提议,BSD系统中应该有更多的非AT&T部分,以Net/1的协议发布。随后,他开始一个项目,着手重新实现一些Unix标准工具,其中不使用原来的AT&T代码。例如,Vi,也就是基于最初Unix上ed的编辑器,被重写为nvi(new vi)。18个月后,所有AT&T的工具被替换,剩下的只是存留在内核的一些AT&T文件。残余文件被剔除后,1991年6月,Net/2诞生了,这是一个全新的操作系统,并且可以自由发布。

Net/2成为Intel 80386构架上两种移植的主要组成,包括由William Jolitz负责,自由的386BSD;以及专属的BSD/OS,由Berkeley Software Design(BSDi)负责。386BSD本身虽然短命,但不久即成为NetBSD和FreeBSD原始代码的基础。

BSDi很快就与AT&T的UNIX Systems Laboratories(USL)附属公司产生了法律纠纷,后者将拥有System V版权,以及Unix商标。1992年,USL正式对BSDi提起诉讼,这导致Net/2发布被中止,直到其源码能够被鉴定为符合USL的版权。

由于最后判决悬而未决,这桩法律诉讼将BSD后裔的开发,特别是自由软件,延迟了两年,这导致没有法律问题的Linux内核获得了极大的支持。Linux跟386BSD的开发几乎同时起步,Linus Torvalds曾说,当时如果有自由的Unix-like操作系统,基于386的,他就可能不会创造Linux。尽管无法预料这给以后的软件业究竟造成了什么样的影响,但有一点可以肯定,Linux更加丰富了这块土壤。

[编辑]4.4BSD及其后裔
这桩诉讼在1994年1月了结,更多地满足了伯克利的利益。伯克利套件的18,000个文件中,只有3个文件要求删除,另有70个文件要求修改,并显示USL的版权说明。这项调解另外要求,USL不得对下面的4.4BSD提起诉讼,不管是用户还是伯克利代码的分发者。

1994年6月,4.4BSD以两种形式发布:可自由再发布的4.4BSD-Lite,不包含AT&T源码;另有4.4BSD-Encumbered,跟以前的版本一样,遵照AT&T的执照。

伯克利的最终版本是1995年的4.4BSD-Lite Release 2,而后CSRG解散,在伯克利的BSD开发告一段落。在这之后,几种基于4.4BSD的套件(比如FreeBSD、OpenBSD和NetBSD)得以继续维护。

另外,由于BSD执照的宽容,许多其他的操作系统,不管是自由还是专属,都采用了BSD的代码。例如,Microsoft Windows在TCP/IP的实现上引入了BSD代码;经过重新编译,在当前Windows版本中,还采用了许多BSD命令行下的网络工具。




[编辑]技术
BSD开创了现代计算机的潮流。伯克利的Unix率先包含了库,以支持互联网协议栈(Stack)、伯克利套接字(sockets)。通过将套接字与Unix操作系统的文件描述符相整合,库用户通过计算机网络读写数据,跟直接在磁盘上操作一样容易。AT&T实验室最后也发布了他们的STREAMS库,在软件栈中引入了类似的功能,虽然结构层有所改进,但由于套接字库已经使用广泛,另外由于少了对开放套接字的轮询功能(类似于伯克利库中的select调用),使得将软件移植到这个新的API很困难。

时至今日,BSD仍在学术机构,乃至许多商业或自由产品的高科技实验中,继续被用作试验平台,甚至在嵌入式设备中,其使用也在增长。由于BSD设计出众,代码编写清晰,包括它的文档(特别是参考文档,常被称为“man pages”),使得这样的系统,几乎成了程序员眼中的乐土。

许多公司都使用BSD衍生出的代码,如此便可以支持他们的知识产权,许多自由软件,如Linux、GNU工程都遵照GNU General Public License,与之相比,BSD执照要更加灵活。当然,这也导致人们的机器上在跑一些BSD软件,但自己却并不知情。有兴趣的话,可以试着找找符号“University of California, Berkeley”,比如在产品文档内,二进制代码中的静态数据段,或者ROM中,还有通过一些产品的用户界面看看“about”(关于)内容。

有意思的是,通过一个二进制兼容层(compatibility layer),在BSD操作系统上,可以运行相同构架下其他操作系统上的原程序。这比模拟器要快得多,通过这个方法,针对Linux的应用程序,也可以在BSD上全速运行。所以,BSD不仅适合作为服务器,也可作为工作站来使用,众所周知,现在针对Linux的商业或封闭源码软件越来越多了。管理员也可以将一些原本只用于商业UNIX变种的专属软件,转移到BSD,这样在保持原有功能的同时,操作系统更趋现代,可继续使用这些软件,直到有更好的替代。

结末,当前的BSD操作系统变种支持各种通用标准,包括IEEE、ANSI、ISO以及POSIX,同时保持了传统BSD的良好风范。




[编辑]BSD 家族
不同的BSD操作系统针对不同的用途及用户,可应用于多种硬件构架。在政府机构中常能看到BSD的身影。虽然下面的BSD功能可能并非独有,但每种BSD在各自的领域,都逐渐具有了良好声誉,有的专注于性能,有的则以安全见长。

FreeBSD在BSD家族中以易用性与高性能而著称,由于主要用作微处理器架构,如i386、AMD's 64-bit i386扩展,所以FreeBSD非常关注多处理器。FreeBSD在i386和amd64服务器上,运行地非常好,当然,它也可以在其他硬件构架上运行。
NetBSD拥有出色的可移植性,能在多达54种平台上运行,小到嵌入式的掌上设备,大到服务器群,NetBSD甚至还在国际空间站中服务。
OpenBSD在密码学和安全方面特别出众,可移植性也很好,但是略逊于NetBSD。安全功能如OpenSSH,是由OpenBSD率先开创的。OpenBSD作为安全请求机器(security demanding machines)运行,受到好评。
DragonflyBSD是一个由FreeBSD 4-STABLE分支出来的项目,重点在于轻量级而高效能的线程、多处理支持以及其它用户工具、第三方软件管理系统的改进。它同时是最年轻的BSD。提供比FreeBSD更优秀的对称多处理机系统,并使内核直接支持SSI集群,以取得更好的计算效果。这个项目在此方向上,才开始数年,主要关注i386平台。
Darwin是苹果公司的项目、Mac OS X的基础,很大程度上使用FreeBSD的代码和工具
FreeSBIE项目提供FreeBSD各个发行版本的LiveCD,类似于基于Linux的Knoppix项目
Frenzy是另一个基于FreeBSD的live CD项目,主要针对俄语用户。启动中按“e”才是英文版界面
BSDeviant是一个FreeBSD的live CD项目,目的在于产生可以存在一张迷你CD-R上的系统
PicoBSD为了在单张1.44MB磁片执行而设计的FreeBSD精简版本
m0n0wall是一个基于FreeBSD的防火墙项目
PC-BSD为桌面/个人环境设计的BSD分支
relaxBSD为桌面/个人环境设计的BSD分支, 由华人开发, 注重中文环境
必须注意的是,上面所罗列的,更多地是基于感性认识,并针对其开发焦点,并没有严格地比较规则。实际而言,每种具体的BSD都可担当许多角色任务。




[编辑]结构
跟AT&T Unix一样,BSD也采用单内核,这意味着内核中的设备驱动,在核心态下运行,从而作为操作系统的核心部分。BSD的早期版本被用作组建Sun公司的SunOS,造就了Unix工作站的第一波热潮。


搜索引擎算法研究

1.引言

   万维网WWW(World Wide Web)是一个巨大的,分布全球的信息服务中心,正在以飞快的速度扩展。1998年WWW上拥有约3.5亿个文档[14],每天增加约1百万的文档[6],不到9个月的时间文档总数就会翻一番[14]。WEB上的文档和传统的文档比较,有很多新的特点,它们是分布的,异构的,无结构或者半结构的,这就对传统信息检索技术提出了新的挑战。

   传统的WEB搜索引擎大多数是基于关键字匹配的,返回的结果是包含查询项的文档,也有基于目录分类的搜索引擎。这些搜索引擎的结果并不令人满意。有些站点有意提高关键字出现的频率来提高自身在搜索引擎中的重要性,破坏搜索引擎结果的客观性和准确性。另外,有些重要的网页并不包含查询项。搜索引擎的分类目录也不可能把所有的分类考虑全面,并且目录大多靠人工维护,主观性强,费用高,更新速度慢[2]。

   最近几年,许多研究者发现,WWW上超链结构是个非常丰富和重要的资源,如果能够充分利用的话,可以极大的提高检索结果的质量。基于这种超链分析的思想,Sergey Brin和Lawrence Page在1998年提出了PageRank算法[1] ,同年J. Kleinberg提出了HITS算法[5],其它一些学者也相继提出了另外的链接分析算法,如SALSA,PHITS,Bayesian等算法。这些算法有的已经在实际的系统中实现和使用,并且取得了良好的效果。

   文章的第2部分按照时间顺序详细剖析了各种链接分析算法,对不同的算法进行了比较。第3部分对这些算法做了评价和总结,指出了存在的问题和改进方向。



2.WEB超链分析算法

 

.1 GooglePageRank算法

   搜索引擎Google最初是斯坦福大学的博士研究生Sergey Brin和Lawrence Page实现的一个原型系统[2],现在已经发展成为WWW上最好的搜索引擎之一。Google的体系结构类似于传统的搜索引擎,它与传统的搜索引擎最大的不同处在于对网页进行了基于权威值的排序处理,使最重要的网页出现在结果的最前面。Google通过PageRank元算法计算出网页的PageRank值,从而决定网页在结果集中的出现位置,PageRank值越高的网页,在结果中出现的位置越前。

2.1.1 PageRank算法

    PageRank算法基于下面2个前提:

   前提1:一个网页被多次引用,则它可能是很重要的;一个网页虽然没有被多次引用,但是被重要的网页引用,则它也可能是很重要的;一个网页的重要性被平均的传递到它所引用的网页。这种重要的网页称为权威(Authoritive)网页。

   前提2:假定用户一开始随机的访问网页集合中的一个网页,以后跟随网页的向外链接向前浏览网页,不回退浏览,浏览下一个网页的概率就是被浏览网页的PageRank值。

   简单PageRank算法描述如下:u是一个网页,是u指向的网页集合,是指向u的网页集合,是u指向外的链接数,显然=| | ,c是一个用于规范化的因子(Google通常取0.85),(这种表示法也适用于以后介绍的算法)则u的Rank值计算如下:

   这就是算法的形式化描述,也可以用矩阵来描述此算法,设A为一个方阵,行和列对应网页集的网页。如果网页i有指向网页j的一个链接,则,否则=0。设V是对应网页集的一个向量,有V=cAV,V为A的特征根为c的特征向量。实际上,只需要求出最大特征根的特征向量,就是网页集对应的最终PageRank值,这可以用迭代方法计算。

   如果有2个相互指向的网页a,b,他们不指向其它任何网页,另外有某个网页c,指向a,b中的某一个,比如a,那么在迭代计算中,a,b的rank值不分布出去而不断的累计。如下图:

   为了解决这个问题,Sergey Brin和Lawrence Page改进了算法,引入了衰退因子E(u),E(U)是对应网页集的某一向量,对应rank的初始值,算法改进如下:

其中,=1,对应的矩阵形式为V’=c(AV’+E)。

   另外还有一些特殊的链接,指向的网页没有向外的链接。PageRank计算时,把这种链接首先除去,等计算完以后再加入,这对原来计算出的网页的rank值影响是很小的。

   Pagerank算法除了对搜索结果进行排序外,还可以应用到其它方面,如估算网络流量,向后链接的预测器,为用户导航等[2]




2.1.2 算法的一些问题

   Google是结合文本的方法来实现PageRank算法的[2],所以只返回包含查询项的网页,然后根据网页的rank值对搜索到的结果进行排序,把rank值最高的网页放置到最前面,但是如果最重要的网页不在结果网页集中,PageRank算法就无能为力了,比如在 Google中查询search engines,像Google,Yahoo,Altivisa等都是很重要的,但是Google返回的结果中这些网页并没有出现。 同样的查询例子也可以说明另外一个问题,Google,Yahoo是WWW上最受欢迎的网页,如果出现在查询项car的结果集中,一定会有很多网页指向它们,就会得到较高的rank值, 事实上他们与car不太相关。

   在PageRank算法的基础上,其它的研究者提出了改进的PageRank算法。华盛顿大学计算机科学与工程系的Matthew Richardson和Pedro Dominggos提出了结合链接和内容信息的PageRank算法,去除了PageRank算法需要的前提2,增加考虑了用户从一个网页直接跳转到非直接相邻的但是内容相关的另外一个网页的情况[3]。斯坦大学计算机科学系Taher Haveliwala提出了主题敏感(Topic-sensitive)PageRank算法[4]。斯坦福大学计算机科学系Arvind Arasu等经过试验表明,PageRank算法计算效率还可以得到很大的提高[22]

 

.2 HITS算法及其变种

   PageRank算法中对于向外链接的权值贡献是平均的,也就是不考虑不同链接的重要性。而WEB的链接具有以下特征:

   1.有些链接具有注释性,也有些链接是起导航或广告作用。有注释性的链接才用于权威判断。
   2.基于商业或竞争因素考虑,很少有WEB网页指向其竞争领域的权威网页。
   3.权威网页很少具有显式的描述,比如Google主页不会明确给出WEB搜索引擎之类的描述信息。

   可见平均的分布权值不符合链接的实际情况[17]。J. Kleinberg[5]提出的HITS算法中引入了另外一种网页,称为Hub网页,Hub网页是提供指向权威网页链接集合的WEB网页,它本身可能并不重要,或者说没有几个网页指向它,但是Hub网页确提供了指向就某个主题而言最为重要的站点的链接集合,比一个课程主页上的推荐参考文献列表。一般来说,好的Hub网页指向许多好的权威网页;好的权威网页是有许多好的Hub网页指向的WEB网页。这种Hub与Authoritive网页之间的相互加强关系,可用于权威网页的发现和WEB结构和资源的自动发现,这就是Hub/Authority方法的基本思想。

2.2.1 HITS算法

   HITS(Hyperlink-Induced Topic Search)算法是利用Hub/Authority方法的搜索方法,算法如下:将查询q提交给传统的基于关键字匹配的搜索引擎.搜索引擎返回很多网页,从中取前n个网页作为根集(root set),用S表示。S满足如下3个条件:

   1.S中网页数量相对较小
   2.S中网页大多数是与查询q相关的网页
   3.S中网页包含较多的权威网页。

   通过向S中加入被S引用的网页和引用S的网页将S扩展成一个更大的集合T.

   以T中的Hub网页为顶点集Vl,以权威网页为顶点集V2,Vl中的网页到V2中的网页的超链接为边集E,形成一个二分有向图SG=(V1,V2,E)。对V1中的任一个顶点v,用h(v)表示网页v的Hub值,对V2中的顶点u,用a(u)表示网页的Authority值。开始时h(v)=a(u)=1,对u执行I操作修改它的a(u),对v执行O操作修改它的h(v),然后规范化a(u),h(v),如此不断的重复计算下面的操作I,O,直到a(u),h(v)收敛。(证明此算法收敛可见

I 操作: (1) O操作: (2)

   每次迭代后需要对a(u),h(v)进行规范化处理:

   式(1)反映了若一个网页由很多好的Hub指向,则其权威值会相应增加(即权威值增加为所有指向它的网页的现有Hub值之和)。式(2)反映了若一个网页指向许多好的权威页,则Hub值也会相应增加(即Hub值增加为该网页链接的所有网页的权威值之和)。

   和PageRank算法一样,可以用矩阵形式来描述算法,这里省略不写。
   HITS算法输出一组具有较大Hub值的网页和具有较大权威值的网页。

2.2.2 HITS的问题

   HITS算法有以下几个问题:

   1.实际应用中,由S生成T的时间开销是很昂贵的,需要下载和分析S中每个网页包含的所有链接,并且排除重复的链接。一般T比S大很多,由T生成有向图也很耗时。需要分别计算网页的A/H值,计算量比PageRank算法大。

   2.有些时候,一主机A上的很多文档可能指向另外一台主机B上的某个文档,这就增加了A上文档的Hub值和B上文档的Authority,相反的情况也如此。HITS是假定某一文档的权威值是由不同的单个组织或者个人决定的,上述情况影响了A和B上文档的Hub和Authority值[7]

   3.网页中一些无关的链接影响A,H值的计算。在制作网页的时候,有些开发工具会自动的在网页上加入一些链接,这些链接大多是与查询主题无关的。同一个站点内的链接目的是为用户提供导航帮助,也与查询主题不甚无关,还有一些商业广告,赞助商和用于友情交换的链接,也会降低HITS算法的精度[8]

   4.HITS算法只计算主特征向量,也就是只能发现T集合中的主社区(Community),忽略了其它重要的社区[12]。事实上,其它社区可能也非常重要。

   5.HITS算法最大的弱点是处理不好主题漂移问题(topic drift)[7,8],也就是紧密链接TKC(Tightly-Knit Community Effect)现象[8]。如果在集合T中有少数与查询主题无关的网页,但是他们是紧密链接的,HITS算法的结果可能就是这些网页,因为HITS只能发现主社区,从而偏离了原来的查询主题。下面讨论的SALSA算法中解决了TKC问题。

   6.用HITS进行窄主题查询时,可能产生主题泛化问题[5,9],即扩展以后引入了比原来主题更重要的新的主题,新的主题可能与原始查询无关。泛化的原因是因为网页中包含不同主题的向外链接,而且新主题的链接具有更加的重要性。


2.2.3 HITS的变种

   HITS算法遇到的问题,大多是因为HITS是纯粹的基于链接分析的算法,没有考虑文本内容,继J. Kleinberg提出HITS算法以后,很多研究者对HITS进行了改进,提出了许多HITS的变种算法,主要有:

2.2.3.1 Monika R. Henzinger和Krishna Bharat对HITS的改进

   对于上述提到的HITS遇到的第2个问题,Monika R. Henzinger和Krishna Bharat在[7]中进行了改进。假定主机A上有k个网页指向主机B上的某个文档d,则A上的k个文档对B的Authority贡献值总共为1,每个文档贡献1/k,而不是HITS中的每个文档贡献1,总共贡献k。类似的,对于Hub值,假定主机A上某个文档t指向主机B上的m个文档,则B上m个文档对t的Hub值总共贡献1,每个文档贡献1/m。I,O操作改为如下

I 操作:

O操作:

   调整后的算法有效的解决了问题2,称之为imp算法。

   在这基础上,Monika R. Henzinger和Krishna Bharat还引入了传统信息检索的内容分析技术来解决4和5,实际上也同时解决了问题3。具体方法如下,提取根集S中的每个文档的前1000个词语,串连起来作为查询主题Q,文档Dj和主题Q的相似度按如下公式计算:

=项i在查询Q中的出现次数,

=项i在文档Dj中的出现次数,IDFi是WWW上包含项i的文档数目的估计值。

   在S扩展到T后,计算每个文档的主题相似度,根据不同的阈值(threshold)进行刷选,可以选择所有文档相似度的中值,根集文档相似度的中值,最大文档相似度的分数,如1/10,作为阈值。根据不同阈值进行处理,删除不满足条件的文档,再运行imp算法计算文档的A/H值,这些算法分别称为med,startmed,maxby10。

   在此改进的算法中,计算文档的相似度时间开销会很大。

2.2.3.2 ARC算法

   IBM Almaden研究中心的Clever工程组提出了ARC(Automatic Resource Compilation)算法,对原始的HITS做了改进,赋予网页集对应的连结矩阵初值时结合了链接的锚(anchor)文本,适应了不同的链接具有不同的权值的情况。

   ARC算法与HITS的不同主要有以下3点:

1.由根集S扩展为T时,HITS只扩展与根集中网页链接路径长度为1的网页,也就是只扩展直接与S相邻的网页,而ARC中把扩展的链接长度增加到2,扩展后的网页集称为增集(Augment Set)。

2.HITS算法中,每个链接对应的矩阵值设为1,实际上每个链接的重要性是不同的,ARC算法考虑了链接周围的文本来确定链接的重要性。考虑链接p->q,p中有若干链接标记,文本1<a href=”q”>锚文本</a>文本2,设查询项t在文本1,锚文本,文本2,出现的次数为n(t),则w(p,q)=1+n(t)。文本1和文本2的长度经过试验设为50字节[10]。构造矩阵W,如果有网页i->j ,Wi,j=w(i,j),否则Wi,j=0,H值设为1,Z为W的转置矩阵,迭代执行下面3个的操作:

(1)A=WH (2)H=ZA (3)规范化A,H

3.ARC算法的目标是找到前15个最重要的网页,只需要A/H的前15个值相对大小保持稳定即可,不需要A/H整个收敛,这样2中迭代次数很小就能满足,[10]中指出迭代5次就可以,所以ARC算法有很高的计算效率,开销主要是在扩展根集上。 

2.2.3.3 Hub平均( Hub-Averaging-Kleinberg)算法

   Allan Borodin等在[11]指出了一种现象,设有M+1个Hub网页,M+1个权威网页,前M个Hub指向第一个权威网页,第M+1个Hub网页指向了所有M+1个权威网页。显然根据HITS算法,第一个权威网页最重要,有最高的Authority值,这是我们希望的。但是,根据HITS,第M+1个Hub网页有最高的Hub值,事实上,第M+1个Hub网页既指向了权威值很高的第一个权威网页,同时也指向了其它权威值不高的网页,它的Hub值不应该比前M个网页的Hub值高。因此,Allan Borodin修改了HITS的O操作:

O操作: ,n是(v,u)的个数

   调整以后,仅指向权威值高的网页的Hub值比既指向权威值高又指向权威值低的网页的Hub值高,此算法称为Hub平均(Hub-Averaging-Kleinberg)算法。

2.2.3.4 阈值(Threshhold—Kleinberg)算法

   Allan Borodin等在[11]中同时提出了3种阈值控制的算法,分别是Hub阈值算法,Authority阈值算法,以及结合2者的全阈值算法。

   计算网页p的Authority时候,不考虑指向它的所有网页Hub值对它的贡献,只考虑Hub值超过平均值的网页的贡献,这就是Hub阈值方法。

   Authority阈值算法和Hub阈值方法类似,不考虑所有p指向的网页的Authority对p的Hub值贡献,只计算前K个权威网页对它Hub值的贡献,这是基于算法的目标是查找最重要的K个权威网页的前提。

   同时使用Authority阈值算法和Hub阈值方法的算法,就是全阈值算法





.5 贝叶斯算法

   Allan Borodin等提出了完全的贝叶斯统计方法来确定Hub和Authoritive网页[11]。假定有M个Hub网页和N个Authority网页,可以是相同的集合。每个Hub网页有一个未知的实数参数,表示拥有超链的一般趋势,一个未知的非负参数,表示拥有指向Authority网页的链接的趋势。每个Authoritive网页j,有一个未知的非负参数,表示j的Authority的级别。

   统计模型如下,Hub网页i到Authority网页j的链接的先验概率如下给定:
    P(i,j)=Exp()/(1+Exp())
   Hub网页i到Authority网页j没有链接时,P(i,j)=1/(1+Exp())

   从以上公式可以看出,如果很大(表示Hub网页i有很高的趋势指向任何一个网页),或者都很大(表示i是个高质量Hub,j是个高质量的Authority网页),那么i->j的链接的概率就比较大。




了符合贝叶斯统计模型的规范,要给2M+N个未知参数()指定先验分布,这些分布应该是一般化的,不提供信息的,不依赖于被观察数据的,对结果只能产生很小影响的。Allan Borodin等在中指定满足正太分布N(μ,),均值μ=0,标准方差δ=10,指定满足Exp1)分布,即x>=0P(>=x)P(>=x)Exp(-x)。

   接下来就是标准的贝叶斯方法处理和HITS中求矩阵特征根的运算。

2.5.1 简化的贝叶斯算法

   Allan Borodin同时提出了简化的上述贝叶斯算法,完全除去了参数,也就不再需要正太分布的参数μ,δ了。计算公式变为:P(i,j)=/(1+),Hub网页到Authority网页j没有链接时,P(i,j)=1/(1+)。

   Allan Borodin 指出简化的贝叶斯产生的效果与SALSA算法的结果非常类似。

 

.6 Reputation

   上面的所有算法,都是从查询项或者主题出发,经过算法处理,得到结果网页。多伦多大学计算机系Alberto Mendelzon, Davood Rafiei提出了一种反向的算法,输入为某个网页的URL地址,输出为一组主题,网页在这些主题上有声望(repution)[16]。比如输入,www.gamelan.com,可能的输出结果是“java”,具体的系统可以访问htpp://www.cs.toronto.edu/db/topic。

   给定一个网页p,计算在主题t上的声望,首先定义2个参数,渗透率和聚焦率,简单起见,网页p包含主题项t,就认为p在主题t上。

 

是指向p而且包含t的网页数目,是指向p的网页数目,是包含t的网页数目。结合非条件概率,引入是WEB上网页的数目。P在t上的声望计算如下:

   指定是既指向p有包含t的概率,即,显然有

   我们可以从搜索引擎(如Altavista)的结果得到, ,WEB上网页的总数估计值某些组织会经常公布,在计算中是个常量不影响RM的排序,RM最后如此计算:

   给定网页p和主题t,RM可以如上计算,但是多数的情况的只给定网页p,需要提取主题后计算。算法的目标是找到一组t,使得RM(p,t)有较大的值。TOPIC系统中是抽取指向p的网页中的锚文本的单词作为主题(上面已经讨论过锚文本能很好描述目标网页,精度很高),避免了下载所有指向p的网页,而且RM(p,t)的计算很简单,算法的效率较高。主题抽取时,还忽略了用于导航、重复的链接的文本,同时也过滤了停止字(stop word),如“a”,“the”,“for”,“in”等。

   Reputation算法也是基于随机漫游模型的(random walk),可以说是PageRank和SALSA算法的结合体。

 

.链接算法的分类及其评价

   链接分析算法可以用来提高搜索引擎的查询效果,可以发现WWW上的重要的社区,可以分析某个网站的拓扑结构,声望,分类等,可以用来实现文档的自动分类等。归根结底,能够帮助用户在WWW海量的信息里面准确找到需要的信息。这是一个正在迅速发展的研究领域。

   上面我们从历史的角度总结了链接分析算法的发展历程,较为详细的介绍了算法的基本思想和具体实现,对算法的存在的问题也做了讨论。这些算法有的处于研究阶段,有的已经在具体的系统实现了。这些算法大体可以分为3类,基于随机漫游模型的,比如PageRank,Repution算法,基于Hub和Authority相互加强模型的,如HITS及其变种,基于概率模型的,如SALSA,PHITS,基于贝叶斯模型的,如贝叶斯算法及其简化版本。所有的算法在实际应用中都结合传统的内容分析技术进行了优化。一些实际的系统实现了某些算法,并且获得了很好的效果,Google实现了PageRank算法,IBM Almaden Research Center 的Clever Project实现了ARC算法,多伦多大学计算机系实现了一个原型系统TOPIC,来计算指定网页有声望的主题。

   AT&T香农实验室的Brian Amento在指出,用权威性来评价网页的质量和人类专家评价的结果是一致的,并且各种链接分析算法的结果在大多数的情况下差别很小[15]。但是,Allan Borodin也指出没有一种算法是完美的,在某些查询下,结果可能很好,在另外的查询下,结果可能很差[11]。所以应该根据不同查询的情况,选择不同的合适的算法。

   基于链接分析的算法,提供了一种衡量网页质量的客观方法,独立于语言,独立于内容,不需人工干预就能自动发现WEB上重要的资源,挖掘出WEB上重要的社区,自动实现文档分类。但是也有一些共同的问题影响着算法的精度。

1.根集的质量。根集质量应该是很高的,否则,扩展后的网页集会增加很多无关的网页,产生主题漂移,主题泛化等一系列的问题,计算量也增加很多。算法再好,也无法在低质量网页集找出很多高质量的网页。

2.噪音链接。WEB上不是每个链接都包含了有用的信息,比如广告,站点导航,赞助商,用于友情交换的链接,对于链接分析不仅没有帮助,而且还影响结果。如何有效的去除这些无关链接,也是算法的一个关键点。

3.锚文本的利用。锚文本有很高的精度,对链接和目标网页的描述比较精确。上述算法在具体的实现中利用了锚文本来优化算法。如何准确充分的利用锚文本,对算法的精度影响很大。

4.查询的分类。每种算法都有自身的适用情况,对于不同的查询,应该采用不同的算法,以求获得最好的结果。因此,对于查询的分类也显得非常重要。

   当然,这些问题带有很大的主观性,比如,质量不能精确的定义,链接是否包含重要的信息也没有有效的方法能准确的判定,分析锚文本又涉及到语义问题,查询的分类也没有明确界限。如果算法要取得更好的效果,在这几个方面需要继续做深入的研究,相信在不久的将来会有更多的有趣和有用的成果出现。


百度搜索引擎核心算法研究SEO理论的工作原理和,排序的算法。能够更好的指导做站思路,SEO高手们都有自己的一套优化思路,并非只是单纯SEO技术的应用。