从事SEO工作的人可以比喻为搜索引擎的贴身管家,作为一名合格的SEO从业者必须明白一个道理,SEO服务的对象是搜索引擎。要想网站获得比较好的排名和流量,就必须对搜索引擎的运行规律、工作原理、习性、优缺点等铭记在心,多多实践操作,平时实践的多了,经验就越丰富。搜索引擎即一个计算机应用软件系统,或者说是一个网络应用软件系统。从用户的角度看,它根据用户提交的类自然语言查询词或者短语,返回一些列很可能与该查询相关的页面信息,供用户进一步判断和选取。为了有效地做到这一点。它大致分为三个功能模块:爬行抓取、预处理、查询服务。
一、爬行抓取
爬行抓取是搜素引擎 工作最重要的一步,把所有需要抓取的地方那个抓取回来处理分析。搜索引擎一般按照一定的规律来抓取网页,基本上有以下来两种特征:
*批量收集:对互联网网上只要是存在的链接的网页都手机一遍,耗时在几周左右。缺点是增加了额外的带宽消耗,时效性也不高。 *增量收集:是批量收集的一个技术升级,完美的弥补了批量收集的缺点。在原有的基础上搜索新增加的网页,变更上次收集之后有改变的网页,删除收集重复和不存在的网页。 最简单的让搜索引抓取的办法就是主动向搜索引擎提交网站,等到一定的时间就会来爬取。不过随着搜素引擎技术的升级,爬行抓取会越来越慢,最好的办法就是通过SEO的手段做好蜘蛛爬行的入口,即链接布局。 何为链接布局呢?所谓的链接布局就是设计蜘蛛爬行抓取的页面。蜘蛛主要通过爬取网页上的链接来发现新的页面,以此类推不停地十字交叉爬行下去便形成了一张蜘蛛网。爬取主要有来两种策略来完成:一是深度优先爬行,二是广度优先爬行。 深度优先爬行:如图所示,蜘蛛从A网页顺序爬行到A1,A2,A3,A4,爬行到A4页面之后没有页面了,返回A页面,以此类推爬行到B1,B2,B3,B4,然后返回A页面。继续爬行C1,C2,C3,C4。深度爬行的主要特点就是蜘蛛会一直沿着一条线爬行下去直到无路可走了,然后返回爬行另一条。 广度优先爬行:指蜘蛛在一个页面上发现多个链接的情况下,首先爬取第一层的链接,然后再沿着第二层的链接向第三层链接爬行。 路径1==>A 路径2==> A1-->B1-->C1 路径3==>A2 -->C2-->C3 路径4==>a3-->a4-->c4 路径5==>c5 在做连接的过程中一定要注意避免网页重复收集,重复收集的坏处就是一个页面被蜘蛛重复抓取,增加蜘蛛的负担和爬取速度,消耗量搜索引擎的资源,也就不能做到时效性地更新,而且有可能降低秒级的输出服务。造成重复收集的原因 在于蜘蛛并没有记录访问过的页面的URL,另一方面还有可能在于一个页面有多个域名指向导致的。 网页信息的重要性是根据信息本身来决定的,从而收集的方式也采用不用的策略。对于网页的重要程度的判断也有一些方法可循。整站页面的质量权重度,并非是网站首页权重越高越好,需结合全局类分配权重。通过四点来判断一个页面的权重: (1)网页目录越小越好,利于用户体验,节省蜘蛛爬行时间; (2)高质量相关链接导入,从外部导入和自身相关度大的链接,可以增加网页的权重; (3)信息的新鲜度,一个有价值的网站每天都会更新,用户天天看,蜘蛛也会天天来广顾; (4)网站内容的原创性,原创性越好的网页重要性越高。 二、预处理
得到海量信息的原始网页集合,距离面向网络用户的检索服务之间还有相当的距离,宏观看,服务子系统是一个程序,采用witrth关于"程序=算法+数据结构"的观点来考察一个程序,一个合适的数据机构是查询子系统工作的核心和关键。现行最有效的数据结构是”倒排文件“:倒排文件使用文档中包含关键词作为索引,文档作为索引目标的一种结构。预处理主要有四个方面:关键词那次提取,”镜像网页(网页内容完全相同,未加任何修改)“或”转载网页(near-replicas,主体内容基本相同但可能有一些额外的编辑信息等,转载网页也称为"近似镜像网页")“的消除,链接分析和网页程度的计算。
与处理阶段的处理流程
(1)关键词的提取(主要关键词、停用词的分离)
(2)重复或转载网页的消除
(3)链接分析
(4)网页重要程度的计算
预处理详解
【预处理得到海量的原始网页集合,距离面向网络用户的检索服务之间还有相当的距离。宏观地看,服务子系统是一个程序。采用 Wirth 关于“程序 = 算法+数据结构”的观点来考察个程序,一个合适的数据结构是查询子系统工作的核心和关键。这里只是指出:现行最有效的数据结构是“倒排文件” (inverted file) ;倒排文件是用文档中所含关键词作为索引,文档作为索引目标的一种结构(类似于普通书籍中,索引是关键词,书的页面是索引目标)。我们在第八章中有进一步分析。下面讨论从网页集合形成这样的倒排文件过程中的几个主要问题,即我们所说的 “预处理” 。主要包括四个方面,关键词的提取, “镜像网页” (网页的内容完全相同,未加任何修改)或“转载网页” (near-replicas,主题内容基本相同但可能有一些额外的编辑信息等,转载网页也称为“近似镜像网页” )的消除,链接分析和网页重要程度的计算。
1. 关键词的提取
随便取一篇网页的源文件(例如通过浏览器的“查看源文件”功能),我们可以看到其中情况纷乱繁杂。除了我们从浏览器中能够正常看到的文字内容外,还有大量的 HTML 标记。根据天网统计,网页文档源文件的大小(字节量)通常大约是其中内容大小的 4 倍(例如http://net.pku.edu.cn就是如此!)。另外,由于 HTML 文档产生来源的多样性,许多网页在内容上比较随意,不仅文字不讲究规范、完整,而且还可能包含许多和主要内容无关的信息(例如广告,导航条,版权说明等)。这些情况既给有效的信息查询带来了挑战,也带来了一些新的机遇,在后面的章节将会有进一步的论述。这里我们只是指出,为了支持后面的查询服务,需要从网页源文件中提取出能够代表它的内容的一些特征。从人们现在的认识和实践来看,所含的关键词即为这种特征最好的代表。于是,作为预处理阶段的一个基本任务 ,就是要提取出网页源文件的内容部分所含的关键词。对于中文来说,就是要根据一个词典Σ,用一个所谓“切词软件” ,从网页文字中切出Σ所含的词语来。在那之后,一篇网页主要就由一组词来近似代表了, p = {t1, t2, …, tn}。
一般来讲,我们可能得到很多词,同一个词可能在一篇网页中多次出现。从效果(effectiveness)和效率(efficiency)考虑,不应该让所有的词都出现在网页的表示中,要去掉诸如“的” , “在”等没有内容指示意义的词,称为“停用词” (stop word)。这样,对一篇网页来说,有效的词语数量大约在 200个左右。 2. 重复或转载网页的消除
与生俱来的数字化和网络化给网页的复制以及转载和修改再发表带来了便利,因此我们看到Web 上的信息存在大量的重复现象。天网在 2003 年的一次大规模统计分析表明,网页的重复率平均大约为 4。也就是说,当你通过一个 URL 在网上看到一篇网页的时候,平均还有另外 3 个不同的 URL 也给出相同或者基本相似的内容。这种现象对于广大的网民来说是有正面意义的,因为有了更多的信息访问机会。但对于搜索引擎来说,则主要是负面的;它不仅在搜集网页时要消耗机器时间和网络带宽资源,而且如果在查询结果中出现,无意义地消耗了计算机显示屏资源,也会引来用户的抱怨, “这么多重复的,给我一个就够了” 。因此,消除内容重复或主题内容重复的网页是预处理阶段的一个重要任务。
3. 链接分析
前面提到,大量的 HTML 标记既给网页的预处理造成了一些麻烦,也带来了一些新的机遇。从信息检索的角度讲,如果系统面对的仅仅是内容的文字,我们能依据的就是 “共有词汇假设” (shared bag of words) ,即内容所包含的关键词集合,最多加上词频( term frequency或 tf、TF)和词在文档集合中出现的文档频率(document frequency 或 df、DF)之类的统计量。而TF 和 DF 这样的频率信息能在一定程度上指示词语在一篇文档中的相对重要性或者和某些内容的相关性,这是有意义的。有了 HTML 标记后,情况还可能进一步改善。
特别地,HTML 文档中所含的指向其他文档的链接信息是人们近几年来特别关注的对象,认为它们不仅给出了网页之间的关系,而且还对判断网页的内容有很重要的作用。例如 “北大学报”这几个字在北京大学学报社会科学版的主页上是没有的,因此一个仅靠内容文字分析的搜索引擎就不可能返回该主页作为结果。但是北京大学主页上是用“北大学报(社) ”作为链接信息指向了北京大学学报社会科学版的主页。因此在很好利用链接信息的搜索引擎中应该能返回北京大学学报社会科学版的主页。
4. 网页重要程度的计算
搜索引擎返回给用户的,是一个和用户查询相关的结果列表。列表中条目的顺序是很重要的一个问题。由于面对各种各样的用户,加之查询的自然语言风格,对同样的“关键词”返回相同的列表肯定是不能使所有提交 “关键词” 的用户都满意的(或者都达到最高的满意度)。因此搜索引擎实际上追求的是一种统计意义上的满意。人们认为 Google 目前比天网好,是因为在多数情况下前者返回的内容要更符合用户的需要,而不是所有情况下都如此。如何对查询结果进行排序有很多因素需要考虑,后面将有深入的讨论。这里只是概要解释在预处理阶段可能形成的所谓“重要性”因素。顾名思义,既然是在预处理阶段形成的,就是和用户查询无关的。如何讲一篇网页比另外一篇网页重要?人们参照科技文献重要性的评估方式,核心想法就是“被引用多的就是重要的” 。 “引用”这个概念恰好可以通过 HTML 超链在网页之间体现得非常好,作为 Google 创立核心技术的 PageRank 就是这种思路的成功体现[Page,et al.,1998]。除此以外,人们还注意到网页和文献的不同特点,即一些网页主要是大量对外的链接,其本身基本没有一个明确的主题内容,而另外有些网页则被大量的其他网页链接 。从某种意义上讲,这形成了一种对偶的关系,这种关系使得人们可以在网页上建立另外一种重要性指标[Kleinberg,1998]。这些指标有的可以在预处理阶段计算,有的则要在查询阶段计算,但都是作为在查询服务阶段最终形成结果排序的部分参数。】
三、查询服务
SEO中的每一个元素至少包含如下几个方面:
(1)原始网页文档
(2)URL和标题
(3)所含的重要关键词的集合(以及它们在文档中出现的位置信息)
(4)其他一些指标(例如重要程度,分类代啊等)
服务子系统的要求极其工作原理,主要有三方面:
(1)查询方式和匹配
(2)结果排序
(3)文档摘要
查询服务详解
查询服务
如上述,从一个原始网页集合 S 开始,预处理过程得到的是对 S 的一个子集的元素的某种内部表示,这种表示构成了查询服务的直接基础。对每个元素来说,这种表示至少包含如下几个方面:
原始网页文档
URL 和标题
所含的重要关键词的集合(以及它们在文档中出现的位置信息)
其他一些指标(例如重要程度,分类代码等)
而系统关键词总体的集合和文档的编号一起构成了一个倒排文件结构,使得一旦得到一个关键词输入,系统能迅速给出相关文档编号的集合输出。然而,如同我们在前面提到的,用户通过搜索引擎看到的不是一个 “集合” ,而是一个“列表” 。如何从集合生成一个列表,是服务子系统的主要工作。从搜索引擎系统功能划分的角度,有时候将倒排文件的生成也作为服务子系统的一部分功能,但我们这里将它划分到预处理阶段中觉得更方便些。换句话讲,服务子系统是在服务进行的过程中涉及的相关软件程序,而为这些软件程序事先准备数据的程序都算在预处理子系统中。 下面来看对服务子系统的要求和其工作原理,主要有三个方面。
1. 查询方式和匹配
查询方式指的是系统允许用户提交查询的形式。考虑到各种用户的不同背景和不同的信息需求,不可能有一种普适的方式。一般认为,对于普通网络用户来说,最自然的方式就是“要什么就输入什么” 。但这是一种相当模糊的说法。例如用户输入“北京大学” ,可能是他
想了解北京大学目前有些什么信息向外发布,想看看今年的招生政策(于是希望看的是北大网站上的内容) , 也可能是他想了解外界目前对北京大学有些什么评价(于是希望看到的是其他权威网站上关于北大的消息)。这是两种相当不同的需求。在其他一些情况下,用户
可能关心的是间接信息,例如 “喜马拉雅山的高度” ,8848 米应该是他需要的,但不可能包含在这短语中。而用户输入“惊起一滩鸥鹭”则很可能是想知道该词的作者是谁,或者希望能提醒前面几句是什么。尽管如此,用一个词或者短语来直接表达信息需求,希望网页中含有该词或者该短语中的词,依然是主流的搜索引擎查询模式。这不仅是因为它的确代表了大多数的情况,还因为它比较容易实现。这样,一般来讲,系统面对的是查询短语。就英文来说,它是一个词的序列;就中文来说,它是包含若干个词的一段文字。一般地,我们用 q0表示用户提交的原始查询,例如, q0 =“网络与分布式系统实验室” 。它首先需要被“切词”(segment)或称 “分词” ,即把它分成一个词的序列。如上例,则为 “网络 与 分布式 系
统 实验室” (注意,不同的分词软件可能得出不同的结果,这里用的是北大计算语言所的在线分词软件) 。 然后需要删除那些没有查询意义或者几乎在每篇文档中都会出现的词 (例如 “的” ) ,在本例中即为 “与” 。最后形成一个用于参加匹配的查询词表, q = {t1, t2, … ,
tm},在本例中就是 q = {网络,分布式,系统,实验室} 。前面讲过,倒排文件就是用词来作为索引的一个数据结构,显然,q 中的词必须是包含在倒排文件词表中才有意义。有了这样的 q, 它的每一个元素都对应倒排文件中的一个倒排表(文档编号的集合),记作 L(ti),它们的交集即为对应查询的结果文档集合,从而实现了查询和文档的匹配。上述过程的基本假设是:用户是希望网页包含所输入查询文字的。
2. 结果排序
上面,我们了解了得到和用户查询相关的文档集合的过程。这个集合的元素需要以一定的形式通过计算机显示屏呈现给用户。就目前的技术情况看,列表是最常见的形式(但人们也在探求新的形式,如 Vivisimo 引擎将结果页面以类别的形式呈现)。给定一个查询结果集合, R={r1, r2, …, rn},所谓列表,就是按照某种评价方式,确定出 R 中元素的一个顺序,让这些元素以这种顺序呈现出来。笼统地讲,ri 和 q 的相关性(relevance)是形成这
种顺序的基本因素。但是,有效地定义相关性本身是很困难的,从原理上讲它不仅和查询词有关,而且还和用户的背景,以及用户的查询历史有关。不同需求的用户可能输入同一个查询,同一个用户在不同的时间输入的相同的查询可能是针对不同的信息需求。为了形成一个合适的顺序,在搜索引擎出现的早期人们采用了传统信息检索领域很成熟的基于词汇出现频度的方法。大致上讲就是一篇文档中包含的查询(q)中的那些词越多,则该文档就应该排在越前面;再精细一些的考虑则是若一个词在越多的文档中有出现,则该词用于区分文档相关性的作用就越小。这样一种思路不仅有一定直觉上的道理,而且在倒排文件数据结构上很容易实现。因为,当我们通过前述关键词的提取过程,形成一篇文档的关键词集合, p = {t1,
t2, …, tn}的时候,很容易同时得到每一个 ti 在该文档中出现的次数,即词频,而倒排文件中每个倒排表的长度则对应着一个词所涉及的文档的篇数,即文档频率。然而,由于网页编写的自发性、随意性较强,仅仅针对词的出现来决定文档的顺序,在Web 上做信息检索表现出明显的缺点,需要有其他技术的补充。这方面最重要的成果就是前面提到过的PageRank。通过在预处理阶段为每篇网页形成一个独立于查询词(也就和网页内容无关) 的重要性指标,将它和查询过程中形成的相关性指标结合形成一个最终的排序,是目前搜索引擎给出查询结果排序的主要方法。
3. 文档摘要
搜索引擎给出的结果是一个有序的条目列表,每一个条目有三个基本的元素:标题, 网址和摘要。其中的摘要需要从网页正文中生成。
一般来讲,从一篇文字中生成一个恰当的摘要是自然语言理解领域的一个重要课题, 人们已经做了多年的工作并取得了一些成果。但相关的技术用到网络搜索引擎来有两个基本困难。 一是网页的写作通常不规范,文字比较随意,因此从语言理解的角度难以做好好; 二是复杂的语言理解算法耗时太多,不适应搜索引擎要高效处理海量网页信息的需求。 我们做过统计,即使是分词这一项工作(文本理解的基础),在高档微机上每秒钟也只能完成 10篇左右网页的处理。因此搜索引擎在生成摘要时要简便许多,基本上可以归纳为两种方式,一是静态方式,即独立于查询,按照某种规则,事先在预处理阶段从网页内容提取出一些文字,例如截取网页正文的开头 512 个字节(对应 256 个汉字),或者将每一个段落的第一个句子拼起来,等等。 |