之前本科在北邮参加一个讲座的拍摄时,有幸与本书作者合影。当时是我还不是很了解吴军博士,只觉得他是个很厉害的人。当读完《数学之美》这本书后,我不由得对他肃然起敬。虽然书名看起来像是一本数学教材,但本书主要讲的是数学在机器学习等领域的神奇用处。最难能可贵的是作者将很多知识点都讲的浅显易懂,文风和刘未鹏有些相似。用作者本人的话说就是:一个技术或者问题有“术”和“道”之分!这本书讲的比较偏向“道”!读了这本书我恍然大悟,数学原来并不只是枯燥的考试题,而是人类理解世界最重要的一种工具。数学不仅有用而且还有无穷魅力!
自然语言处理(NLP)走的大弯路
NLP的发展历程就是一个很有趣也很有代表性的例子,其近70年的发展过程基本上可以分为2个阶段。
早期的20多年,即从20世纪50年代到70年代,是科学家们走弯路的阶段。全世界的科学家对NLP的认识都局限在人类学习语言的方式,也就是说,用电脑模拟人脑。当时,学术界对人工智能和NLP的普遍认为:要让机器完成翻译或者语音识别等只有人类才能做的事情,就必须让计算机理解自然语言,而做到这有点就必须让计算机拥有我们人类这样的智能。为什么会有这样的认为呢?因为我们人类就是这么做的,道理就这么简单。对于人类来说,一个能把英语翻译成汉语的人,必定能很好地理解这两种语言。这就是直觉的作用。所以当时的主要研究方向是分析语句和获取语义。在人工智能领域,后来把这样的方法论称为“鸟飞派”,也就是看看鸟是怎样飞的,就能模仿鸟造出飞机,而不需要了解空气动力学。实际上我们知道,怀特兄弟发明飞机靠的是空气动力学而不是仿生学。今天,机器翻译和语音识别已经做得不错,并且有上亿人使用过,但是这个领域之外的大部分人依然错误地以为这两种应用是靠计算机理解了自然语言才实现的。事实上,它们全都靠得是数学,更准确地说是靠统计。
从NLP到NMP
自然语言从它产生开始,逐渐演变成一种上下文相关的信息表达和传递方式,因此让计算机处理自然语言,一个基本的问题就是为自然语言这种上下文相关的特性建立数学模型。这个模型就是我们常说的统计语言模型,它是今天所有NLP的基础,并且广泛应用于机器翻译、语音识别、印刷体或手写体识别、拼音纠错、汉字输入和文献查询。一般使用的是二元模型(马尔可夫链),假设任意一个词出现的概率之和他前面一个词有关。由于大部分条件概率是零,所以要使用古德—图灵估计公式对其进行平滑处理,即卡茨退避法。Google的罗塞塔翻译系统和语音搜索系统,使用的是四元模型,该模型存储于500台以上的Google服务器上。2005年,Google使用比其他研究机构多几千甚至上万倍的数据,训练出了一个六元模型,开发出了当时世界上最好的机器翻译系统。
NLP部分应用因为自己搭建了一个开源曲谱库的关系,所以我就想是不是能够以曲谱库为依托,建立一个统计音乐模型,用于自然音乐处理(Natural Music Processing)方面的研究 。下图是我通过整理、类比得到的NMP可能具有的相关前景。
个人觉得,NMP的首要工作还是建立一个完善且庞大的曲谱库,为统计音乐模型的训练提供充足的训练样本,避免模型的过拟合。二元模型具体实现设想如下:可以先将音乐按照节拍分成N小节,然后以小节为单位训练二元模型。不同应用时,分节粒度可能不同。
NLP与通信
隐含马尔可夫模型最初应用于通信领域,那么它是怎么和NLP扯上关系的呢?
我们不妨换个角度来思考这个问题。所谓语音识别,就是听者去猜测说话者要表达的意思。这其实就像通信中,接收端根据收到的信号去分析、理解、还原发送端传送过来的信息。我们平时在说话时,脑子就是一个信息源。我们的喉咙(声带)、空气,就是如同电线和光缆般的信道。听众的耳朵就是接收器,而听到的声音就是传送过来的信号。根据声学信号来推测说话者的意思,就是语音识别。
同样,很多NLP的应用也可以这样理解。在从汉语到英语的翻译中,说话者讲的是汉语,但是信道编码的方式是英语,如果利用计算机,根据接收到的英语信息,推测说话者的汉语意思,就是机器翻译。同样,如果要根据带有拼写错误的语句推测说话者想要表达的汉语意思,就是自动纠错。这样,几乎所有的NLP问题都可以等价成通信解码问题。
隐含马尔可夫模型最早成功应用是语音识别,最出名的是贾里尼克领导的IBM华生实验室以及李开复研发的世界上第一个大词汇量连续语音识别系统Sphinx。在贾里尼克之前,科学家们把语音识别问题当作人工智能和模式匹配问题,而贾里尼克把它当成通信问题,并用2个隐含马尔可夫模型(声学模型和语言模型)把语言识别概括得清清楚楚。同时,隐含马尔可夫模型也是机器学习的主要工具。几乎和所有机器学习的主要工具一样,它需要一个训练算法(鲍姆—韦尔奇算法)和使用时的解码算法(维特比算法)。如今,隐含马尔可夫模型被广泛应用于机器翻译、拼音纠错、手写体识别、图像处理、基因序列分析以及股票预测和投资。
【思考】:乐谱识别是不是也能当成通信问题,使用声学模型和音乐模型来解决呢?
这里还有个小插曲:我想既然可以把乐谱识别看成通信,那能否用音乐的不同音符来加密传输信息呢?就当我以为我有了重大发现的时候,我看到了CDMA之母海蒂·拉玛,恍然大悟。
坚果手机广告
上世纪四十代初的某一天,海蒂·拉玛结识了擅长钢琴的安塞尔,二人聊得投机。安塞尔为她弹琴时,海蒂突发奇想:跳动的琴键发出不同频率的声音,那么用这样跳动的频率是不是可以实现保密通信?
这就是跳频, CDMA技术的核心概念。跳频好比是把长篇的内容分成很多小节,每发一节就换一个频率再发下一节。发送方和接收方只要协调好变换频率的规则,就可以实现通信。只要每一小节足够短小,它就会被支离破碎地淹没在杂波背景当中,第三方甚至都侦测不到这一路通信的存在,更别说监听截取了。身处战争年代,在政军要员之间耳濡目染,使她对保密通信有所意识,加上海蒂早年学习过通信专业,只不过后来为了演电影,辍学了。
不多日,这件专利诞生了:
搜索引擎一把梭
搜索引擎的原理非常简单,建立一个搜索引擎大致需要做这样几件事:自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序。
下载
- 图论中的遍历算法
- 广度优先算法(BFS)
- 深度优先算法(DFS)
- 散列表:记录是否下载过该网页
索引
- 布尔运算
- 根据网页的重要性、质量和访问的频率建立常用和非常用等不同级别的索引。
排序
搜索结果的排名取决于两组信息:网页的质量信息,以及这个查询与每个网页的相关性信息
网页质量
PageRank算法的核心是迭代计算每个网页的权重,然后通过权重的大小对网页排名。
迭代初始时每个网页的权重是一样的,然后通过计算更新每个网页的权重,规则如下:
1、当一个网页被越多的网页引用时,它的权重越大
2、当一个网页的权重越大时,它引用的网页的权重也随之变大
3、当一个网页引用的网页越多时,被它引用的网页获得的权重就越小
如此反复迭代,算法最终会收敛到一个固定的排名。
网页相关性
TF-IDF方法(Term Frequency-Inverse Document Frequency)
TF:单文本词频,是某一个给定的词语在该文件中出现的频率。这个数字是对词数(term count)的归一化,以防止它偏向长的文件。(同一个词语在长文件里可能会比短文件有更高的词数。)
IDF:逆文本频率指数,是一个词语普遍重要性的度量。某一特定词语的idf,可以由总文件数目除以包含该词语之文件的数目,再将得到的商取以10为底的对数得到。
两个网站间的相似性 = ∑(关键词 * 词频 * 权重)
Google AK-47 的设计哲学
在计算机领域,一个好的算法应该像AK-47那样:简单、有效、可靠性好并且容易读懂(或者说易操作),而不应该故弄玄虚。美国工程院院士阿米特·辛格博士就是Google AK-47 的设计者,Google内部的排序算法Ascorer里面的A便是他名字首字母。辛格这种做事的哲学,即先帮助用户解决80%的问题,再慢慢解决剩下的20%问题,是在工业界成功的秘诀之一。许多失败并不是因为人不优秀,而是做事情的方法不对,一开始追求大而全的解决方案,之后长时间不能完成,最后不了了之。
这点上我十分认同辛格博士。回想起当初独自一人建立曲库到有越来越多优秀的小伙伴加入我们核心组,再到Bilibili收获了500粉丝,感慨良多。一开始其实有一个名叫自由神社的网站也在做JE吧的口琴曲库。但是为了图方便,一开始使用的是WordPress,这直接导致了上传机制过于繁琐以及许多功能后期无法扩展。后来几乎是我建立github曲库的同时期,自由神社开始着手研发2.0版本。但是要达到github的issue能够直接提供的功能谈何容易。首先,github曲库支持拖拽上传图片,自带完善的搜索功能,支持模糊搜索,自带排序。经过半年实践,曲库已经积累一定的经验,并优化了上传模板。自由神社要自己建立同等功能的谱子数据库面临几个问题:1. 负责数据库的同学太忙没有时间;2. 实现曲库和谱子搜索功能需要花费一定时间;3. 谱子需要重复搬运。刚开始,许多人认为一定要用自己的数据库存放谱子,自己去做搜索功能,这样才比较放心,但最后统统不了了之了。说到底还是因为对于一个兴趣驱动的开源项目来说,重新造轮子的开发成本太高,不管是时间还是精力。其实github本就是存放代码的开源仓库,用于存放开源曲谱实也无可厚非。就这样,我们用80%的精力建立了曲库2.0,给大家提供了所有必须的功能。而自由神社2.0的开发则因为遭遇瓶颈,最终停滞不前。
数学模型的重要性
- 一个正确的数学模型在形式上是简单的。
- 一个正确的模型一开始可能还不如一个精雕细琢的错误模型来的准确,但是,如果我们认定大方向是对的,就应该坚持下去。
- 大量准确的数据对研发很重要
- 正确的模型也可能受噪音干扰,而显得不准确;这时候不应该用一种凑合的修正方法加以弥补,而是要找到噪声的根源,这也许能通往重大发现。
贝叶斯网络
从数学层面来讲,贝叶斯网络是一个加权有向图,是马尔可夫链的扩展。而从认识论的层面看,贝叶斯网络克服了马尔可夫链那种机械的线性约束,它可以把任何有关联的事件统一到它的框架下面。
贝叶斯网络比神经网络更容易考虑(上下文)前后的相关性,因此可以解码一个输入的序列,比如讲一段语音识别成文字,或者将一个英文句子翻译成中文。而人工神经网络的输出相对孤立,它可以识别一个个的字,但是很难处理一个序列,因此他主要的应用常常是估计一个概率模型的参数,比如语音识别中声学模型参数的训练、机器翻译中语言模型参数的训练,等等,而不是作为解码器。
【思考】:贝叶斯网络更适合乐谱识别
网友评论