百度作为中国最大的搜索引擎,在前期的算法肯定是有参照过谷歌这个老大哥,但也不会全部一样,比较大家都知道百度更懂中文,而谷歌更懂英文。谷歌算法和百度算法有什么区别,咱们先从一故事开始分析:开头先扯个不相干的领域,苏联 1960 年代装备的 Mig-25截击机,这是世界上第一款能飞双三(三倍音速,30000米升限)的战斗机。西方世界面对这变态的性能参数惊诧莫名,推断苏联在航空技术上已全面超越西方。直到别连科驾驶Mig-25叛逃西方,他们终于有机会接触真机,才发现它使用的技术其实没那麽先进,变态的性能指标都是用普通的技术基础硬干上去的,飞机非常笨拙以至有直线战斗机的称号,可怜的发动机要真飞一次三倍音速落地就得报废。苏联的航空技术并没有他们想象的这麽逆天。
下面列几个重要的而且公开资料较多的基础技术:大规模计算与存储。Google 论文老三篇 GFS, MapReduce, BigTable 不再赘述,近年 Google在这些方面的研发和进步没有停滞甚至在加快。当然百度也在努力追赶,百度不仅使用 Hadoop, 而且基于 Hadoop 做了大量改进和扩展,并贡献回 Hadoop开源社区。百度在 SSD 存储技术等方面也很有心得,比如 flash 存储方面最近中了的一篇 ASPLOS 14 SDF: Software-DefinedFlash for Web-Scale Internet Storage System.机器学习和人工智能。被吹得神乎其神的 deep learning 和 Google Brain 等等。在 deep learning这个相对较新的领域,百度追赶的更快,水平也更接近。
机群管理的技术水平决定你能拥有和有效使用多少硬件资源,大规模计算与存储决定你能在这些硬件上做多大规模的事情 ——而最后,搜索引擎本身就是一套大规模机器学习系统。在纯技术之外,我想特别提一点极大影响技术进步,而至少在 2009 年百度与 Google 差距巨大的因素:普通工程师所能使用的工具水平。我在Google感觉最爽的事情是我可以很容易获得大量的计算资源,做以前无法想象的大规模数据分析。要验证一个想法,我可以基于一整天的搜索记录做分析,只需几分钟就能得到结果(可查看:research.google.com/pubs/pub36632.html),进行调整和下一步分析;而如果没有这套基础软件和可以随意使用的硬件资源,我可能得等一整天才能有结果,或者只能分析小规模的抽样数据。在我自己的知识和技术水平不变的前提下,Google这套系统极大地提高了我的工作效率,让我能做到以前完全无法想象的事情。
我觉得作为一个技术人员,黑或者捧哪个公司毫无意义,技术的事情很直接的,身在哪个公司都无法影响基本判断。还在百度的时候,我就经常想,Mig-25的故事是个很好的警示,人很容易为类似双三这样的成就沾沾自喜,而对实打实的基础技术差距视而不见,不图进步,那前景就相当危险了。幸好据我所知的情况,百度可没有这麽不争气。补充一个实际例子来说明不同技术条件下两个公司做事思路的区别。评论中有朋友提到百度的分词技术,这确实是百度更懂中文的一个集中体现。百度当年做分词的时候很可能是这样的:先从一个人工编辑好的字典开始,用这个字典跑一些网页,观察分析裡面的bad case —— 可能是分词过细,或者是中文人名没分出来,然后就尝试根据中文语法规律加入规则或添加词表解决这些 bad case,如此往复,直到有满意的结果。上线应用,发现有新的 bad case 就再研究加规则,当然也有自动流程发现和确认如人艰不拆之类的新词。
Google做分词的话就是把问题看成一个概率问题:如果中文网页中哪些字经常一起出现,那麽它们很有可能就是一个词。看哪些词后面会跟的地得,的地得后面有常跟哪些词,语法结构也就出来了。(具体的模型参见吴军《数学之美》)。解题思路就是把所有抓到的中文网页往MapReduce裡一丢,参数算出来就好了。评估分词质量的方法也很简单,就拿新模型放到网页检索的模型裡,做个实验看质量有没提升就行。这套方法结果之好,基本把中文分词做成了一个没有多少悬念的简单问题,而且基本不需要中文语言专家的参与(自然也没有谁更懂中文的问题)。同时这也就是Google 做 Translate的思路。这裡面基本方法其实非常简单,没什麽祕密可言,但是你得先有这麽多的网页数据,还得有大机群,有分佈计算框架,还有可复用的模型……