Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2789228
  • 博文数量: 154
  • 博客积分: 7136
  • 博客等级: 准将
  • 技术积分: 1428
  • 用 户 组: 管理员
  • 注册时间: 2010-02-21 11:26
文章分类

全部博文(154)

文章存档

2016年(2)

2014年(2)

2013年(4)

2012年(16)

2011年(51)

2010年(68)

2009年(3)

2006年(3)

2005年(5)

分类: IT业界

2006-04-08 10:38:50

百度首席架构师揭密:算法是百度工程师的利器

作者: 《程序员》杂志
CNETNews.com.cn 2006-04-06 10:49 AM

    百度首席架构师   周利民/文

   “工欲善其事,必先利其器”,对于百度工程师来说,算法就是他们解决难题的利器。

      为什么这么说?因为百度搜索引擎研发的各个环节都离不开算法。我们需要快速,准确、实用、创新和不断改进的算法来满足用户的需求。

    百度面对的是海量的互联网数据,以及每天上亿次的检索请求。它要求百度能够收录和索引超过10亿的中文网页,并提供快速的检索服务。这只有高效率的算法才能完成。

    百度招聘的工程师在加入公司后,有一道入门练习题,就是编写一个数据扫描分析程序,要求写出的程序能在1分钟之内扫描分析完千万量级的数据,才算及格。高 水平的程序员可以利用高效的算法在10秒以内解决问题,甚至只要六七秒。但如果没用对算法,花一星期的时间,也做不到1分钟之内。

    大家可以设想一下,百度有十亿以上的网页,如果要在一周甚至三天内处理一遍,平均每秒处理要多少个?每天1亿次的检索又意味着峰值时每秒要处理多少次检索?事实上,针对一个问题,我们可以想出很多的算法,但如果效率不高,是无法真正投入使用的。 

      Web搜索引擎是一个很新的研究领域,因为从它诞生到现在不过10年左右的时间。学术界IR(Information Retrieval)领域的研究为搜索引擎提供了不少算法方面的理论基础模型,但这些理论距构建一个好的Web搜索引擎还有很大一段距离。这需要我们探索 和开发很多新的算法及系统。实际上,百度搜索引擎中的很多算法都极具创新性,而且都是基于实际应用的需求。这是和学术界研究工作的一个较大差异。学术界的 算法研究主要是为了解决某个学术方面的问题,不是太关注实用性,以及效率。


   举个例子来说,在传统的中文分词算法研究中,学术界最关注的是能达到多高的准确率,但对算法的运行速度上考虑的相对较少。可在百度,如果使用的分词算法速 度太慢,就根本无法应用。此外,百度面对的是Web上的大量数据,大部分传统的IR算法都会遇到信息爆炸的问题,我们需要想出很多新的方法来解决这些问 题。这对我们的工程师的算法提出了很高的要求。

      Web上的数据是不断变化的,用户的检索需求也是不断变化的。百度就是要在这不断变化的两者之间需找一个最佳匹配。所以百度的算法需要持续的进行改进,以 迅速适应这些变化。比如对搜索引擎来说有一个方面的技术很重要,就是判断一个网站是否在作弊的方法。由于那些针对搜索引擎作弊的人,如果能提高搜索引擎排 名,将获得巨大的经济利益,所以他们会不断使用各种方法去猜测百度算法中潜在的漏洞,进行攻击。这是一个很复杂的问题,而且仍在不断发展变化中。这就要求 我们能够迅速的发现这类问题,提出算法,并应用到百度搜索引擎中。在最短时间内消灭问题。否则作弊行为很快就会泛滥成灾。

    在百度,算法的应用是融入到研发部门每个人的工作中的。在这里,不是经理告诉工程师做什么,怎么做,用什么算法,而是需要工程师自己在某个领域去发现问 题,提出算法,评估效果,并不断改进。这要求每个工程师在算法上的基本功很强,并能灵活的加以应用,以解决实际问题。现在,百度有不少的程序员,他们大部 分的时间是用在发现问题,分析问题,思考解决问题的方法上。实际编写代码所花的时间并不多。

    有不少人觉得,现在的搜索引擎已经足够好了,算法上没有太多改进余地了。我不赞成这个观点。虽然每次CNNIC互联网用户调查的数据显示,超过90%的人 对搜索引擎提供的服务表示满意,但是第一次搜索就能找到满意结果的用户只有50%左右,很多用户都是在多次更换关键词之后才搜索到自己想要的结果。这说明 我们还有巨大的改进空间。让所有用户能在第一时间找到他们想要的信息,是我们的最终目标。 

    可以说,搜索引擎开发中使用的基本算法大部分都在大学课程中涵盖了。对于一个人来说,在学校学习过这个算法,和能够灵活运用是两个概念。只有通过参与较多的项目开发和程序编写,将算法和应用相结合,才能在这方面得到较好的发展。

    对于算法学习,我的建议还是多思考,多做项目和程序。在做的过程中肯定会遇到一些问题,这是正常的。好的程序员善于从问题和失败中学到东西,举一反三,设 法避免以后出现同样或类似的错误。另外,还要善于从别人身上学习,有意识的进行思考和总结,这是比较有效的方式。

阅读(2580) | 评论(0) | 转发(0) |
0

上一篇:Apache2的httpd.conf翻译

下一篇:Gaim的介绍

给主人留下些什么吧!~~