错误博客( cuowu.com )发布于 2019-06-10 18:23:13

信息检索时新性

信息检索时新性教程。

互联网上的网页在不断地增加、删除和修改。为了准确地查看网页中的内容,网络爬虫必须不断地对它已经爬取过的网页进行访问,看它们是否发生了变化,以保持文档集合的时新性(freshness)。陈旧的备份是与时新的备份相反的,意味着这个备份已经不再能够反映真实的网页内容了。

HTTP HEAD请求和服务器响应

HTTP协议有一个称为HEAD的特殊请求,使得检查页面是否发生变化更加容易了。HEAD请求只返回页面的头部信息,而不是页面内容。图3-5给出了HEAD请求和响应的实例。Last-Modified的值指出了页面内容最后一次发生变化的时间。可以看到,在对GET请求进行响应时,这个日期信息也随着响应一起发送。这就允许网络爬虫对上一次从GET请求接收到的日期与HEAD请求中得到的Last-Modified的值进行比较。

HEAD请求降低了页面检查的开销,但并没有消除这个开销。每分钟对每个页面进行检查是不可能的。这不仅令服务器管理员产生反感,而且会导致网络爬虫和网络连接的负载大量增加。

值得庆幸的是,绝大多数的网页并不是每几分钟就进行更新的。其中的一些的确更新得很频繁,如新闻站点。而其他的站点几乎很少发生变化,如个人主页。即便是相同的页面类型,更新的比率也有很大的不同。例如,有的博客一天内更新很多次,而其他的博客几个月才会更新一次。不断地去检查那些很少更新的站点是无益的。因此,网络爬虫的一个任务就是评估每个页面的变化比率。经过一段时间,该数据可以用于估计每个网页的变化频率。

网络爬虫不可能在每个页面发生变化时都立即对它进行更新,它需要有一些度量方式来评估采集信息的时新性。本章中已经将时新性用作一般性术语,但是时新性也是一种度量的名字。在时新性的度量下,如果所采集的信息是一个网页最近的备份,那么这个页面就是时新的,否则就是陈旧的。因此,时新性是指所抓取的页面中当前为新网页的比例。

一个页面的年龄和时新性随时间的变化

保持时新性看起来好像确实是我们想要做的,但对于时新性的优化会得到意想不到的结果。假设http://www.cuowu.com 是一个众所周知的网站,每隔几分钟它的首页就会有细小的变化。除非你的网络爬虫不停地选择该站点进行网页抓取,否则你所得到的通常是该页面的一份过时的备份。如果你想对时新性进行优化,正确的方法就是彻底停止对该站点的信息采集。如果该页面一向都不是时新的,那么对时新性的值是没有帮助的。取而代之的是,可以将网络爬虫资源分配给那些很少发生变化的页面。

当然,如果你确定要为了时新性对网络爬虫进行优化,这通常会引起用户的反感。因为他们要浏览 http://www.cuowu.com 的页面,但是发现你所引用的该页面的备份过时了几个月,这会使他们产生困惑。

年龄(age)是可以使用的更好的度量方法。在图3-6中可以看到年龄和时新性的不同。从图中的上半部分可以看到,当页面被爬虫采集回来的时候,就立即成为时新的。但是一旦页面发生了变化,所采集回来的网页就成为过时的了。在年龄的度量下,页面的年龄为0,除非该页面发生了变化。这时,页面的年龄逐渐增加,直到该页面被爬虫再次采集,页面的年龄又回到0。

假设一个页面的变化频率为l,这意味着我们期望该页面在一天的周期内变化l次。我们可以计算出一个页面从上一次采集t天之后该页面的年龄期望值:

页面的年龄期望值

表达式(t-x)表示的是年龄:假定页面在时间t被采集,在时间x时页面发生了变化。将该表达式与页面在时间x发生变化的概率相乘。研究表明,网页的更新一般遵循泊松分布,这意味着页面下一次更新的时间受指数分布(Cho & Garcia-Molina, 2003)支配。将其插入到表达式P(在时间为x时页面发生变化)中得到:

循泊松分布

图3-7中给出了该表达式的曲线,此时l=1/7,也就是页面大约每周变化一次。注意,为什么年龄的期望值是从0开始的,而且该曲线在开始时上升得比较缓慢?这时因为页面在第一天时不可能发生变化。随着天数的增加,页面发生变化的概率也随之增大。在周末的时候,该页面年龄的期望值大约为2.6天。也就是说,如果爬虫每周采集一次页面,而且集合中的每个页面平均更新时间为一周,那么在爬虫再次启动采集网页之前,索引中页面的平均年龄为2.6天。

年龄的二阶导数函数值通常是正的。也就是说,图中的曲线不仅是上升的,而且曲线的增长率也是呈上升趋势的。这个正数值还意味着网页的年龄越大,不采集它的代价也越大。对时新性度量的优化可以得出,有时候对一个页面不进行采集是节省开销的,但对年龄这种度量的优化却不能得到这样的结论。


2020年错误博客亲测项目系列

错误教程( cuowu.com )专注网推培训、SEO培训和网赚培训,微信/电话:13722793092

关注微信公众号:第一时间获得错误博客最新教程,让我们一起成长!

公众号二维码