新经济地理

空间信息技术与区域经济
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

数学之美 三

Posted on 2007-11-09 13:46  wuxb  阅读(302)  评论(0编辑  收藏  举报
 

数学之美系列十一 - Google 阿卡 47 的制造者阿米特.辛格博士

2006710上午 09:52:00

发表者:Google 研究员,吴军

枪迷或者看过尼古拉斯.凯奇(Nicolas Cage)主演的电影战争之王Lord of
War)
的人也许还记得影片开头的一段话:(在所有轻武器中,)最有名的是阿卡 47( AK47)冲锋枪(也就是中国的五六式冲锋枪的原型),因为它从不卡壳、从不损坏、可在任何环境下使用、可靠性好、杀伤力大并且操作简单。

我认为,在计算机中一个好的算法,应该向阿卡 47 冲锋枪那样简单、有效、可靠性好而且容易读懂(或者说易操作),而不应该是故弄玄虚。Google 的杰出工程师阿米特.辛格博士 (Amit Singhal) 就是为 Google 设计阿卡 47 冲锋枪的人,在公司内部,Google 的排序算法便是以他的名字命名的。

从加入 Google 的第一天,我就开始了和辛格长期而愉快的合作,而他一直是我的一个良师益友。辛格、Matt Cutts(中国一些用户误认为他是联邦调查局特工,当然他不是)、马丁和我四个人当时一同研究和解决网络搜索中的作弊问题(Spam)。我们需要建一个分类器,我以前一直在学术界工作和学习,比较倾向找一个很漂亮的解决方案。我设计了一个很完美的分类器,大约要花三个月到半年时间来实现和训练,而辛格认为找个简单有效的办法就行了。我们于是尽可能简化问题,一、两个月就把作弊的数量减少了一半。当时我们和公司工程副总裁罗森打了个赌,如果我们能减少 40% 的作弊,他就送我们四个家庭去夏威夷度假,后来罗森真的履约了。这个分类器设计得非常小巧(只用很小的内存),而且非常快速(几台服务器就能处理全球搜索的分类),至今运行得很好。

后来我和辛格一起又完成了许多项目,包括对中、日、韩文排名算法的改进。每一次,辛格总是坚持找简单有效的解决方案。这种做法在 Google 这个人才济济的公司常常招人反对,因为很多资深的工程师怀疑这些简单方法的有效性。不少人试图用精确而复杂的办法对辛格的设计的各种阿卡47”进行改进,后来发现几乎所有时候,辛格的简单方法都接近最优化的解决方案,而且还快得多。另一条选择简单方案的原因是这样设计的系统很容易查错(debug)

当然,辛格之所以总是能找到那些简单有效的方法,不是靠直觉,更不是撞大运,而是靠他丰富的研究经验。辛格早年从师于搜索大师萨尔顿(Salton)教授,毕业后就职于 AT&T 实验室。在那里,他和两个同事半年就搭起了一个中等规模的搜索引擎,这个引擎索引的网页数量虽然无法和商用的引擎相比,但是准确性却非常好。在 AT&T,他对搜索问题的各个细节进行了仔细的研究,他的那些简单而有效的解决方案,常常是深思熟虑去伪存真的结果。

辛格非常鼓励年轻人不怕失败,大胆尝试。一次一位刚毕业不久的工程师因为把带有错误的程序推出到 Google 的服务器上而惶惶不可终日。辛格安慰她讲,你知道,我在 Google 犯的最大一次错误是曾经将所有网页的相关性得分全部变成了零,于是所有搜索的结果全部是随机的了。这位工程师后来为 Google 开发了很多好的产品。

辛格在 AT&T 时确立了他在学术界的地位,但是,他不是一个满足于做实验写论文的人,于是他离开了实验室来到了当时只有百、十人的 Google。在这里,他得以施展才智,重写了 Google 的排名算法,并且一直在负责改进它。辛格因为舍不得放下两个孩子,很少参加各种会议,但是他仍然被学术界公认为是当今最权威的网络搜索专家。2005年,辛格作为杰出校友被请回母校康乃尔大学计算机系在 40 年系庆上作报告,获得这一殊荣的还有大名鼎鼎的美国工程院院士,计算机独立磁盘冗余阵列(RAID)的发明人凯茨(Randy Katz) 教授。

数学之美系列 12 - 余弦定理和新闻的分类

2006720上午 10:12:00

发表者:吴军,Google 研究员

余弦定理和新闻的分类似乎是两件八杆子打不着的事,但是它们确有紧密的联系。具体说,新闻的分类很大程度上依靠余弦定理。

Google
的新闻是自动分类和整理的。所谓新闻的分类无非是要把相似的新闻放到一类中。计算机其实读不懂新闻,它只能快速计算。这就要求我们设计一个算法来算出任意两篇新闻的相似性。为了做到这一点,我们需要想办法用一组数字来描述一篇新闻。

我们来看看怎样找一组数字,或者说一个向量来描述一篇新闻。回忆一下我们在如何度量网页相关性一文中介绍的TF/IDF 的概念。对于一篇新闻中的所有实词,我们可以计算出它们的单文本词汇频率/逆文本频率值(TF/IDF)。不难想象,和新闻主题有关的那些实词频率高,TF/IDF 值很大。我们按照这些实词在词汇表的位置对它们的 TF/IDF 值排序。比如,词汇表有六万四千个词,分别为

单词编号汉字词
------------------
1

2

3
阿斗
4
阿姨
...
789
服装
....
64000
做作

在一篇新闻中,这 64,000 个词的 TF/IDF 值分别为

单词编号 TF/IDF
==============
1 0
2 0.0034
3 0
4 0.00052
5 0
...
789 0.034
...
64000 0.075


如果单词表中的某个次在新闻中没有出现,对应的值为零,那么这 64,000 个数,组成一个64,000维的向量。我们就用这个向量来代表这篇新闻,并成为新闻的特征向量。如果两篇新闻的特征向量相近,则对应的新闻内容相似,它们应当归在一类,反之亦然。

学过向量代数的人都知道,向量实际上是多维空间中有方向的线段。如果两个向量的方向一致,即夹角接近零,那么这两个向量就相近。而要确定两个向量方向是否一致,这就要用到余弦定理计算向量的夹角了。

余弦定理对我们每个人都不陌生,它描述了三角形中任何一个夹角和三个边的关系,换句话说,给定三角形的三条边,我们可以用余弦定理求出三角形各个角的角度。假定三角形的三条边为 a, b c,对应的三个角为 A, B C,那么角 A 的余弦 --



如果我们将三角形的两边 b c 看成是两个向量,那么上述公式等价于



其中分母表示两个向量 b c 的长度,分子表示两个向量的内积。举一个具体的例子,假如新闻 X 和新闻 Y 对应向量分别是
x1,x2,...,x64000

y1,y2,...,y64000,
那么它们夹角的余弦等于,



当两条新闻向量夹角的余弦等于一时,这两条新闻完全重复(用这个办法可以删除重复的网页);当夹角的余弦接近于一时,两条新闻相似,从而可以归成一类;夹角的余弦越小,两条新闻越不相关。



我们在中学学习余弦定理时,恐怕很难想象它可以用来对新闻进行分类。在这里,我们再一次看到数学工具的用途。

数学之美系列十三信息指纹及其应用

200683上午 11:17:00

发表者:吴军,Google 研究员

任何一段信息文字,都可以对应一个不太长的随机数,作为区别它和其它信息的指纹(Fingerprint)。只要算法设计的好,任何两段信息的指纹都很难重复,就如同人类的指纹一样。信息指纹在加密、信息压缩和处理中有着广泛的应用。

我们在图论和网络爬虫一文中提到,为了防止重复下载同一个网页,我们需要在哈希表中纪录已经访问过的网址(URL)。但是在哈希表中以字符串的形式直接存储网址,既费内存空间,又浪费查找时间。现在的网址一般都较长,比如,如果在 Google 或者百度在查找数学之美,对应的网址长度在一百个字符以上。下面是百度的链接

http://www.baidu.com/s?ie=gb2312&bs=%CA%FD%D1%A7%D6%AE%C3%C0&sr=&z=&cl=3&f=8
&wd=%CE%E2%BE%FC+%CA%FD%D1%A7%D6%AE%C3%C0&ct=0


假定网址的平均长度为一百个字符,那么存贮 200 亿个网址本身至少需要 2 TB,即两千 GB 的容量,考虑到哈希表的存储效率一般只有 50%,实际需要的内存在 4 TB以上。即使把这些网址放到了计算机的内存中,由于网址长度不固定,以字符串的形式查找的效率会很低。因此,我们如果能够找到一个函数,将这 200 亿个网址随机地映射到128 二进位即 16 个字节的整数空间,比如将上面那个很长的字符串对应成一个如下的随机数:

893249432984398432980545454543

这样每个网址只需要占用 16 个字节而不是原来的一百个。这就能把存储网址的内存需求量降低到原来的 1/6。这个16 个字节的随机数,就称做该网址的信息指纹(Fingerprint)。可以证明,只要产生随机数的算法足够好,可以保证几乎不可能有两个字符串的指纹相同,就如同不可能有两个人的指纹相同一样。由于指纹是固定的 128 位整数,因此查找的计算量比字符串比较小得多。网络爬虫在下载网页时,它将访问过的网页的网址都变成一个个信息指纹,存到哈希表中,每当遇到一个新网址时,计算机就计算出它的指纹,然后比较该指纹是否已经在哈希表中,来决定是否下载这个网页。这种整数的查找比原来字符串查找,可以快几倍到几十倍。

产生信息指纹的关键算法是伪随机数产生器算法(prng)。最早的 prng 算法是由计算机之父冯诺伊曼提出来的。他的办法非常简单,就是将一个数的平方掐头去尾,取中间的几位数。比如一个四位的二进制数 1001(相当于十进制的9),其平方为 01010001 (十进制的 81)掐头去尾剩下中间的四位 0100。当然这种方法产生的数字并不很随机,也就是说两个不同信息很有可能有同一指纹。现在常用的 MersenneTwister 算法要好得多。

信息指纹的用途远不止网址的消重,信息指纹的的孪生兄弟是密码。信息指纹的一个特征是其不可逆性, 也就是说,
无法根据信息指纹推出原有信息,这种性质,正是网络加密传输所需要的。比如说,一个网站可以根据用户的Cookie 识别不同用户,这个 cookie 就是信息指纹。但是网站无法根据信息指纹了解用户的身份,这样就可以保护用户的隐私。在互联网上,加密的可靠性,取决于是否很难人为地找到拥有同一指纹的信息,比如一个黑客是否能随意产生用户的 cookie。从加密的角度讲 MersenneTwister,算法并不好,因为它产生的随机数有相关性。

互联网上加密要用基于加密伪随机数产生器(csprng)。常用的算法有 MD5 或者 SHA1 等标准,它们可以将不定长的信息变成定长的 128 二进位或者 160 二进位随机数。值得一提的事,SHA1 以前被认为是没有漏洞的,现在已经被中国的王小云教授证明存在漏洞。但是大家不必恐慌,因为这和黑客能真正攻破你的注册信息是还两回事。

信息指纹的虽然历史很悠久,但真正的广泛应用是在有了互联网以后,这几年才渐渐热门起来。

数学之美十四谈谈数学模型的重要性

200689上午 09:12:00

发表者:吴军,Google 研究员

[
注:一直关注数学之美系列的读者可能已经发现,我们对任何问题总是在找相应的准确的数学模型。为了说明模型的重要性,今年七月份我在 Google 中国内部讲课时用了整整一堂课来讲这个问题,下面的内容是我讲座的摘要。]

在包括哥白尼、伽利略和牛顿在内的所有天文学家中,我最佩服的是地心说的提出者托勒密。虽然天文学起源于古埃及,并且在古巴比伦时,人们就观测到了五大行星(金、木、水、火、土)运行的轨迹,以及行星在近日点运动比远日点快。(下图是在地球上看到的金星的轨迹,看过达芬奇密码的读者知道金星大约每四年在天上画一个五角星。)



但是真正创立了天文学,并且计算出诸多天体运行轨迹的是两千年前古罗马时代的托勒密。虽然今天我们可能会嘲笑托勒密犯的简单的错误,但是真正了解托勒密贡献的人都会对他肃然起敬。托勒密发明了球坐标,定义了包括赤道和零度经线在内的经纬线,他提出了黄道,还发明了弧度制。

当然,他最大也是最有争议的发明是地心说。虽然我们知道地球是围绕太阳运动的,但是在当时,从人们的观测出发,很容易得到地球是宇宙中心的结论。从地球上看,行星的运动轨迹是不规则的,托勒密的伟大之处是用四十个小圆套大圆的方法,精确地计算出了所有行星运动的轨迹。(托勒密继承了毕达格拉斯的一些思想,他也认为圆是最完美的几何图形。)托勒密模型的精度之高,让以后所有的科学家惊叹不已。即使今天,我们在计算机的帮助下,也很难解出四十个套在一起的圆的方程。每每想到这里,我都由衷地佩服托勒密。一千五百年来,人们根据他的计算决定农时。但是,经过了一千五百年,托勒密对太阳运动的累积误差,还是差出了一星期。


地心说的示意图,我国天文学家张衡的浑天地动说其实就是地心说。

纠正地心说错误不是靠在托勒密四十个圆的模型上再多套上几个圆,而是进一步探索真理。哥白尼发现,如果以太阳为中心来描述星体的运行,只需要 8-10 个圆,就能计算出一个行星的运动轨迹,他提出了日心说。很遗憾的事,哥白尼正确的假设并没有得到比托勒密更好的结果,哥白尼的模型的误差比托勒密地要大不少。这是教会和当时人们认为哥白尼的学说是邪说的一个原因,所以日心说要想让人心服口服地接受,就得更准确地描述行星运动。

完成这一使命的是开普勒。开普勒在所有一流的天文学家中,资质较差,一生中犯了无数低级的错误。但是他有两条别人没有的东西,从他的老师第谷手中继承的大量的、在当时最精确的观测数据,以及运气。开普勒很幸运地发现了行星围绕太阳运转的轨道实际是椭圆形的,这样不需要用多个小圆套大圆,而只要用一个椭圆就能将星体运动规律描述清楚了。只是开普勒的知识和水平不足以解释为什么行星的轨道是椭圆形的。最后是伟大的科学家牛顿用万有引力解释了这个问题。

故事到这里似乎可以结束了。但是,许多年后,又有了个小的波澜。天文学家们发现,天王星的实际轨迹和用椭圆模型算出来的不太符合。当然,偷懒的办法是接着用小圆套大圆的方法修正,但是一些严肃的科学家在努力寻找真正的原因。英国的亚当斯和法国的维内尔(Verrier)独立地发现了吸引天王星偏离轨道的海王星。

讲座结束前,我和 Google 中国的工程师们一同总结了这么几个结论:
. 一个正确的数学模型应当在形式上是简单的。(托勒密的模型显然太复杂。)
. 一个正确的模型在它开始的时候可能还不如一个精雕细琢过的错误的模型来的准确,但是,如果我们认定大方向是对的,就应该坚持下去。(日心说开始并没有地心说准确。)
. 大量准确的数据对研发很重要。
. 正确的模型也可能受噪音干扰,而显得不准确;这时我们不应该用一种凑合的修正方法来弥补它,而是要找到噪音的根源,这也许能通往重大发现。

在网络搜索的研发中,我们在前面提到的单文本词频/逆文本频率指数(TF/IDF) 和网页排名(page rank)都相当于是网络搜索中的椭圆模型,它们都很简单易懂。

数学之美系列十五繁与简自然语言处理的几位精英

2006823下午 11:22:00

发表者:吴军,Google 研究员

我在数学之美系列中一直强调的一个好方法就是简单。但是,事实上,自然语言处理中也有一些特例,比如有些学者将一个问题研究到极致,执著追求完善甚至可以说完美的程度。他们的工作对同行有很大的参考价值,因此我们在科研中很需要这样的学者。在自然语言处理方面新一代的顶级人物麦克尔 · 柯林斯 (Michael Collins) 就是这样的人。

柯林斯:追求完美

柯林斯从师于自然语言处理大师马库斯 (Mitch Marcus)(我们以后还会多次提到马库斯),从宾夕法利亚大学获得博士学位,现任麻省理工学院 (MIT) 副教授(别看他是副教授,他的水平在当今自然语言处理领域是数一数二的),在作博士期间,柯林斯写了一个后来以他名字命名的自然语言文法分析器 (sentence parser),可以将书面语的每一句话准确地进行文法分析。文法分析是很多自然语言应用的基础。虽然柯林斯的师兄布莱尔 (Eric Brill) Ratnaparkhi 以及师弟 Eisnar 都完成了相当不错的语言文法分析器,但是柯林斯却将它做到了极致,使它在相当长一段时间内成为世界上最好的文法分析器。柯林斯成功的关键在于将文法分析的每一个细节都研究得很仔细。柯林斯用的数学模型也很漂亮,整个工作可以用完美来形容。我曾因为研究的需要,找柯林斯要过他文法分析器的源程序,他很爽快地给了我。我试图将他的程序修改一下来满足我特定应用的要求,但后来发现,他的程序细节太多以至于很难进一步优化。柯林斯的博士论文堪称是自然语言处理领域的范文。它像一本优秀的小说,把所有事情的来龙去脉介绍的清清楚楚,对于任何有一点计算机和自然语言处理知识的人,都可以轻而易举地读懂他复杂的方法。

柯林斯毕业后,在 AT&T 实验室度过了三年快乐的时光。在那里柯林斯完成了许多世界一流的研究工作诸如隐含马尔科夫模型的区别性训练方法,卷积核在自然语言处理中的应用等等。三年后,AT&T 停止了自然语言处理方面的研究,柯林斯幸运地在 MIT 找到了教职。在 MIT 的短短几年间,柯林斯多次在国际会议上获得最佳论文奖。相比其他同行,这种成就是独一无二的。柯林斯的特点就是把事情做到极致。如果说有人喜欢繁琐哲学,柯林斯就是一个。

布莱尔:简单才美

在研究方法上,站在柯林斯对立面的典型是他的师兄艾里克 · 布莱尔 (Eric Brill) 和雅让斯基,后者我们已经介绍过了,这里就不再重复。与柯林斯从工业界到学术界相反,布莱尔职业路径是从学术界走到工业界。与柯里斯的研究方法相反,布莱尔总是试图寻找简单得不能再简单的方法。布莱尔的成名作是基于变换规则的机器学习方法 (transformation rule based machine learning)。这个方法名称虽然很复杂,其实非常简单。我们以拼音转换字为例来说明它:

第一步,我们把每个拼音对应的汉字中最常见的找出来作为第一遍变换的结果,当然结果有不少错误。比如,常识可能被转换成长识

第二步,可以说是去伪存真,我们用计算机根据上下文,列举所有的同音字替换的规则,比如,如果 chang 被标识成,但是后面的汉字是,则将改成

第三步,应该就是去粗取精,将所有的规则用到事先标识好的语料中,挑出有用的,删掉无用的。然后重复二三步,直到找不到有用的为止。

布莱尔就靠这么简单的方法,在很多自然语言研究领域,得到了几乎最好的结果。由于他的方法再简单不过了,许许多多的人都跟着学。布莱尔可以算是我在美国的第一个业师,我们俩就用这么简单的方法作词性标注 (part of speech tagging),也就是把句子中的词标成名词动词,很多年内无人能超越。(最后超越我们的是后来加入 Google 的一名荷兰工程师,用的是同样的方法,但是做得细致很多)布莱尔离开学术界后去了微软研究院。在那里的第一年,他一人一年完成的工作比组里其他所有人许多年做的工作的总和还多。后来,布莱尔又加入了一个新的组,依然是高产科学家。据说,他的工作真正被微软重视要感谢 Google,因为有了 Google,微软才对他从人力物力上给于了巨大的支持,使得布莱尔成为微软搜索研究的领军人物之一。在研究方面,布莱尔有时不一定能马上找到应该怎么做,但是能马上否定掉一种不可能的方案。这和他追求简单的研究方法有关,他能在短时间内大致摸清每种方法的好坏。

由于布莱尔总是找简单有效的方法,而又从不隐瞒自己的方法,所以他总是很容易被包括作者我自己在内的很多人赶上和超过。好在布莱尔很喜欢别人追赶他,因为,当人们在一个研究方向超过他时,他已经调转船头驶向它方了。一次,艾里克对我说,有一件事我永远追不上他,那就是他比我先有了第二个孩子:)

在接下来了系列里,我们还会介绍一个繁与简结合的例子。