差异化的百度和谷歌的搜索算法
先一句话回答:在与查找有关的根底技能方面,baidu间隔 Google 仍有很大的距离,但今日是不是还存在量级上的距离存疑。
开头先扯个不相干的范畴,苏联 1960 时代配备的 Mig-25 截击机,这是世界上第一款能飞双三(三倍音速,30000米升限)的战斗机。西方世界面临这反常的性能参数惊诧莫名,揣度苏联在航空技能上已全部逾越西方。直到别连科驾驭 Mig-25 叛逃西方,他们总算有时机触摸真机,才发现它运用的技能本来没那麽先进,反常的性能目标都是用一般的技能根底硬干上去的,飞机十分蠢笨以致有“直线战斗机”的称号,不幸的发起机要真飞一次三倍音速落地就得作废。苏联的航空技能并没有他们幻想的这麽逆天。
2009年我在baidu,面临 Google 揭露的技能材料和baidu的内部体系,我首要想起的即是 Mig-25. 就跟这台战机相同,其时的baidu,在中文查找成果质量的各项目标上,比照 Google 仍是有优势。baidu的工程师十分聪明,也十分尽力,在某些点上也做得很细很超卓,可是在与查找有关的根底技能上,baidu仍是全部落后。baidu的查找质量前进,有很大有些是依托人工做很多细緻的战略调整硬拉上去的。
用一般技能飞上双三,Mig-25 自身是个了不起的工程成果。下一代战机,不管是苏联的 Su-27 仍是美国的 F-15, 甚至四代机 F-22, 都没有能飞出双三来的,但这些下一代战机在技能水准和全体性能上,无疑远胜 Mig-25, 这应该能算得上题主所说的量级差异。技能的量级差异不能拿某个特定目标或孤例评价(Mig-25 还曾击落过 F/A-18 呢),也不能只比照某些技能点上的好坏,而往往是决议于根底技能水平。
在 2009 年,我能够很肯定地说baidu查找有关的根底技能比照 Google 有量级距离。据我了解,这些年baidu在根底技能方面前进很快,当然一同 Google 也在疾速前进。它们在今日是不是有量级的差异,我不确定。
下面列几个主要的并且揭露材料较多的根底技能:
大规划机群建造与办理。Google 的状况能够拜见《The Datacenter as a Computer: An Introduction to the Design of Warehouse-Scale Machines, Second Edition》。 Google 具有世界上最大的核算机集群,论机器数量的话能在量级上超过一切其他公司。一同,它有一整套主动化办理软件,以便工程师申请和运用这些硬件资本(大致能够了解成一套 Amazon EC2)。就我的了解,现在在一般工程师运用机群硬件资本的方便程度和能够运用的量上,baidu仍是远远不及。
大规划核算与存储。Google 论文老三篇 GFS, MapReduce, BigTable 不再赘述,近年 Google 在这些方面的研发和前进没有停滞甚至在加速。当然baidu也在尽力追逐,baidu不只运用 Hadoop, 并且依据 Hadoop 做了很多改善和拓展,并奉献回 Hadoop 开源社区。baidu在 SSD 存储技能等方面也很有心得,比方 flash 存储方面近来中了的一篇 ASPLOS '14 SDF: Software-Defined Flash for Web-Scale Internet Storage System.
机器学习和人工智能。被吹得神乎其神的 deep learning 和 Google Brain 等等。在 deep learning 这个相对较新的范畴,baidu追逐的更快,水平也更挨近。
机群办理的技能水平决议你能具有和有用运用多少硬件资本,大规划核算与存储决议你能在这些硬件上做多大规划的工作 —— 而最终,查找引擎自身即是一套大规划机器学习体系。
在纯技能之外,我想特别提一点极大影响技能前进,而至少在 2009 年baidu与 Google 距离无穷的要素:一般工程师所能运用的东西水平。我在 Google 感觉最爽的工作是我能够很简略取得很多的核算资本,做曾经无法幻想的大规划数据剖析。要验证一个主意,我能够依据一整天的查找记载做剖析,只需几分钟就能得到成果(可检查:research.谷歌.com/pubs/pub36632.html),进行调整和下一步剖析;而假如没有这套根底软件和能够随意运用的硬件资本,我也许得等一整天才能有成果,或许只能剖析小规划的抽样数据。在我自个的知识和技能水平不变的前提下,Google 这套体系极大地前进了我的工作效率,让我能做到曾经彻底无法幻想的工作。
我觉得作为一个技能人员,黑或许捧哪个公司毫无意义,技能的工作很直接的,身在哪个公司都无法影响根本判别。还在baidu的时分,我就常常想,Mig-25 的故事是个很好的警示,人很简略为相似“双三”这样的成果自鸣得意,而对实打实的根底技能距离视若无睹,不图前进,那远景就适当危险了。幸好据我所知的状况,baidu可没有这麽不争气。
弥补一个实践比如来阐明不一样技能条件下两个公司干事思路的差异。
谈论中有朋友说到baidu的分词技能,这的确是“baidu更懂中文”的一个集中体现。baidu当年做分词的时分很也许是这样的:先从一个人工修改好的字典开端,用这个字典跑一些页面,调查剖析裡面的 bad case —— 也许是分词过细,或许是中文人名没分出来,然后就测验依据中文语法规矩参加规矩或添加词表处理这些 bad case, 如此往复,直到有满足的成果。上线使用,发现有新的 bad case 就再研讨加规矩,当然也有主动流程发现和确认如“人艰不拆”之类的新词。
Google 做分词的话即是把疑问当作一个概率疑问:假如中文页面中哪些字常常一同呈现,那麽它们很有也许即是一个词。看哪些词后边会跟的地得,的地得后边有常跟哪些词,语法结构也就出来了。(详细的模型拜见吴军《数学之美》)。解题思路即是把一切抓到的中文页面往 MapReduce 裡一丢,参数算出来就好了。评价分词质量的办法也很简略,就拿新模型放到页面检索的模型裡,做个实验看质量有没提高就行。这套办法成果之好,根本把中文分词做成了一个没有多少悬念的简略疑问,并且根本不需要中文语言专家的参加(天然也没有谁更懂中文的疑问)。一同这也即是 Google 做 Translate 的思路。这裡面根本办法本来十分简略,没什麽祕密可言,可是你得先有这麽多的页面数据,还得有大机群,有分佈核算结构,还有可复用的模型……
我以为在技能受限的条件下,人工微调优化成果是一个恰当的商品思路,但这个商品思路会与技能发展道路相互影响。关于长尾头部的一千个热词,彻底能够用人工修改的办法做出十分好的成果,而短期内改善通用的机器模型到达人工修改的作用简直不也许。这时分,人工调整也许会受鼓舞,而通用模型的技能改善也许就得不到满足的注重 —— 尽管即便以中国的人力成本,对一切查找成果人工调优也绝无也许,但能搞定长尾头部也不错了不是?Google 的干流技能思路则是骨子裡不相信人工调整,什麽工作都非得弄出个主动通用可拓展的模型来不行,这种思路也许一开端在那一千个热词上怎麽都比不过勤劳接地气的修改,但经过堆集数据调整模型,假以时日,全体成果质量就会明显提高 —— 我即是这麽看 2009 年时 Google 查找质量给我们的压力的。这种思路在详细的商品运营上不一定对,不是人人都有 Google 的资本来花时间做通用技能,但 Google 的确就在这种“技能碾压一切”的(过错?)道路上越走越快。