数学之美读书笔记
2016-07-29 16:38
316 查看
数学之美读书笔记
数学的美妙在于一个好的方法,常常是最简单明了的方法。数学之美从本质上讲解了自然语言处理,搜索等的算法,为什么用这样的算法以及如何用,如何调优。下面的模块不是按章节来总结,而是根据我的个人理解进行了模块化的总结。统计语言模型和分词
前三章主要讲统计语言模型,目前用的比较多的是n-gram,n-pos模型,是今天所有自然语言处理的基础。原理很简单,一个句子是否合理,就看它的可能性大小如何。数学上描述是:假设S 表示某一个有意义的句子,由一连串特定顺序排列的词w1, w2,...,wn组成,这里n是句子的长度。现在,我们想知道S在文本中出现的可能性,也就是数学上所说的S的概率P(S).
P(S) = P(w1,w2,...,wn)
利用条件概率公式,
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(wn|wn-1)
当数据量大的时候,我们可以用词出现的频率来计算上述概率,因此问题就解决了。但实际工程中,由于语料库不可能达到理论上的全面完整,会出现零概率等问题,这时候引入了一些平滑方法,如图灵平滑方法。
谈到分词,最直接想到的方法就是字典匹配,这种方法在复杂性不高的前提下,取得了还算满意的效果,但它毕竟太简单了,遇到稍微复杂的问题,就解决不了。比如“北京-大学生”,而不是“北京大学-生”。统计语言模型成功地消除了这种二义性问题,这是统计语言模型很成功的应用。
隐马尔科夫模型
马尔科夫链由状态和状态转移矩阵组成,特点是下一时刻的状态只与当前状态有关。隐马尔科夫模型是马尔科夫链的扩展:任一时刻的状态是不可见的。所以观察者设法通过观察到一个状态序列s1,s2,s3...sT,来推测转移概率函数。但是隐马尔科夫模型在每个时刻t会输出一个符号Ot,且Ot只跟st相关且仅跟st相关。
基于马尔科夫假设和独立输出假设,可以计算出某个特定状态序列s1,s2,s2...产生输出符号o1,o1,o3...的概率。
隐马尔可夫模型有三个基本问题:
1. 给定一个模型,如何计算某个特定的输出序列的概率
2. 给定一个模型和某个特定的输出序列,如何找到最可能产生这个输出的状态序列
3. 给定足够量的观测数据,如何估计隐马尔可夫模型的参数
分别对应的解决办法:
1. Forward-backward
2. Viterbi
3. Baum-welch
这里不对每一个具体的算法做解释了,请查阅相关资料。
信息的度量和作用
信息熵表示不确定性。H(X) >= H(X|Y),说明多了Y的信息之后,不确定性降低了。语言模型中的意义是,二元语言模型的不确定性小于一元语言的不确定性。
互信息是两个事件相关性的度量。
相对熵,也称为交叉熵,在英语中被称为Kullback Leibler Divergence,也用来衡量相关性。
不必关心公式本身,只需要记住下面结论:
1. 对于两个完全相同的函数,相对熵为0
2. 相对熵越大,差异越大;越小,差异越小
3. 对于概率分布或者概率密度函数,如果取值均大于零,相对熵可以度量两个随机分布的差异性
相对熵是不对称的,一种新的相对熵计算方法:
相对熵可以用来衡量两段信息的相似度,如文章相似性。Google的自动问答系统用的就是相对熵来衡量两个答案的相似性。
搜索引擎
搜索引擎的本质是下载,索引和排序。我没做过搜索引擎,做过推荐引擎,不过推荐和搜索的本质上是一样的,也是基于这三种基本服务。互联网可以看成一个图,每个网页是一个节点,网页上的链接看成是边,网络爬虫实际上就是图的遍历算法。工程中,爬虫原理基本上是BFS,当然DFS也混合使用,另外还需要维护一张URL表来记录哪些网站已经下载过了。
索引的原理是最简单的布尔运算
基于图的pagerank排序算法
文本分类
文本距离的度量一般用余弦相似度奇异值分解SVD可以得到词-词类,词类-文章类,文章类-文章关系矩阵,Google已经实现基于Mapreduce的SVD的分解算法。
信息指纹及应用
相关文章推荐
- 搜狗百度360市值齐跌:搜索引擎们陷入集体焦虑?
- 只需十分钟,结果大不同 |《深度思考》
- 《洋葱阅读法》读书笔记
- 本人即将筹备败家日志,敬请期待!
- 书评:《算法之美( Algorithms to Live By )》
- IE:使用搜索助手
- 动易2006序列号破解算法公布
- 用批处理解决数学问题的代码第1/4页
- C#递归算法之分而治之策略
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- C#算法之大牛生小牛的问题高效解决方法
- C#算法函数:获取一个字符串中的最大长度的数字
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- 经典排序算法之冒泡排序(Bubble sort)代码