第16章 信息指纹及其应用
信息指纹
爬虫中记录下载过的网页链接可以使用一个函数,将网址映射到固定长度的二进制中(信息指纹)。
产生信息指纹的关键算法:伪随机数产生器算法,就是将一个数的平方掐头去尾,取中间几位数。如1001(相当于十进制的9),平方是01010001(相当于十进制的81),掐头去尾,剩下中间4位0100。当然这种方法产生的指纹很可能相同,所以现在常用梅森旋转算法。
信息指纹的用途
- 集合相同的判定
- 判定集合基本相同
- YouTube的反盗版
信息指纹重复的可能性
k个指纹不重复的概率
当 N→∞
这个概率需要小于0.5,因此
等价于
由于k>0,上述不等式有唯一解
如果用MD5指纹,有128位二进制,也就是说每一千八百亿亿次才能重复一次,所以,不同信息产生相同指纹的可能性几乎为零。
相似哈希
相似哈希的特点是,如果两个网页的相似哈希相差越小,那么这两个网页的相似性越高。如果两个网页相同,那么相似哈希必定相同。
第17章 由电视剧《暗算》所想到的——谈谈密码学的数学原理
好的密码必须做到根据已知的明文和密文的对应推断不出新的密文内容。
无论是RSA算法、Rabin算法还是后来的EI Gamal算法,无非是找几个大的素数做一些乘除和乘方运算。
公开密钥是目前最常用的加密方法。
第18章 闪光的不一定是金子——谈谈搜索引擎反作弊问题和搜索结果的权威性问题
搜索引擎的反作弊
- 增强排序算法的抗噪声的能力
- 过滤噪音,还原真实的排名
噪音的消除过程是一个解卷积的过程。
搜集一段时间后,将作弊者抓出来,还原真实的排名。
卖链接的网站到其他网站的出链数目可以作为一个向量,是这个网站固有的特征。既然是向量,就能计算出余弦距离。有些网站的出链向量之间的余弦距离几乎为1。
作弊的网站一般都需要互相链接,来提高自己的排名。这样,在互联网这张大图中就形成了一些Clique。图论中有专门的发现Clique的方法,可以直接应用到反作弊中。
作弊的人只针对占市场份额最大的搜索引擎算法来作弊,因为作弊也是有成本的。
作弊的本质是在网页排名信号中加入了噪音,因此反作弊就是去噪音。
搜索结果的权威性
步骤:
- 对每一个网页正文中的每一句话进行句法分析,找出涉及到的主题短语(比如“吸烟的危害”),以及对信息源的描述(比如国际卫生组织等)。这样就得到了“提及”信息。
- 利用互信息,找到主题短语和信息源的相关性。
- 对主题短语进行聚合。
- 对一个网站中的网页进行聚合,比如按照子域或者子目录进行聚类。
第19章 谈谈数学模型的重要性
- 一个正确的数学模型应当在形式上是简单的。
- 一个正确的数学模型一开始可能还不如一个精雕细琢过的错误模型来的准确,但是如果我们认为大方向是对的,就应该坚持下去。
- 大量准确的数据对研发很重要。
- 正确的模型也可能受噪音的干扰,而显得不准确;这时候不应该用一种凑合的修正方法加以弥补,而是要找到噪音的根源,这也许能通往重大的发现。
第20章 不要把鸡蛋放到一个篮子里——谈谈最大熵模型
最大熵原理指出,对一个随机事件的概率分布进行预测时,我们的预测应当满足全部已知的条件,而对未知的情况不要做任何主观假设。在这种情况下,概率分布最均匀,预测的风险最小。因为这时概率分布的信息熵最大,所以人们把这种模型叫做“最大熵模型”。
其中, Z, 是归一化因子,保证概率加起来等于1。 λ1,λ2 需要通过观测数据训练出来。
最大熵模型在形式上非常简单,但是在实现上异常复杂,计算量非常大。
最大熵模型快速算法的实现很复杂。到今天为止,世界上能有效实现这些算法的也不到100人。
最大熵模型可以将各种信息整合到一个统一的模型中。
第21章 拼音输入法的数学原理
输入法输入汉字的快慢就是用击键次数乘以寻找这个键所需时间。
- 双拼:顾名思义,就是将拼音缩写为两个字母,一个声母,一个韵母,将缩写的声母和韵母安排在特定的键位上(版本较多,不统一)。打字时,每字只打两键,表面上减少了按键次数,但却加大了记忆量,打字速度与全拼相比没有多达优势。
- 全拼:将拼音一字不漏的照搬,按键数多,但非常简单,使用率非常高。
输入一个汉子需要敲多少个键——谈谈香农第一定理
汉子的信息熵:
对每一个字进行统计,而且不考虑上下文相关性,估算出大概值在10比特以内,当然这取决于用什么预料来做估计。如果输入法只能用26个字母输入,那么每个字母可以代表 log26≈4.7 比特。也就是说一个汉子输入需要敲 10/4.7≈2.1 次键。
如果把汉子组成词,以词为单位统计信息熵,那么每个汉字的平均信息熵将会减少。不考虑上下文相关性,以词为单位输入一个汉字平均只需要敲 8/4.7≈1.7 次键。如果再考虑相关性,对汉语建立一个基于词的统计语言模型,就可以将每个汉字的信息熵降到6比特左右,这时,输入一个汉字只要敲 6/4.7≈1.3 次键。
目前,各家的拼音输入法基本处在同一个量级,提升的关键就在于看谁能准确而有效地建立语言模型。
拼音转汉字的算法
拼音转汉字和导航中寻找最短路径的算法相同,都是动态规划。
个性化的语言模型
如果每个人有各自的语言模型,用拼音输入时,候选词次序的排列一定比通用的输入法排的好。
为每个人训练一个特点的语言模型,最好是收集足够多这个人自己写的文字,但是一辈子写的东西都不足以训练一个语言模型。
更好的办法是找到大量符合用户经常输入的内容和用语习惯的语料,训练一个用户特定的语言模型。
对于相对冷僻的内容,个性化的语言模型就远不如通用的模型,更好的办法是综合这两个模型。
第22章 自然语言处理的教父马库斯和他的优秀弟子们
自然语言处理从规则转到统计方法上,贡献最大的有两个人:贾里尼克和马库斯,或者说是马库斯优秀的弟子们。
第23章 布隆过滤器
布隆过滤器用于判断一个元素是否在一个集合中。
对于一个黑名单集合,布隆过滤器不会漏掉黑名单中的任何一个可疑地址。但是,它也有一个不足之处,就是极小的可能将一个不在黑名单中的电子邮件地址判定为在黑名单中。
布隆过滤器背后的数学原理在于两个完全随机的数字相冲突的概率很小。因此,在很小的误判率的条件下,用很少的空间存储大量的信息。
补救的办法是建立一个小的白名单,存储那些可能被误判的信息。
第24章 马尔科夫链的扩展——贝叶斯网络
贝叶斯网络
很多事物相互的关系并不能用一条链来串起来,很可能是交叉的、错综复杂的。
由于网络的每个弧都有一个可信度,贝叶斯网络也被称作信念网络。
贝叶斯网络的拓扑结构比马尔科夫链灵活,它不受马尔科夫的链状结构的约束,因此可以更加准确地描述事件之间的相关性。可以说,马尔科夫链是贝叶斯网络的特例,而贝叶斯网络是马尔科夫链的推广。
使用贝叶斯网络必须先确定这个网络的拓扑结构,然后还要知道各个状态之间相关的概率。得到拓扑结构和这些参数的过程分别叫做结构训练和参数训练,统称训练。相比马尔科夫链,贝叶斯网络的训练比较复杂,它是一个NP完备问题,也就是说,对于现在的计算机是不可计算的。
IBM华生实验室的茨威格博士和西雅图华盛顿大学的比尔默教授完成了一个通用的贝叶斯网络工具包,可以免费使用。
语义相近的词之间的关系上可以用一个贝叶斯网络来描述,利用贝叶斯网络,可以找出近义词和相关的词。
贝叶斯网络在词分类中的应用
文本分类可以建立文本为行,关键词为列(或者叫特征、维度)的矩阵。将矩阵旋转90度,进行奇异值分解,或者对每个词以文本作为列(或者叫特征、维度),建立一个向量,再进行向量的聚类,那么得到的是对词的分类而不是文本的分类。分出来的每一类我们称为一个主题(或者一个概念)。
可以建立文章、主题、关键词的贝叶斯网络。
从数学层面上来讲,贝叶斯网络是一个加权的有向图,是马尔科夫链的扩展。从认识论的层面上看,贝叶斯网络克服了马尔科夫链那种机械的线性约束,可以把任何有关联的事件统一到它的框架下面。
第25章 条件随机场、文法分析和其他
条件随机场
隐马尔科夫模型中,观测值只取决于对应的隐含值,如果把观测值与对应隐含值及对应隐含值的前后两个隐含值都联系起来,那么这样的模型就是条件随机场。
条件随机场是隐含马尔科夫模型的一种扩展,是一种特殊的概率图模型。与贝叶斯网络的不同之处在于,条件随机场是无向图,而贝叶斯网络是有向图。
在其他领域的应用
条件随机场用于预测何时、何地、发生何种犯罪的概率。
条件随机场是一个非常灵活的用于预测的统计模型。
和最大熵模型一样,条件随机场形式简单,但是实现复杂。
第26章 维比特和维比特算法
维比特算法是现代数字通信中最常用的算法,同时也是很多自然语言处理采用的解码算法。
维比特算法是一个特殊但应用最广的动态规划算法。利用动态规划,可以解决任何一个图中的最短路径问题。
凡是使用隐马尔科夫模型描述的问题都可以用它来解码。
频分多址
时分多址
码分多址
维特比算法说白了就是动态规划实现最短路径,只要知道“动态规划可以降低复杂度”这一点就能轻松理解维特比算法。
第27章 上帝的算法——期望最大化算法
EM算法就是这样,假设我们想估计知道A和B两个参数,在开始状态下二者都是未知的,但如果知道了A的信息就可以得到B的信息,反过来知道了B也就得到了A。可以考虑首先赋予A某种初值,以此得到B的估计值,然后从B的当前值出发,重新估计A的取值,这个过程一直持续到收敛为止。
第28章 逻辑回归和搜索广告
搜索广告之所以比传统的在线展示广告赚钱多很多,除了搜索者的意图明确外,更重要的是靠预测用户可能会点击哪些广告,来决定在搜索结果页中插入哪些广告。
逻辑回归模型是一种将影响概率的不同因素结合在一起的指数模型。
第29章 各个击破算法和Google云计算的基础
特别大的矩阵运算可以采用分治算法的思想,将矩阵拆分成小矩阵进行运算,最后合并结果。
原理很简单:将复杂的大问题分解成很多小问题分别求解,然后再把小问题的解合并成原始问题的解。
第30章 Google大脑和人工神经网络
人工神经网络与贝叶斯网络
共同点:
- 都是有向图,每一个节点的取值都只取决于前一级的节点,而与更前面的节点无关;
- 训练方法相似;
- 对于很多模式分类问题,这两种方法在效果上相似;
训练计算量都特别大
不同点:
- 人工神经网络在结构上是完全标准化的,而贝叶斯网络更灵活;
- 各个变量先进行线性组合,再进行非线性变换,计算机实现起来容易。而贝叶斯网络比较灵活,也比较复杂;
- 贝叶斯网络更容易考虑前后的相关性,人工神经网络的输出相对孤立。
第31章 大数据的威力——谈谈数据的重要性
统计首先要求数据量充足,其次数据要有代表性。
附录 计算复杂度
将计算复杂度严格量化。