数学之美

强推啊。javascript

永远没法知道几率论的利用会如此之大。html

摘要:java

不一样的文字系统在记录信息上的能力是等价的。算法

文字只是信息的载体,而非信息自己。浏览器

机器翻译和语言识别,全都靠的是数学,更准确的是统计。服务器

20世纪60年代,基于乔姆斯基形式语言的编译器技术获得了很大的发展,计算机高级程序语言均可以归纳成上下文无关的文法,这是一个在算法上能够在多项式时间内解决的问题。网络

上下文无关算法能够想看计算理论导论...机器学习

基于统计的语言处理的核心模型是通讯系统加隐含马尔可夫模型。函数

统计语言模型:马尔可夫假设:(二元模型)工具

          假设任意一个词出现的几率只同它前面的词有关。

  由于有了大量机读文本,也就是专业人士讲的语料库,只要数一数Wi-1,Wi这对词在统计的文本中先后相邻出现了多少次,以及Wi-1自己在一样的文本中出现了多少次,而后用两个数分别除以语料库的大小,便可获得这些词或者二元组的相对频度。  根据大数定理,只要统计量足够,相对频度就等于几率。  如上是统计语言模型的理论。用来解决复杂的语音识别、机器翻译等问题。

假定文本中的每一个词Wi和前面的N-1个词有关,而与更前面的词无关。这样当前词wi的几率只取决于前面的N-1个词 P(Wi-N+1,Wi-N+2,...,Wi-1).

 

 

 

这种假设被称为N-1阶马尔可夫假设,对应的语言模型称为N元模型。N=1的一元模型其实是一个上下文无关模型,也就是假定当前词出现的几率与前面的词无关。而在实际应用中最多的是N=3.

空间复杂度为|v|的N-1次幂。|v|是一种语言词典的词汇量。

使用语言模型须要知道模型中全部的条件几率,称之为模型的参数。

若是用直接的比值计算几率,大部分条件几率依然是零,这种模型咱们称之为不平滑,在实际应用中,统计语言模型的零几率问题是没法回避的,必须解决。

训练统计语言模型的艺术就在于解决好统计样本不足时的几率估计问题。

古德提出在统计中相信可靠的统计数据,面对不可信的统计数据打折扣的一种几率估计方法,同时将折扣出来的那一小部分几率给予未看见的事件。有一个从新估算几率的公式。称为 古德-图灵估计。原理为:对于没有看见的事件,咱们不能认为它发生的几率就是0,所以咱们从几率的总量中,分配一个很小的比例给予这些没有看见的事件。这样一来,看见的那些事件的几率总和就要小于1了。所以,须要将全部看见的事件几率调小一点,至于小多少,要根据“越是不可信的统计折扣越多”的方法进行。

 

隐含马尔可夫模型最初应用于通讯领域,继而推广到语音和语言处理中,成为链接天然语言处理和通讯的桥梁。同时,隐含马尔可夫模型也是机器学习主要工具之一。它须要一个训练算法(鲍姆-韦尔奇算法)和使用时的编码算法(维特比算法)。

 

信息的度量,信息熵,越小,代表数据越纯。

信息量就等于不肯定性的多少。

 

若是没有信息,任何公式或者数字的游戏都没法排出不肯定性。

几乎全部的天然语言处理、信息与信号处理的应用都是一个消除不肯定性的过程。

熵描述一个元素的不肯定性大小。

 

搜索引擎的原理很简单,创建一个搜索引擎大体须要作这样几件事:自动下载尽量多的网页;创建快速有效的索引;根据相关性对网页进行公平准确的排序。

 

布尔代数(0、1/ true、false)对于数学的意义是将咱们对世界的认识从连续状态扩展到离散状态。

 

现代物理的研究成果代表,咱们的世界实实在在是量子化的而不是连续的。咱们的宇宙的基本粒子数目是有限的,并且远比古高尔(10的100次幂)要小得多。

 

搜索引擎会自动把用户的查询语句转换成布尔运算的算式。

计算机作布尔运算时很是快的,最便宜的微机均可以在一个指令周期进行32位布尔运算,一秒钟进行数十亿次以上。

 

互联网虽然很复杂,可是说穿了其实就是一张大图而已,能够把每个网页看成一个节点,把那些超连接看成链接网页的弧。能够从任何一个网页出发,用图的遍历算法,自动地访问到每个网页并把他们存起来。完成这个功能的程序叫作网络爬虫。在网络爬虫中,使用一个成为哈希表的列表而不是一个记事本记录网页是否下载过的信息。

 

网络爬虫在工程上的实现?

1. BFS仍是 DFS?

网络爬虫对网页遍历的次序不是简单的BFS或者DFS,而是有一个相对复杂的下载优先级排序的方法。管理这个优先级排序的子系统通常称为调度系统。由它来决定当一个网页下载完成后,接下来下载哪个。固然在调度系统里须要存储那些已经发现可是还没有下载的网页url,它们通常存在一个优先级队列里。

 2.页面的分析和url的提取。

当一个网页下载完成后,须要从这个网页中提取其中的URL,把它们加入到下载的队列中。早期互联网的网页是由html实现的,提取url不难。如今使用一些脚本语言如javascript生成的。打开网页的源代码,url不是直接可见的文本,而是运行这一段脚本后才能获得的结果。所以,网络爬虫的页面分析就变得复杂不少,要模拟浏览器运行一个网页,才能获得里面隐含的url。所以,须要作浏览器内核的工程师来写网络爬虫中的解析程序,惋惜出色的浏览器内核工程师在全世界数量并很少。所以,若发现一些网页明明存在,但搜索引擎就是没有收录,一个可能的缘由就是网络爬虫中的解析程序没能成功解析网页中不规范的脚本程序。

3.记录哪些网页下载过-url表

为了防止一个网页被下载屡次,须要在一个哈希表中记录哪些网页已经下载过。采用哈希表的好处是,判断一个网页的url是否在表中,平均只须要一次或者略多的查找。维护一张哈希表不现实,太大,其次,因为每一个下载服务器在开始下载前和完成下载后都要访问和维护这张表,以避免不一样的服务器作重复的工做,这个存储哈希表的服务器的通讯就成了整个爬虫系统的瓶颈。

解决方案明确每台下载服务器的分工,判断url是否下载--》批处理。

 

网页排名。

PageRank算法,在互联网上,若是一个网页被不少其余网页所连接,说明它受到广泛的认可和信赖,那么它的排名就高,这就是pagerank的核心思想。

网页排名的高明之处在于它把整个互联网看成一个总体来对待。这无心识中符合了系统论的观点。相比之下,之前的信息检索大多把每个网页看成独立的个体对待,大部分人当初只注意了网页内容和查询语句的相关性,忽略了网页之间的关系。

pagerank算法二维矩阵,Amn表示第m个网页指向第n个网页的连接数。迭代进行收敛,算出排名值,值越大,越先显示。因为网页之间连接的数量相比互联网的规模很是稀疏,所以计算网页的网页排名也须要对0几率或者小几率事件进行平滑处理。网页的排名是个一维向量,对它的平滑处理只能利用一个小的常数。

网页排名的计算主要是矩阵相乘,这种计算很容易分解成多个小任务,在多台计算机上并行。

 

肯定网页和查询的相关性。TF-IDF(term frequency/inverse document frequency)

若是一个关键词只在不多的网页中出现,经过它就容易锁定搜索目标,它的权重也就应该大。分之,若是一个词在大量网页中出现,看到它仍然不很清楚要找什么内容,所以它的权重就应该小.

所谓IDF的概念就是一个特定条件下关键词的几率分布的交叉熵。

 

地图和本地搜索的最基本技术--有限状态机和动态规划

地址的识别和分析,地址的文法是上下文有关文法中相对简单的一种,所以有许多识别和分析的文法,但最有效的是有限状态机。关键要解决两个问题,即经过一些有效的地址创建状态机,以及给定一个有限状态机后,地址字串的匹配算法。担当用户输入的地址不太标准则须要模糊匹配,为了实现这个目的,基于几率的有限状态机,这种基于几率的有限状态机和离散的马尔可夫链基本上等效。

 

 

全球导航的关键算法是计算机科学图论中的动态规划的算法。加权图。最短路径。能够将一个寻找全程最短路线的问题,分解成一个个寻找局部最短路线的小问题,这即是动态规划的原理。

 

有限状态机的应用远不止地址的识别,今天的语音识别解码器基本上是基于有限状态机的原理。另外,它在编译原理、数字电路设计上有着很是重要的应用。

DFA定义,5元组:起始状态、有限状态集合、输入符号的集合、映射函数、终止状态。

DFA主要是指从一个状态到另外一个状态是肯定的。详情能够参考计算理论导论。

有限状态传感器的特殊性在于,有限状态机中的每一个状态由输入和输出符号定义。

有限状态机和动态规划的应用很是普遍,远远不止识别地址、导航等地图服务相关领域。它们在语音识别、拼写和语法纠错、拼音输入法、工业控制和生物的序列分析等领域都有着极其重要的应用。

 

新闻的分类很大程度上依靠余弦定理。新闻由计算机整理、分类和聚合各个新闻网站的内容,一切都是自动生成的,这里面的关键技术就是新闻的自动分类。

计算机本质上只能作快速计算。为了让计算机可以算新闻,就要求咱们首先把文字的新闻变成能够计算的一组数字,而后再设计一个算法来算出任意两篇新闻的类似性。首先,怎样找一组数字或者说一个向量来描述一篇新闻,新闻是传递信息的,而词是信息的载体,新闻的信息和词的语义是联系在一块儿的。计算TF-IDF。而后用这个值组成特征向量来描述新闻。每一篇新闻均可以对应这样一个特征向量,向量中每个维度的大小表明每一个词对这篇新闻主题的贡献。当新闻从文字变成了数字后,计算机就有可能算一算新闻之间是否类似了。

 

定性地认识到两篇新闻的主题是否接近,取决于它们的特征向量长得像不像。固然,咱们还须要定量地衡量两个特征向量之间的类似性。

向量的方向却有很大的意义。若是两个向量的方向一致,说明相应的新闻用词的比例基本一致。所以,能够经过计算两个向量的夹角来判断对应的新闻主题的接近程度。而要计算两个向量的夹角,就要用到余弦定理了。

 

在天然语言处理中,最多见的两个分类问题分别是,将文本按主题归类和将词汇表中的字词按意思归类。这两个分类问题均可以经过矩阵运算解决。

新闻分类乃至各类分类实际上是一个聚类问题,关键是计算两篇新闻的类似程度。为了完成这个过程,咱们要将新闻变成表明它们内容的实词,而后再变成一组数,具体说是向量,最后求这两个向量的夹角。当这两个向量的夹角很小时,新闻就相关,当他们垂直或者说正交时,新闻则无关。可是由于要对全部新闻作两两计算,并且要进行屡次迭代,所以耗时特别长,尤为是当新闻的数量很大,同时词表也很大的时候,但愿有一个方法,一次就能把全部新闻相关性计算出来,这个一步到位的办法就是利用矩阵运算的奇异值分解(Singular Value Decomposition,SVD)。

SVD: 须要一个大矩阵来描述文章和词的关联性。在这个矩阵中,每一行对应一篇文章,每一列对应一个词,若是有n个词,m篇文章,那么就是一个m*n矩阵。第i行、第j列第元素是字典中第j个词在第i篇文章中出现的加权词频。奇异词分解,就是把上面这样一个大矩阵,分解成三个小矩阵相乘。三个矩阵有很是清晰的物理含义。第一个矩阵是对词进行分类的一个结果。它的每一行表示一个词,每一列表示一个语义相近的词类,或者简称为语义类。这一行的每一个非零元素表示这个词在每一个语义类中的重要性或者说是相关性,数值越大越相关。最后一个矩阵时对文本的分类结果。它的每一列对应一个文本,每一行对应一个主题。这一列中每一个元素表示在这篇文本在不一样主题中的相关性。中间的矩阵则表示词的类和文章的类之间的相关性。

如何利用计算机进行奇异值分解....

 

 

任何一段信息,均可以对应一个不太长的随机数,做为区别它和其余信息的指纹。只要算法设计的好,任何两段信息的指纹都难以重复。信息指纹在加密、信息压缩和处理中有着普遍的应用。

假设可以找到一个函数,将5000亿个网址随机地映射到128位二进制,也就是16个字节的整数空间,这样,每一个网址就只须要占用16个字节而不是原来的100个。这个16字节的随机数,就称做该网址的信息指纹。网络爬虫在下载网页时,它将访问过的网页地址都变成一个个信息指纹,存到哈希表中,每当遇到一个新网址,计算机就计算出它的指纹,而后比较该指纹是否已经在哈希表中,来决定是否下载这个网页。

网址的信息指纹的计算方法通常分为2步。首先,将这个字符串当作是一个特殊的、长度很长的整数。接下来就须要一个产生信息指纹的关键算法:伪随机数产生器算法,经过它将任意很长的整数转换成特定长度的伪随机数,这种是将一个数的平方掐头去尾,去中间的几位数,可是颇有可能重复。如今经常使用的梅森旋转算法要好得多。

信息指纹的用途远不止网址的消重,孪生兄弟是密码。信息指纹的一个特征是其不可逆性,也就是说,没法根据信息指纹推出原有信息。这种性质,正是网络加密传输所须要的。

 

判断集合是否相同。最简单的笨方法是对这个集合中的元素一一做比较,时间复杂度是N的平方。稍微好一点点是将两个集合的元素分别排序而后顺序比较,这样时间复杂度是NlogN。处于同一个水平的方法是将第一个集合放在一张哈希表中,而后把第二个集合的元素一一和哈希表中的元素做对比。时间复杂度是N,可是额外使用了N的空间,代码复杂,不完美。完美的方法是计算这两个集合的指纹,而后直接进行比较。时间复杂度是N,不须要额外的空间。

好比在网页搜索中,判断两个网页是不是重复的。若是把两个网页的正文从头比到尾,计算时间太长,也没有必要。咱们只需对每一个网页挑出几个词,这些词构成网页的特征词集合。而后计算和比较这些特征集合的信息指纹便可。只需找出每一个网页中IDF最大的几个词,而且计算出他们的信息指纹便可。若是两个网页这么计算出来的信息指纹相同,它们基本上是相同的网页。为了容许有必定的容错能力,google里采用了一种特定的信息指纹--类似哈希。

 

视频的匹配有两个核心技术,关键帧的提取和特征的提取。

 

信息指纹重复的可能性,很小。

信息指纹能够理解为将一段信息随机地映射到一个多维二进制空间中的一个点。只要这个随机函数作得好,那么不一样信息对应的这些点不会重合,所以这些二进制的数字就成了原来信息所具备的独一无二的指纹。

 

 

当密码之间分布均匀而且统计独立时,提供的信息最少。

公钥、私钥。

公开秘钥方法保证产生的秘文是统计独立而分布均匀的。也就是说,不论给出多少份明文和对应的密文,也没法根据已知的明文和密文的对应来破译下一份密文。要破解公开秘钥的加密方式,至今的研究结果代表最好的办法仍是对大数N进行因数分解。

 

自从有了搜索引擎,就有了针对搜索引擎网页排名的做弊。早期最多见的做弊方式是重复关键词。

搜索引擎做弊从本质上看就如同对搜索排序的信息加入噪音,所以反做弊的第一条是要加强排序算法的抗噪声能力,其次是像在信号处理中去噪音那样,还原原来真实的排名。信号加入噪音至关于卷积的过程,去噪至关于解卷积的过程。从广义上讲,只要噪音不是彻底随机而且先后有相关性,就能够检测到而且消除。事实上,彻底随机不相关的高斯白噪音是很难消除的。

具体的反做弊作法是,针对和商业相关的搜索,采用一套抗干扰强的搜索算法,这就如同在高噪音环境下采用抗干扰的麦克风同样。而对信息类的搜索,采用敏感的算法,就如同在安静环境下采用敏感的麦克风,对轻微的声音也能有很好的效果。那些卖连接的网站(做弊者发现一个网页被引用的连接越多,排名就可能越靠前),都有大量的出链,而这些出链的特色和不做弊网站的出链特色大不相同。每个网站到其余网站到出链数目能够做为一个向量,它是这个网站固有的特征。既然是向量,咱们就能够计算余弦距离。咱们发现,有些网站到出链向量之间的余弦距离几乎为1,通常来说这些网站一般是一我的建的,用于卖连接,改进pagerank算法,使得买来的连接不起做用。

 

在网络搜索的研发中,在前面提到的单文本词频/逆文本频率指数(TF-IDF)和网页排名能够看做是网络搜索中的椭圆模型。

 

最大熵模型:不要把全部的鸡蛋放在同一个篮子里。至关于行星运动的椭圆模型。要保留所有的不肯定性,将风险降到最小。

 

最大熵原理指出,须要对一个随机事件的几率分布进行预测时,咱们的预测应当知足所有已知的条件,而对未知的状况下不要作任何主观假设。在这种状况下,几率分布最均匀,预测的风险最小。由于这时几率分布的信息熵最大,因此人们称这种模型叫最大熵模型。由于当咱们遇到不肯定性时,就要保留各类可能性。

 

对任何一组不自相矛盾的信息,这个最大熵模型不只存在,并且是惟一的。此外,它们都有同一个很是简单的形式--指数函数。不少复杂的问题均可以采用最大熵模型,包括句法分析、语言模型和机器翻译。

 

最大熵模型能够将各类信息整合到一个统一到模型中。它有不少良好的特性:从形式上看,它很是简单,很是优美;从效果上看,它是惟一一种能够知足各个信息源的限制条件,同时又能保证平滑特性。

 

输入法输入汉字的快慢取决于对汉字编码的平均长度,通俗的讲,就是击键次数乘以寻找这个键所须要的时间。

 

将汉字输入到计算机中,本质上是一个将咱们人为约定的信息记录编码--汉字,转换成计算机约定的编码,国际码或者UTF-8的信息转换过程。对汉字的编码分为两部分:对拼音的编码和消除歧义性的编码。

 

语言和文字做为通讯的编码手段,一个重要目的是帮助思惟和记忆。若是一个输入法中断了人们的思惟过程,就和人的天然行为不相符合。

 

香农第必定理指出,对于一个信息,任何编码的长度都不小于它的信息熵。

 

拼音转汉字的算法和在导航中寻找最短路径的算法相同,都是动态规划。

 

布隆过滤器

在平常生活中,包括设计计算机软件时,常常要判断一个元素是否在一个集合中。好比,在字处理软件中,须要检查一个英语单词是否拼写正确;在网路爬虫里,一个网址是否已访问过。最直接的方法就是将集合中所有元素存在计算机中,遇到一个新元素时,将它和集合中的元素直接比较便可。通常来说,计算机中的集合是用哈希表来存储的。好处是快速准确,缺点是耗费存储空间。用哈希表实现的具体办法是将每个email地址对应成一个8字节的信息指纹,而后将这些信息指纹存入哈希表,因为哈希表的存储效率通常只有50%。使用布隆过滤器的数学工具,只须要哈希表的1/8到1/4的大小就能够解决一样的问题。

布隆过滤器背后的数学原理在于两个彻底随机的数字冲突的几率很小,所以,能够作很小的误识别率条件下,用不多的空间存储大量信息。常见的补救误识别的方法是再在创建一个小的白名单,存储那些可能被识别兀判断信息。

 

贝叶斯网络,加权网络图。假定在这个图中马尔可夫假设成立,即每个状态只和与它直接相连的状态有关,而和它间接相连的状态没有直接关系,那么它就是贝叶斯网络。

马尔可夫链是贝叶斯网络的特例,而贝叶斯网络是马尔可夫链的推广。

使用贝叶斯网络必须先肯定这个网络的拓扑结构,而后还要知道各个状态之间相关度几率。获得拓扑结构和这些参数的过程叫作结构训练和参数训练,统称训练。从理论上讲,它是一个NP完备问题,也就是说,对于如今的计算机是不可计算的。

 

贝叶斯网络在图像处理、文字处理、支持决策等方面有不少应用。在文字处理方面,语义相近的词之间的关系能够用一个贝叶斯网络来描述。

相关文章
相关标签/搜索