书评:本书讲的是道而不是术,真正的术还要自己细致的研究下去,目前看的第一遍总结的不是很好,后面再看会继续完善。
目录
数学之美
第1章:文字和语言VS数字和信息
1.文字和数字
2.文字和语言背后的数学
3.总结思考
第2章:自然语言处理-规则到统计
2.总结:
第3章:统计语言模型
1.最简单的统计模型:
3.训练模型:0概率(非平滑)和平滑方法:
第4章:谈谈中文分词
1.中文分词的演变:
2.分词的一致性和粒度、层次问题:
第5章:隐含马尔可夫模型
1.通信模型:
2.马尔可夫链:
3.隐含马尔可夫模型:
4.总结:
第6章:信息的度量和作用
1.信息熵
2.信息的作用:
3.互信息:
4.相对熵:
第7章:贾里尼克和现代语言处理
1.作者和贾里尼克教育观点:
2.大师都只讲哪里不要做,而不是做什么:
3.一个老实人的奇迹:
第8章 简单之美 布尔代数和搜索引擎
1搜索引擎三要素:
2.布尔运算:
3.索引:
第9章:图论和网络爬虫
1.两种图遍历方法:
2.网络爬虫:
3.欧拉定理:
4.网络爬虫搜索和下载方式:
第10章:pagerank—google的民主表决式网名,网页排序算法思想
1.pagerang的核心思想:
第11章:如何确定网页和查询的相关性
1.词频率:
2.去除暂停词:
3.词权重作用:
4. 词权重方法:
第12章:地图和本地搜索的最基本技术—有限状态机和动态规划
1.有限状态机:
2.动态规划:
3.有限状态传感器:
第13章:Google AK-47 的设计者——阿密特·辛格博士—寻求简单的哲学
1.简单的哲学思想:
第14章:余弦定理和新闻分类
1.新闻分类思想:
2.具体步骤:
3.优化方法
第15章:矩阵运算和文本处理中的两个分类问题
1.本章解决一个问题:
2.步骤:
3.效果:
4.计算方法:
第16章:信息指纹及其应用
1.信息指纹:
2.判断两集合相同:
3.判断两集合基本相同:
4.Youtube反盗版:
第17章:由电视剧《暗算》所想到的—密码学
1.公开密钥加密步骤:
2.总结:
第18章:闪光的不一定是金子 — 谈谈搜索引擎
1.网页作弊:
2.两种作弊方式:
3.总结:
第19章:谈谈数学模型的重要性
第20章:不要把鸡蛋放到一个篮子里—最大熵
1.最大熵原理:
2.最大熵原理指出:
3.改进的迭代算法【IIS】:
第21章:拼音输入法的数学原理
1.汉字输入法的的快慢:
2.编码速度的快慢:
3.双拼到全拼的转变:
4.主要引入的数学原理是:
第22章:自然语言处理的教父马库斯
1.马库斯:
2.柯林斯:
3.布莱尔:
第23章:布隆过滤器
1.提出前提:
2.步骤:
第24章:马尔可夫链的扩展 — 贝叶斯网络
1.贝叶斯网络:
第25章:条件随机场和句法分析
1.条件随机场:
2.条件随机场的语句浅层分析:
第26章:维特比和他的维特比算法
1.维特比算法的提出:
2.维特比算法详解:
第27章:再谈文本自动分类问题 — 期望最大化
1.文本自动收敛分类:
2.期望最大化和收敛必然性:
第28章:逻辑回归和搜索广告
1.网站广告问题:
2.逻辑回归模型:
第29章:各个击破算法和google 云计算的基础
1.分治法:
2.从分治法到MapReduce:
讲了一堆古代文字,其实就是为了引出下面两个概念用于翻译
1.信息的冗余是安全保障
2.古代语料的多样性(一个句子或者词多种写法)对翻译很有用
1.古代人讲话宽信道,而传竹筒是窄信道,所以我们古时候就有压缩这个思想啦
2.圣经有90-100W字,犹太人很认真,但是还是会错误,所以出现校验码的思想(每个字都是一个数字,每行内相加都是一个固定值,能查出改行是否出错)
3.语言中的语法肯定会有人不精确,这个无法避免,最后实践表明,我们要从语言出发,而不是语法,因为语法我很难完全遵守
1.通信原理
2.最短编码(哈夫曼),编码(文字和数字其实就是一种不同的编码)
3.解码规则、语法
4.聚类(相类的东西聚集在一起,类似K-means)
5.校验 (检测信息错误)
6.语义,语料,双语对照,机器翻译
7.利用上下句和多意性消除歧义
以上就是结合故事说明的与数学相关的规律啦
回答了2个问题:计算机可以处理自然语言,且方法可以做到与人一样,所以有研究下去的意义。
1避免误区:机器不可能做到人脑那样学习语言,而是要通过数学模型和统计方法的实现的。
2.两个路线:语法分析和语义分析,英文通常语法分析,而中文以前通常是语义分析
3.机器分析句子:
1)普通的,主谓宾直接分,很简单
2)复杂的,可能主谓宾宾补,或者主语有同位语,普通机器根本没法分析,因为规则太多,就算规则都已经完备,但是目前计算机也计算不过来呀,所以完全语义规则分析不可行,需要过渡到结合下面的统计
4.规则到统计:语言机器很难用规则来翻译而是依赖于上下文,甚至常识,渐渐的过度到利用统计翻译机器语言(所以要打破常规,不要固执于一个思想,就像文章里面的老科学家的固执,表现出作者想在意识清晰(固执)之前退休)。
自然语言的发展,从语法语义过度到现在的统计,不要墨守成规。
P(S) = P(w1)P(w2|w1)P(w3| w1 w2)…P(wn|w1 w2…wn-1)
这样的方式在计算上比较麻烦,而有了一个较为偷懒的假设“马尔科夫假设”,假设后一个词的出现只与前一个词相关,公式的形状如下:
P(S) = P(w1)P(w2|w1)P(w3|w2)…P(wi|wi-1)
最终是 P(wi | wi-1) = P(wi-1,wi)/P(wi-1)
这种假设的局限性在于:“在自然语言中,上下文之间的相关性跨度可能很大,甚至可以从一个段落跨到另一个段落。因此即便再怎么提高模型的阶数,对这种情况也无可奈何.”
2.解决跨度:
目前最高的是google的4元模型,上面是相邻的两个相关词,跨度为1,如果是跨度为2,3时即为3、4元模型,P(wi |w1,w2,········……… wi-1) = P(wi | wi-n+1,wi-n+2, ……….,wi-1)
1.使用语言模型需要知道模型中所有的条件概率,我们称之为模型的参数。通过对语料的统计,得到这些参数的过程称作模型的训练。
2.一般来说P(wi | wi-1)是有可能出现0和1概率的,而且很多时候不合理,增加数据量(大数定理就完全能解决,但是不可能完全的大数)虽然可以避免大多数这些情况,但是还是会出现,所以需要解决。这里使用了古德图灵估计的方法,把未看见事件分配一个不为0的概率从而使整体概率平。
一开始是以字典法进行分词,但是二义性太大啦,渐渐的也由规则演变成基于统计的分词方法,而且实践中他也非常有效。(动态规划和维特比算法),需要注意的是,在不同应用中需要用到不同的分词器
不同的人分词粒度是不同的,比如北京大学,有些人可能会分为北京-大学,而有些人直接理解为一整个词,这就是分词粒度,和一致性的问题,所以对于不同层次的次,我们需要挖掘出更多的复合词,从而完善复合词词典。
语言输入(s1,s2,s3……sn)编码―――》语言输出(o1,o2,o3……on)解码
天气状态可假设为m1,m2,m3,m4之间的转换
可以用概率来统计,比如有很多天的天气预报,我们知道m2天为j次,m3天为k次,以此类推,最后他们的比值除以总数就是他们的状态改变概率(其中每个状态只和前面一个有关)。
是马尔可夫的一个拓展,我们根据前面的语音输入s1,s2,s3……sn――》输出o1,o2,o3……on,其中s1,s2,s3……sn的概率值我们是能计算的出来的,而o1,o2,o3……on,我们没法得知,他是一个不可见的状态,但是我们大概知道一个每个时刻的st会输出特定的ot,也就是说他们之间有一个特定的函数,从而我们可以推导出ot的大概输出。
所以通信的解码可以利用隐含马尔可夫模型来解决,完全没想到可以这样做·······…太牛了!
需要2种算法:训练算法(鲍姆-韦尔奇算法),解码算法(维特比算法)之后才能使用隐含马可夫模型这个工具
信息的作用是用于消除不确定性,自然语言处理的最大问题就是为了找到相关信息,比如我们根据前面章节可知一元模型,直接找信息,二元模型是根据上下文来找信息,所以可以把1的公式改为其中x在y的条件下得到的信息概率。
书里有个句子,就是bush到底是总统还是灌木丛,这种二义性的问题很难用语法和规则等方法解决,但是根据上下文,如出现美国,华盛顿等字样就可以知道他是总统啦,如果是土壤,植物就可以证明他是灌木丛的意思,这就是互信息的作用,其中信息的条件熵差异为:,X,Y完全相关时取值为1,无关时为0
学习不一定要学的早,晚点学也一样,因为错过了成长的乐趣反而更加不好,作者举例了一个中学学500小时,大学只需要100小时就能学完的例子(这里非常赞同)。
这里跟第22章的布莱尔的想法很像,就是能根据已经有的经验快速否定掉一种不太可能的方案,防止别人走进岔路。
说了贾里尼克做了很多大事,同时主要讲到他是个很严格的人,作者可能认为他这样会经常得罪人,然而事实并非如此,所以作者下结论他是个公正的人,尽管他很严厉。
自动下载尽可能多的网页;建立快速有效的索引;根据相关性对网页进行公平准确的排序,其中主要讲索引
比如搜索一篇文章为原子能而不要应用这个词的文章,先第一次全网搜索有原子能的文章比如10101010111100000····,1为出现,0为未出现,这个二进制串非常长,然后在同样找没有应用关键字的文章如10101111110000000···,然后在把上面两个进行布尔运算,最后就是结果啦。
根据上面的布尔,的前提就是要每个网页都有关键字的索引,否则会非常慢,同时就算有每个网页都有关键字索引,那这个索引表也会非常大,并且索引表的附加信息也会非常多,所以根据索引和布尔运算得到需要的结果就需要分布式来运算解决。
DFS,BFS
其实就是根据上面的这两种遍历方法,遍历网页,并下载,但是这种下载量非常大,需要分布式进行操作
如果一个图从顶点出发,每条边不重复的遍历一遍回到这个顶点,那么需要每个顶点的度一定为偶数
网络爬虫一般BFS优于DFS,因为我们一般首选需要各个网站的首页,再要其其他页面,所以先广度搜索尽可能多的不同类型页面,再把页面进行广度搜索,当然不是简单的广度搜索,其次是下载方式,因为下载和搜索是分离的两个服务器,为了避免多次握手,所以先把一个下载完再下载另一个,而不是向电路交换一样一部分一部分的下载,这时就需要一个调度系统管理下载的调度问题。
民主表决,其实就是如果一个网页被其他很多网页超链接,那么他普遍被承认和信赖,所以他的排名就高。同时还要分权处理,来自排名高的网页链接权重应该加大,但是这样的话想知道权重又得知道他们的排名(相当于先有鸡还是先有蛋问题),文章讲到用了二维矩阵相乘的思想,一开始权重都相同,计算一轮后再迭代一轮,得出二次排名即为可靠的,由于矩阵计算量非常大,他们使用了稀疏矩阵来解决,具体看书的延展阅读。
如搜索“原子能的应用”在某一个1000词的网页中出现2、35、5次,那么词频率分别为0.002、0.035、0.005,相加就是总的词频率
一般来说,上面的“的”次出现次数高,且没什么意义,一般都不考虑这些词,即他的词权重为0
上面的“原子能的应用”,我们看到原子能才是他的中心词,而应用这个词很泛,所以应该给他不同的权重
词权重一般使用“逆文本频率指数”即log(D/Dw),其中D为所有网页数,Dw为命中网页数,带入公式后就是这个词所占的权重,然后词频率和权重交叉相乘后相加就能得到想要对应的TF-IDF值啦。
从开始状态到终止状态,每个状态的转变都严格匹配,否则不匹配,
由于自然语言比较随意,很难完全做到准确匹配,这时就要引入基于概率的有限状态机了,就跟马尔可夫模型一样。
1.划分子问题2.确定动态规划函数3.计算后填入表格4.重复操作
WFST模型他就是在有限状态机下加入不同的概率走势,也就是说他跟我们之前学的二元模型是类似的,每一个二元模型都能用有限状态传感器描述。
做事可以简单解决就先解决,不一定完全的追寻效益问题,就比如文章所说的,作者写了个中文搜索算法,虽然速度快,但是消耗内存大,辛格博士他建议用拟合函数代替训练模型,但是效率会降低很多,作者一开始不赞同,但是他还是这么做了,最后证明出先简单解决问题,提供给用户使用,后面再继续优化才是最好的,而不应该一开始就急于求成,做到最好那种。
使用了前面的TF-IDF思想,确定新闻间的相关性,然后进行分类
1)我们对于一个词表比如有64000个词,进行编号。
2)某一篇文章进行TF-IDF值计算(方法看第11章)
3)重复上面步奏,把其他文章进行运算计算其TF-IDF值,封装成向量。
4)把上面的文章两两进行余弦运算:
因为我们知道每个文本的词数量不一样,可能有的10000词,有的100词,直接对比TF值是不合理的,因为对应的向量长度不一,但是他们的方向是可能一致的,所以只需要计算其两个向量的夹角就可以知道两篇新闻是否相类似了。
5)分类,根据字典一样把某一新闻归类到某一处,直接余弦相似度运算即可分类了
但是有一个问题,就是怎么知道有多少个类别呢?
1.可以先把每个文章的词频率计算好来封存,两两余弦计算时直接提取即可
2.余弦内积时,由于大量的元素为0,所以我们只要计算非零元素。
3.删除虚词的计算,比如‘的’、‘地’,这些词一般数量非0但是又是一种无用的干扰项, 同时还会影响权重,所以去除后计算会更合理更快
4.补充:位置加权,比如文章开头和结尾的权重应该高一些,也就是文章开头和结尾的词权重可以提高后再计算,类似TF-IDF模型。
如果使用第十四章中引入的向量距离的方法,对数以亿计的网页进行距离计算,计算量过于巨大,而引入了矩阵的运算来计算新闻之间的相似性,一次性把多个新闻的相似性计算出来。利用了矩阵运算中的奇异值分解。(有没有联想到《线性代数》中矩阵之间向量的线性相关的运算?)
这种方式,将多个新闻的向量组成的矩阵分解为三个小矩阵相乘,使得计算存储量和计算量小了三个数量级以上。
1)有n个词,M篇文章,形成M*N矩阵,其中aij代表第j个词在第i篇文章(行词列文章)出现的 加权词频(比如TF-IDF值)
2)奇异值分解,把上面的A大矩阵转化为3个小矩阵相乘
其中,比如X矩阵中每行代表一个词(行)在词类(列)(语义相近的词类)的相关性
Y矩阵中每列对应一个文本,每行代表一个主题,即每一个主题(行)在文本(列)的相关性
B矩阵中即为每个词类(行)对应的主题(列)相关性。
只要对新闻关联性矩阵进行一次奇异值分解,既可同时完成近义词分类和文章的分类。
庞大的网页量,使得计算量非常大,因此需要很多的计算机并行处理。
能唯一代替某一网络信息,比如之前的网页hash表存网址太浪费内存啦,直接用伪随机数代替该表中的地址能节省很多内存空间。同时网络传输也需要加密,比如MD5不能逆向破解就是一个很好的加密方式。
1)一一比较,O(N2),太慢
2)两个集合先排序,再一一比较O(logN),相对慢
3)先把一个集合放到hash表,再一一比较O(N)快,但是消耗多了N个内存
4)直接用信息指纹,把每个集合内的元素都相加再比较即可(不需要排序就可以比较)
1)比如用两个账号发送垃圾邮件,邮件大体相同,个别不同,所以我们可以抽取比如发送尾号为24的邮件,然后再用信息指纹的第四种方法就好啦(基本能鉴别出来)。
2)网页或者文章对比,可以先用IDF方法鉴别词频率(去除掉只出现一次或者少次的噪音词),然后再抽取关键字进行信息指纹识别就好啦,如果是文章的话把文章切成一小段一小段的,然后一样IDF方法选取特征词进行信息指纹鉴别即可。
他其实就是拿去视频的关键帧进行信息指纹对比,从而判断出哪些是盗版的,同时把广告收益给商家,而盗版的没收益,所以盗版的就少啦。
1)随便选一个密码转为3位的ASCII码数字
2)加密:
1.找2个很大的数P、Q然后计算N=P×Q M=(P-1)×(Q-1)
2..找一个和M互素的整数E,即M和E除了1没有公约数
3.找一个整数D,使得(E×D)%M==1
加密成功后D就是私钥(解密),E是公钥(加密),N是公开的
信息论虽然能让我们知道信息越多,就能消除更多的不确定性从而解密,但是密码学就是让我们无论知道多少信息,都无法消除不确定因素从而解密
就是根据搜索引擎的算法,得到更高的网站排名
作弊1:比如可以提高网站相关词频数,然后隐蔽,这样就能得到较高的TF-IDF值啦,
解决1:对异常高的网页做一下分析就可以,比较简单
作弊2:出卖网站的出链接,由于我们前面章节知道网站被越多其他网站引用就会得到越高的排名
解决2:出链的网站到其他网站数目可以作为一个向量,也是这个网站固有的特征,既然是向量,就可以用余弦定理计算相似度,有些网站出链量相似度几乎为1,此时就是可以知道这些是卖链接的网站啦。
提高网站质量才是关键。
说白了,就是要保留全部的不确定性,将风险降到最小。
“不要把鸡蛋放在一个篮子里,是最大熵原理的一种朴素说法。”
当我们需要对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知的条件,而对未知的情况不要做任何主观假设。(不做主观假设这 点很重要。)
最大熵模型应用于信息处理优势的第一次验证:
应用最大熵原理,创建了当时世界上最好的词性标识系统和句法分析器。其做法即为使用最大熵模型成功的将上下文信息、词性、名词、动词、形容词等句子成分、主谓宾统一了起来。
来源: http://www.cnblogs.com/KevinYang/archive/2009/02/01/1381798.html
八十年代,孪生兄弟的达拉皮垂(Della Pietra)在 IBM 对 GIS 算法进行了两方面的改进,提出了改进迭代算法 IIS(improved iterative scaling)这使得最大熵模型的训练时间缩短了一到两个数量级。这样最大熵模型才有可能变得实用。即使如此,在当时也只有 IBM 有条件是用最大熵模型。
4.吴军的改改进和他的论文:(链接在此)
发现一种数学变换,可以将大部分最大熵模型的训练时间在 IIS 的基础上减少两个数量级
由击键次数乘以寻找这个键所需要的时间
由拼音编码和消除歧义性编码(数字键盘)快慢决定
前面双拼他虽然减少了击键次数,但是别人消除歧义以及击键的思考的时间都变长了,不利于学习以及速度总体慢,后来出现了全拼(也就是我们现在所用的拼音输入),虽然击键次数变多了,但是学习成本和思考成本降低,同时容错率也提高了,所以速度很快
思考总结:现在的输入法需要提升就是看谁能建立更好的语言模型以及转成汉字的算法。
3.训练一个用户特定模型:
大多数情况下M1,模型会比M0模型要好,但是如果输入偏僻字的时候反而M0模型比较好,
根据最大熵定理,我们都要把各种情况综合在一起才是最好的,同时这个模型训练时间也
比较长,所以下面引出了线性插入模型:
1)他第一个考虑到了语料库的重要性,也第一个做出了很多LDC语料库
2)他不限制学生方向,而是根据独特的眼光给予支持
数学之美一书都是讲简单为主,但是柯林斯却是个特例,他不是为了一个理论而研究,而是为了做到极致,比如他做的文法分析器。
跟作者一样,都是以简单为美,虽然不能立刻知道某事该怎么做,但是能立刻否定掉一种不可能的方案,从而寻求简单的方法。代表算法:基于变换规则的机器学习算法:
之前我们讲过垃圾邮件的识别,从一一对应到hash,这两种都不是很好,所以后来作者推荐用了信息指纹这个东西,也就是一个伪随机数,其中这个随机数是否出现过就需要用到布隆过滤器啦
先建立一个16E位的二进制数组,全部置为0,对每一个邮件用随机数生成器(F1,F2,F3```F8)生成8位不同的信息指纹(f1,f2,·······…f8),然后把这8位随机数全部置为1后映射到刚才的16E位数去,当第二次又有同一个邮件时以同样的方式映射会发现映射的位置都置为1了,此时就可以判断该邮件出现过啦
但是该模型有一定的缺陷,虽然很小的概率会识别错误,但是还是有可能识别错误的,此时可以建立一个白名单来解决
假定马尔可夫链成立,也就是说每个状态和和他直接相连的状态有关,和间接状态没有关系,那么他就是贝叶斯网络,同时图中的弧可以有权重,其中A到C可能不是直接相关,但是不代表他没没有关系,他们可能可以由一个间接状态来关联,比如B
具体内容他就是利用贝叶斯公式计算出每一个状态到另外一个状态转移的概率,具体可以看书本有个例子,不过需要一点概率基础,贝叶斯网络其实就是马尔可夫链的一个拓展,看似简单,但是实现起来非常复杂。
他其实是一个隐含马尔可夫的拓展,我们假定x1、x2、x3为观测值,y1、y2、y3表示隐含的序列,其中x2的状态由y2的状态决定,和y1、y3无关,但是实际中他们很有可能是有关的,如果把y1、y2、y3都考虑进来,那么他就是一个条件随机场啦,其中条件随机场还是遵循隐含马尔可夫链的原则的,比如y1、y2、y3还是一个马尔可夫链,x1和y1之间的关系是一个概率关系,跟前面一样。其中他与贝叶斯网络的区别是条件随机场是一个无向图,而贝叶斯是个有向图
这里看的不是太懂,后续看懂了再更新
我们知道最短路径是由动态规划解决的,而篱笆网络有向图的最短路径则是由维特比算法来解决的,所以隐含马尔可夫算法里面的解码都可以用它来解决。
这个算法的好处就在于把运算的复杂度从10^16降到了O(N*D²)(D宽度(列),N网长度(行))10^3,降低了非常多。
假如有N个文本对应N个向量V1、V2……Vn,希望把他分到K个类中,这K个类的中心是C1、C2………Ck,分类步骤如下:
这样重复下去就可以自动分类啦。
如果距离函数设计的好,那么d(各个文本向量到类中心平均距离)更小,而D(各个类中心的距离)更大,即从而多次迭代后得到最优分类。
在机器学习中,这D和d可以分为2个过程:
其中根据现有模型计算结果为期望(E),通过模型多次计算(多次训练)最大化期望(M),所以叫做EM算法。
百度和雅虎就不说了,谁出钱多就谁的广告在前面,这里说google的广告竞争问题,一开始作者提出可以由用户搜索数,和广告点击数的比率来看该广告是否合理:
但实际上并不那么简单,1,新广告没数据,不合理2,很有可能数据不足,比如只有各广告只被查询过一次,不能说点击过3就比2次的广告好。3,放在第一位的广告明显比第二位的好,排名自然高。
Xi为影响变量,比如广告展现位置,展现时间等等
Βi为为一个特殊的参数由人工神经网络训练未来的参数
把一个大问题分解成若干个小问题,解决各个小问题,合并各小问题的解
文章先引入了归并排序的思想,其实就是分治法的思想,把一个待排序的数组进行分割后排序,然后排序后再合并就完成了,然后开始讲解一个大矩阵的相乘,比如:
,如果A和B非常大时,一个计算机是计算不下来的,所以引出了云计算(分治法,MapReduce)的思想,先把A按行分割成N/10份,把B按列分成N/10份,然后两两相乘
最后两两相乘就能得到各自的解,然后合并解即可,这就是把一个把问题分解到多个服务器上计算,从而节省了很多时间的方法。