目录
第1章 文字和语言 vs 数字和信息
第2章 从规则到统计
第3章 统计语言模型
第4章 谈谈中文分词
第5章 隐含马尔可夫模型
第6章 信息的度量和作用
第7章 贾里尼克和现代语言处理
第8章 简单之美—布尔代数和搜索引擎的索引
第9章 图论和网络爬虫
第10章 PageRank—Google的民主表决式网页排名技术
第11章 如何确定网页和查询的相关性
第12章 地图和本地搜索的最基本基数—有限状态机和动态规划
第13章 Google AK-47地设计者—阿米特-辛格博士
第14章 余弦定理和新闻的分类
第15章 矩阵运算和文本处理中的两个分类问题
第16章 信息指纹及其应用
第17章 由电视剧《暗算》所想到的—谈谈密码学地数学原理
第18章 闪光地不一定是金子==谈谈搜索引擎反作弊问题
第19章 谈谈数学模型的重要性
第20章 不要把鸡蛋放到一个篮子里—谈谈最大熵模型
第21章 拼音输入法的数学原理
第22章 自然语言处理的教父马库斯和他的优秀弟子们
第23章 布隆过滤器
第24章 马尔可夫链的扩展—贝叶斯网络
第25章 条件随机场和句法分析
第26章 维特比和他的维特比算法
第27章 再谈文本自动分类问题—期望最大化算法
第28章 逻辑回归和搜索广告
第29章 各个击破算法和 Google 云计算
后记
信息 上下文
自然语言在演变过程中,产生了词义和上下文相关的特性。因此,它的文法是比较复杂的上下文有关文法(Context Dependent Grammar),而程序语言是我们人为设计的,为了便于计算机解码的上下文无关文法(Context Independent Grammar),相比自然语言而言简单得多。
通过上下文已经不能解决,需要常识。
基于规则的自然语言处理和基于统计的自然语言处理。
今天,几乎不再有科学家宣称自己是传统的基于规则方法的捍卫者。而自然语言处理的研究也从单纯的句法分析和语义理解,变成了非常贴近应用的机器翻译、语音识别、文本到数据库自动生成、数据挖掘和知识的获取等等。
数学的精彩之处就在于简单的模型可以干大事。
用低阶语言模型和高阶模型进行线性插值来达到平滑的目的,也是过去行业使用的一种方法,这种方法称为删除差值(Deleted Inter-polation)。
数学的魅力就在于将复杂的问题简单化。
分词的二义性是语言歧义性的一部分。
最后,需要指出的是任何方法都有它的局限性,虽然利用统计语言模型进行分词,可以取得比人工更好的结果,但是也不可能做到百分之百准确。
通信的本质就是一个编解码和传输的过程。
马儿可夫为了简化问题,提出了一种简化的假设,即随机过程中各个状态S(t)的概率分布,只与它的前一个状态S(t-1)有关。
几乎所有的自然语言处理、信息与信号处理的应用都是一个消除不确定性的过程。
合理利用信息,而不是玩弄什么公式和机器学习算法,是做好搜索的关键。
信息的作用在于消除不确定性,自然语言处理的大量问题就是找相关的信息。
贾里尼克的理想在不断改变,但是他通过努力走向成功的志向一直没有改变。
我一直认为,一个人想在自己的领域做到世界一流,他的周围必须有非常多的一流人物。
大多数时候, 很多历史偶然性背后有着它必然的原因,统计自然语言处理诞生于IBM看似有些偶然,但是当时只有IBM有这样的计算能力,又有物质条件同时聚集起一大批世界上最聪明的头脑。
贾里尼克教授在学术上给我最大的帮助就是提高了我在学术上的境界。他告诉我最多的是:什么方法不好。
技术分为术和道两种,具体的做事方法是术,做事的原理和原则是道。
搜素引擎的原理其实非常简单,建立一个搜索引擎大致需要做这样几件事:自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。
但是不论搜索引擎的索引在工程上如何复杂,原理上依然非常简单,即等价于布尔运算。
“(人们)发觉真理在形式上从来是简单的,而不是复杂和含混的。”(Truth is ever to be found in simplicity, and not in the multiplicity and confusion of things.) — 牛顿
DFS、BFS
如何构建一个网络爬虫?
首先,用BFS还是DFS?总结起来,网络爬虫对网页遍历的次序不是简单的BFS或者DFS,而是有一个相对复杂的下载优先级排序的方法。管理这个优先级排序的子系统一般称为调度系统(Scheduler)。
第二,页面的分析和URL的提取。但是现在很多URL的提取就不那么直接了,因为很多网页如今是用一些脚本语言(比如JavaScript)生成的。打开网页的源代码,URL不是直接可见的文本,而是运行这一段脚本后才能得到的结果。
第三,记录哪些网页已经下载过的小本本—URL表。Hash表,如何存储、如何访问和维护。
很多数学方法就是这样,看上去没有什么实际用途,但是随着时间的推移会一下子派上大用场。这恐怕是世界上还有很多人毕生研究数学的原因。
总的来说,对于一个特定的查询,搜索结果的排名取决于两组信息,关于网页的质量信息(Quality),和这个查询与每个网页的相关性信息(Relevance)。
在互联网上,如果一个网页被很多其他网页所链接,说明它受到普遍的承认和依赖,那么它的排名就高。这就是PageRank的核心思想。PageRank算法考虑了这个因素,即网页排名高的网站贡献的链接权重大。
稀疏矩阵。
概括地讲,假定一个关键词w在D(w)个网页中出现过,那么D(w)越大,w的权重越少,反之亦然。
TF-IDF是对搜索关键词地重要性地度量,从理论上,它有很强的理论根据。
在图论中,一个抽象地图包括一些节点和连接它们的弧。如果再考虑每条弧地长度,或者说权重,那么这个图就是加权图(Weighted Graph)。
正确的数学模型可以将一个计算量看似很大的问题的计算复杂度大大降低。这便是数学的妙用。
有限状态机和动态规划的应用非常广泛,远远不止识别地址、导航等地图服务相关领域。它们在语音识别、拼写和语法纠错、拼音输入法、工业控制盒生物的序列分析等领域都有极其重要地应用。
在计算机领域,一个好的算法应该像AK-47冲锋枪那样:简单、有效、可靠性好而且容易读懂(或者说易操作),而不应该故弄玄虚。
辛格这种做事情的哲学,即先帮助用户解决80%的问题,再慢慢解决剩下的20%问题,是在工业界成功的秘诀之一。许多失败并不是因为人不优秀,而是做事情的方法不对,一开始追求大而全地解决方案,之后长时间不能完成,最后不了了之。
当然,辛格之所以总能找到那些简单有效的方法,不是靠直觉,,更不是撞大运,这首先是靠他丰富的研究经验。其次,辛格坚持每天要分析一些搜索结果不好的例子,以掌握第一手地资料,即使在他称为Google Fellow以后,依旧如此。
辛格非常鼓励年轻人要不怕失败,大胆尝试。
分析了特定场景地特征
美国人做事的一个习惯:美国人总是倾向于用机器(计算机)代替人工来完成任务。虽然在短期需要做一些额外的工作,但是从长远看可以节省很多时间和成本。
相比上一章介绍的利用文本特征向量余弦地距离自底向上地分类方法,奇异值分解地优点是能较快地得到结果(在实际应用中),因为它不需要一次次地迭代。但是用这种方法得到的分类结果略显粗糙,因此,它适合处理超大规模文本地粗分类。在实际工作中,可以先进行奇异值分解,得到粗分类结果,再利用计算向量余弦地方法,在粗分类结果的基础上,进行几次迭代,得到比较精确的结果。这样,将这两个方法先后使用,可以充分利用这两个方法的优势,既节省时间,又获得很好地准确性。
一段文字所包含的信息,就是它的信息熵。如果对这段信息进行无损压缩编码,理论上编码后的最短长度就是它的信息熵。
信息指纹的用途远不止网址地消重,它的孪生兄弟是密码。信息指纹的一个特征是其不可逆性,也就是说,无法根据信息指纹推出原有信息。
为了允许有一定的容错能力,在 Google 里采用了一种特定的信息指纹—相似哈希(Simhash)。
视频的匹配有两个核心技术,关键帧的提取和特征的提取。只有极少数的帧是完整的图像,这些称为关键帧。其余帧存储的知识和关键帧的差异值。关键帧对于视频的重要性,就如同主题词对于新闻的重要性一样。
相似哈希的特点是,如果两个网页的相似哈希相差越小,这两个网页的相似性越高。
信息指纹可以理解成将一段信息(文字、图片、音频、视频等)随机地映射到一个多维二进制空间中的一个点(一个二进制数字)。只要这个随机函数做得好,那么不同信息对应的这些点不会重合,因此这些二进制地数字就成了原来信息所具有地独一无二的指纹。
从数学的角度上讲,加密地过程可以看作是一个函数的运算F,解密地过程是反函数地运算。
不管怎么样,我们今天用的所谓最可靠地加密方法,背后的数学原理其实就这么简单,一点也不神秘,无非是找几个大素数做一些乘除和乘方运算就可以了。但就是靠这么简单的数学原理,保证了二战后地密码学几乎无法被破解。冷战时期美苏双方都投入了前所未有的精力取获得对方的情报,但是没有发生过大的因为密码被破而泄密地事件。
密码学地最高境界就是无论敌方获取多少密文,也无法消除己方情报系统的不确定性。为了达到这个目的,就不仅要做到密文之间相互无关,同时密文还是看似完全随机地序列。
搜索引擎的作弊,虽然方法很多,目的只有一个,就是采用不正当手段提高自己网页的排名。
消除噪音
反作弊用到的另一个工具是图论。作弊的网站一般需要互相链接,以提高自己的排名。
结论:1. 一个正确的数学模型应当在形式上市简单的。2.一个正确的模型一开始可能还不如一个精雕细琢过的错误模型来的准确,但是,如果我们认定大方向是对的,就应该坚持下去。3.大量准确的数据对研发很重要。4.正确的模型也可能受噪音干扰,而显得不准确;这时不应该用一种凑合的修正方法来弥补它,而是要找到噪音的根源,这也许能通往重大的发现。
最大熵,说白了,就是要保留全部的不确定性,将风险降到最小。
最大熵原理指出,需要对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知的条件,而对未知的情况不要坐任何主观假设。
最大熵模型可以将各种信息整合到一个统一的模型中。它有很多良好的特性:从形式上看,它非常简单,非常优美;从效果上看,它是唯一一种即可以满足各个信息源的限制条件,同时又能保证平滑(Smooth)性的模型。由于最大熵模型具有这些良好的特性,它的应用范围因而十分广泛。但是,最大熵模型的计算量巨大,在工程上实现方法的好坏决定了模型的实用与否。
全中国除了北京周围的人,大部分人前鼻音和后鼻音、卷舌音和非卷舌音多少有点分不清,经常出现输入韵母和声母后,翻了好几页,也找不到自己想要的字的情况。原因是一开始就选错了韵母或者声母。
本书一开头就强调语言和文字作为通信的编码手段,一个重要目的是帮助思维和记忆。如果一个输入法中断了人们的思维过程,就和人的自然行为不相符合。
最终,用户还是选择了拼音输入法,而且是每个单词编码较长的全拼输入法。第一,它不需要专门学习。第二,输入自然,不会中断思维,也就是说找到每个键的时间非常短。第三,因为编码长,有信息冗余量,容错性好。
香农第一定理指出:对于一个信息,任何编码的长度都不小于它的信息熵。
数学的妙处在于它的每一个工具都具有相当的普遍性,在不同的应用中都可以发挥很大的作用。
为每个人训练一个特定的语言模型,最好是收集足够多这个人自己写的文字,但是一个人一辈子写的东西不足以训练一个语言模型。
汉字的输入过程本身就是人和计算机的通信,好的输入法会自觉或者不自觉地遵循通信的数学模型。当然要做出最有效的输入法,应当自觉使用信息论做指导。
马库斯的主张一贯是建立几个世界上最好的专业,而不是专业最齐全的系。我觉得,当今中国的大学,最需要的就是马库斯这样卓有远见的管理者。
柯林斯:把事情做到极致。
柯林斯和他的师兄弟不同,他做文法分析器的出发点不是为了验证一个理论,而是要做一个世界上最好的分析器。
柯林斯的博士论文堪称自然语言处理领域的范文。它像一本优秀的小说,把所有事情的来龙去脉介绍的清清楚楚,任何有一点计算机和自然语言处理知识的人,都可以轻而易举读懂他复杂的方法。
布莱尔:简单才美。
布莱尔总是试图寻找简单的不能再简单的方法。他能在短时间内大致摸清每种方法的好坏。
布隆过滤器只需要哈希表的1/8到1/4的大小就能解决同样的问题。
常用的补救误识别的办法是再建立一个小的白名单,存储那些可能被误判的信息。
马尔可夫链,它描述了一种状态序列,其每隔状态值取决于前面有限个状态。
假定在这个图中马尔可夫假设成立,即每一个状态只和与它直接相连的状态有关,而和它间接相连的状态没有直接关系,那么它就是贝叶斯网络。
从数学的层面讲,贝叶斯网络是一个加权的有向图,是马尔可夫链的扩展。而从认识论的层面看:贝叶斯网络客服了马尔可夫链那种机械的线性的约束,它可以把任何相关联的事件统一到它的框架下面。
可见好方法在形式上常常是简单的。
条件随机场是无向图,而贝叶斯网络是有向图。
条件随机场是一个非常灵活的用于预测的统计模型。和最大熵模型一样,条件随机场的形式简单,但是实现复杂,所幸的是现在有不少开源软件可供使用,对于一般的工程人员应该是足够了。
维特比算法是一个特殊但应用最广的动态规划算法。利用动态规划,可以解决任何一个图中的最短路径问题。而维特比算法是针对一个特殊的图—篱笆网络的有向图的最短路径问题而提出的。它之所以重要,是因为凡是使用隐含马尔可夫模型描述的问题都可以用它来解码,包括今天的数字通信、语音识别、机器翻译、拼音转汉字、分词等。
维特比算法是和长度成正比的。
频分多址顾名思义,是对频率进行切分,每一路通信使用一个不同的频率,对讲机采用的就是这个原理。
时分多址是将同一频带按时间分成多份。每个人的(语音)通信数据在压缩后只占用这个频带传输的1/N时间,这样同一个频带可以被多个人同时使用。
码分多址,根据不同的密码区分发送。
维特比的财富来自于他将技术转换成商业的成功。
维特比不仅提供了关键性的发明,而且为了保障这项关键性的发明的效益在全社会得到最大化,他解决了所有配套的技术。
和前面章节介绍的方法不同的是,这里既不需要事先设定好类别,也不需要对文本两两比较进行合并聚类。而是随机地挑出一些类的中心,然后来优化这些中心,使它们和真实的聚类中心尽可能一致。
在一般性的问题中,如果有非常多的观测数据(点),类似上面的方法,让计算机不断迭代来学习一个模型。首先,根据现有的模型,计算各个观测数据输入到模型中的计算结果,这个过程称为期望值计算过程(Expectation),或 E 过程;接下来,重新计算模型参数,以最大化期望值。在上面的例子中,我们最大化D和-d,这个过程称为最大化的过程(Maximization),或 M 过程。这一类算法都称为 EM 算法。
EM算法只需要有一些训练数据,定义一个最大化函数,剩下的事情就交给计算机了。经过若干次迭代,我们需要的模型就训练好了。
逻辑回归模型是将一个事件出现的概率适应到一条逻辑曲线(Logistic Curve,其值域在(0, 1)之间)上。逻辑曲线使一条 S 型的曲线,其特点是开始变化快,逐渐减慢,最后饱和。
逻辑回归模型使一种将影响概率的不同因素结合在一起的指数模型。
云计算的一个关键问题是,如何把一个非常大的计算问题,自动分解到许多计算能力不是很强大的计算机上,共同完成。Google 针对这个问题给出的解决工具是一个叫 MapReduce 的程序,其根本原理就是计算机算法上很常见的分治算法(Divide-and-Conquer),我称之为“各个击破”法。
这就是 MapReduce 的根本原理。将一个大任务拆分成小的子任务,并且完成子任务的计算,这个过程叫做 Map,将中间结果合并成最终结果,这个过程叫做 Reduce。当然如何将一个大矩阵自动拆分,保证各个服务器负载均衡,如何合并返回值,就是 MapReduce 在工程上所做的事情了。
透过对 IT 规律性的认识,读者可以举一反三地总结、学习、认识和自觉使用自己工作中的规律性,这样有助于将自己的境界提升一个层次。
我想这可能是他们成为世界顶级科学家的原因,他们一方面对自己的领域非常精通,同时他们能把道理讲清楚。