集体智慧编程笔记------搜索和排序
搜索引擎就是运用机器学习、数据挖掘知识的典型啊。简单的来说,搜索引擎就是存储所有的可以访问的静态网页并将它们存储起来,当你查询的时候将那些跟你的要求相关的网页送给你。
搜索引擎也经历了一段时间,期间起起伏伏、波澜壮阔,从雅虎的目录式的搜索引擎,再到谷歌的崛起,被墙,然后百度开始NB起来,到现在国内还是有很多家企业进入搜索领域(搜狗、搜搜、
360等等)。
从前面的介绍可以看出,建立一个搜索引擎首先需要做的是获取所有的可以访问的网页,这一过程称之为爬取(crawling),相应的程序称之为爬虫(crawler)。然后需要将这些网页存储起来。因为在使用搜索引擎时,我们提供给搜索引擎的是好几个“词”,所以为了能够快速的找到跟某个词有关的所有网页,除了要将网页内容存储起来以外,还需要对网页的内容建立索引,搜索引擎使用的索引称之为倒排序索引。在建立了索引之后,就等到用户的查询了。拿到用户的查询词,这个时候需要做的是拿到所有的含有查询词的网页,然后根据网页的内容对这些网页进行排序(Ranking),并将结果呈现给用户。但是这还没有结束,因为我们给出的结果只是自己的想法,用户对这些网页的判断才是最重要的,所有在将结果呈现给用户之后,还需要记录用户的点击信息
,并利用这些信息改进排序的结果。下面就按照这个顺序,大致的介绍下这些步骤。
网页抓取(crawling):这是搜索引擎需要做的第一个工作。一个简单的crawler的工作流程是这样的:
1. 提供一批url作为网页爬取的起点,并将这些url添加到集合PAGE中,PAGE中存储的全是未被访问的url。
2. 从集合PAGE中随机选择一个URL,并将这个url编辑为已访问,使用程序下载这个网页。
3. 分析网页的内容,主要是提取出网页中包含的url。对这些url进行检查,如果一个url没有被访问则存储到PAGE中,否则,放弃。
4. 如果没有未被访问的url,那么停止。否则,返回步骤2.
以上就是爬虫工作的大概步骤,但是实际的可用爬虫远比这复杂。 因为需要处理千奇百怪的网页,不同的字符编码(我最怕的事情)。在书中使用python来建立一个简单的爬虫系统,还是可行的, 下载网页的时候,一般的时候使用的都是urllib2这个工具库。在分析网页的时候强烈建议beautifulSoup这个工具,方便快捷,就是对内存的消耗比较大。
网页索引(indexing):在爬取网页之后,需要将网页的内容存储起来。为了方便查询,除了正常的按照整个网页存储之外,还需要对网页建立倒排序索引,方便查找跟某个词相关的所有网页信息。但是在书中建立倒排序索引这个步骤被数据库操作取代了,而且使用的是内存数据库sqlite,当然使用起来还是相当的爽,感觉大部分的原因是因为python的代码比较好看^_^.
网页排序(Ranking):这个步骤是相当重要的,也是很多研究的重点。给定查询词,你可以获取跟这些查询词相关的所有网页,但是不同网页的内容跟这些查询词的关系确不容易取得。
现在没有一个有效的理论来使得机器可以按照人类的思维方式来理解文本内容,所有的东西都是数字而已。那么如何来对这些不同的网页进行排序呢?简单的来说就是使用不同的标准,对网页
进行打分,分高的就排第一。 但是在这个时候有一个小问题,需要注意,使得各项的分值具有可比性,这意味着不会出现一个标准的分值范围是600-1000,另一个却是0.6-1,在这种情况下
第二个标准的分值对排名的影响将远远小于第一项。这项操作的名称为normalization,它的目的就是使得所有的分值都在同一个范围内,并且分值的高低具有相同的含义。那么如何进行排序呢?选项很多,书中提到的几个有趣的观点是这样的:
1. 锚文本。锚文本简单的来说就是标签<a>和</a>之间出现的文字。一般来说锚文本应该跟它指向的网页有着很大关系,代表了那个网页的主要内容。
2. PageRank值。这种观点是这样的,一个网页的价值可以通过哪些指向这个网页的网页来判断。而一个网页的价值就是这个网页的pagerank值。那么如何计算一个网页的pagerank值呢?一个网页的pagerank值等于指向这个网页的链接的rank值,在加上0.15.而一个链接的pagerank值等于这个网页的pagerank值处于这个网页内包含的所有的链接数。
重新学习排序信息:再将排序的结果提交给用户之后,可以记录用户的点击信息,可以这样认为,那些被点积的网页对用户是比较重要的,因此下次在排序的时候可以将这些网页的排名提高,满足用户的需求。那么如何学习用用户的点击来给网页排序呢?书中提出的办法是使用人工神经网络(ANN)。将查询词作为输入节点,url作为输出节点,隐含层的节点是跟查询词和url都相关的节点。如果用户点击了某个url,那么相应的可以想这个url对应的输出设置为0.9,其余没有被点击的设置为0.1,见过训练后,在给定查询词的情况下,就可以获取ANN对各个url的输出,作为排序标准的一部分。
在书中对搜索的介绍就到此截止,但是作为入门的书籍,很明显只告诉你最简单的情况,继续提升?看paper去吧~~~