数学之美(上)

数学之美(吴军)

1 文字和语言 vs 数字和信息

1.1 文字和数字
  • 古埃及的象形文字中,读音相同的词可能用于同一个符号记录——体现了聚类的思想。
    • 聚类最终会带来歧义性,远古时代和现代解决歧义的方法基本相同,就是通过依靠上下文
    • 但总有失灵的时候,这就是语言从产生伊始固有的特点
  • 翻译之所以能达成,仅仅是因为不同的文字系统在记录信息上的能力是等价的。进一步讲,文字只是信息的载体,而不是信息本身。
  • 埃及人通过文字记录生活中最重要的信息。这给我们以下启示:
    • 信息的冗余是信息安全的保障。罗塞塔石碑上的内容是同一信息重复三次(埃及象形文字、埃及的拼音文字、古希腊文),因此只要有一份完好保留下来,原有的信息就不会丢失。这对信道编码有重要意义。
    • 语言的数据,称之为语料,尤其是多语的对照语料对翻译至关重要,是从事机器翻译研究的基础。
  • 进位制:几乎所有文明采用了十进制,但玛雅文明采用了二十进制(手指加脚趾)(太阳纪为400年)。2012年是太阳纪的最后一年,最后被讹传为世界末日hhhh。
    • 玛雅文明发展缓慢可能因为它的文字极度复杂,以至于部落中没几个人能认识。
    • 载体不应过于复杂 (总结by me)
  • 古印度人发明了包括0在内的十个阿拉伯数字。阿拉伯数字或者说印度数字的革命性不仅在于它的简洁有效,而且标志着数字和文字的分离。使得数学和自然语言的研究分离。
1.2 文字和语言背后的数学
  • 古巴比伦的楔(xie)形文字——最古老的拼音文字
  • 腓尼基人把楔形文字简化为22个字母
  • 古代的文字体系,常用字短生僻字长。多采用生僻字。符合信息论中最短编码原理。因为书写文字较麻烦,这种文字设计的好处是书写起来省时间省材料。但古人口语与今天的白话文类似。
    • 通信时,如果信道较宽,则信息不必压缩就能传递
    • 通信时,如果信道较窄,则信息传递前应该尽可能的压缩
  • 古犹太人抄写圣经,要检查每一行、每一列的校验是否正确
  • 字母到词的构词法是词而定编码规则;语法是语言的编码和解码规则。
  • 自然语言处理的成就宣布语言>语法

2 自然语言处理——从规则到统计

语言的数学本质就是编码和解码

2.1 机器智能
  • 图灵测试(Turing Test):人和机器进行交流,人无法判断自己交流的对象是人还是机器,说明机器拥有智能了。
  • 早期学术界认为要让计算机完成翻译或者语音识别等只有人类才能做的事,必须先让计算机理解自然语言。
  • 事实上,这些功能全都是靠数学实现,更准确的说是靠统计
2.2 从规则到统计
  • 基于统计的方法的核心模型是通信系统加隐马尔科夫模型
  • 随着计算能力的提高和数据量的不断增加,过去看似不可能通过统计模型完成的任务,渐渐地变得可能了,包括复杂的句法分析

3 统计语言建模

让计算机处理自然语言,一个基本的问题是让自然语言这种上下文相关的特性建立数学模型。即统计语言模型(Statistical Language Model)

3.1 用数学的方法描述语言规律
  • 贾里尼克解决文字序列是否合理的方法:
    • 假定S是某一个有意义的句子,由一连串特定顺序排列的词 w 1 , w 2 , … , w n w_1,w_2,…,w_n w1,w2wn组成,n是句子的长度。S在文本中出现的可能性 P ( S ) = P ( w 1 , w 2 , … , w n ) = P ( w 1 ) ⋅ P ( w 2 ∣ w 1 ) … … P ( w n ∣ w 1 , w 2 , … , w n − 1 ) P(S)=P(w_1,w_2,…,w_n)=P(w1_)\cdot P(w_2|w_1)……P(w_n|w_1,w_2,…,w_{n-1)} P(S)=P(w1,w2,,wn)=P(w1)P(w2w1)P(wnw1,w2,wn1)
      • 俄国数学家马尔可夫(Andrey Markov)提出:假设任意一个词出现的概率只与他前面的词有关。(马尔科夫假设)
      • P ( S ) = P ( w 1 , w 2 , … , w n ) = P ( w 1 ) P ( w 2 ∣ w 1 ) … … P ( w n ∣ w n − 1 ) P(S)=P(w_1,w_2,…,w_n)=P(w_1)P(w_2|w_1)……P(w_n|w_{n-1)} P(S)=P(w1,w2,,wn)=P(w1)P(w2w1)P(wnwn1),记为二元模型(Bigram Model)
3.2 统计语言模型的工程诀窍
3.2.1 高阶语言模型:
  • N-1阶马尔科夫模型:文本中每个词wi和前面N-1个词有关,而与前面的词无关。N=2即为二元模型;N=1的一元模型实际上是一个上下文无关的模型。实际中最多的是N=3的三元模型,更高阶的就很少用了。
  • 马尔科夫假设的局限性在于自然语言中,上下文之间的相关性可能跨度非常大,甚至可以从一个段落跨到另一个段落,因此再怎么提高模型的阶数,对这种情况也无可奈何。这是要采用其他一些**长程的依赖性(Long Distance Dependency)**来解决这个问题。

模型的训练、零概率问题和平滑方法:

  • 统计 ( w i − 1 , w i ) (w_{i-1},w_i) wi1wi的词频和wi的词频,计算条件概率。由于统计量小,涉及到统计的可靠性问题。实际应用中,统计语言模型的零概率问题是无法回避的,必须解决。
  • 古德-图灵估计:对于没有看见的问题,我们不能认为发生的概率为0。因此我们从概率的总量(probability mass)中,分配一个很小的比例给这些没有看见的事件。这样,看见的事件的概率总和就小于1了,因此需要将所有看见的事件的概率调小一点,根据“越是不可信的统计折扣越多”的方法进行。
    • Nr为出现r次的词语的数量。用dr代替r,其中 d r = ( r + 1 ) ⋅ N r + 1 N r d_r = \frac{(r+1)\cdot N_{r+1}}{N_r} dr=Nr(r+1)Nr+1
  • zipf定律:出现1次的词比出现两次的多,出现两次的词比出现三次的词要多。
  • 卡茨退避法:词频大于阈值T的,按照原频率;小于T的,按照古德-图灵估计后的相对频度;剩下的概率为未出现的词的概率
3.2.3 语料的选取问题
  • 训练数据和应用数据应该保持一致,才会有较好地训练效果。

    • 反例:腾讯搜索最开始使用《人民日报》的语料训练模型,因为开发者认为这些预料干净、无噪声;但实际训练的效果比较差,后面采用网页的数据,尽管有很多的噪音,但和用户输入的搜索串更加一致,搜索质量反而比较好。
  • 数据预处理很重要

4 谈谈分词

4.1 中文分词方法的演变
  • 查字典:最早的方法。由北航的梁南元教授提出。将橘子从左向右扫描一遍,遇到字典中有的词的标识出来,遇到复合词就找最长的词匹配,遇到不认识的词就分割成单字词。
  • 哈尔滨工业大学的王晓龙博士将查字典的方法理论化,发展成最少词数的分词理论,即一句话应该分成数量最少的词传。
    • 但对于有二义性的分割就无能为力了
    • 例如:“北京大学生”,正确分割方法是“北京-大学生”,但是按此方法分类是“北京大学-生”
  • 1990年,清华大学的郭进博士用统计语言模型成功解决了分词二义性的问题
4.2 如何衡量分词的结果
4.2.1 分词的一致性

简单依靠机器分词与人工分词的结果比较来衡量分词器的准确性就很难,甚至是毫无意义的。

不同的人对同一个句子可能有不同的分词方法,但在不同的应用中,往往是一种词的切分比另一种更有效

4.2.2 词的颗粒度和层次

人工分词不一致性的主要原因是人们对词的颗粒度的认识问题

不同应用中,不同颗粒度的效果不同

  • 机器翻译中,颗粒度大的翻译效果好
  • 网页搜索中,颗粒度小的搜索效果好

一个分词器应该支持不同层次的词的划分,再由不同应用自行决定切分的颗粒度。

  • 建立一个基本词表和一个复合词表。

分词的不一致性可以分为错误和颗粒度不一致两种:

  • 错误:
    • 越界性错误:把“北京大学生“分为”北京大学-生“
    • 覆盖性错误:把”贾里尼克“分为四个字
  • 颗粒度不一致:人工分词的不一致性。要做数据挖掘,不断完善复合词的词典,这也是近年来中文分词的工作重点

5 隐马尔可夫模型

5.1 通信模型

通信模型的主要核心:编码、解码、信道传输。自然语言处理早期的工作都集中在语法、语义和知识表述上,离通信的原理越走越远。当自然语言处理问题回归到通信系统的解码问题时,很多难题都迎刃而解了。

从所有的源信息中找到最肯能产生出观测信号的信息:在已知 o 1 , o 2 , o 3 … o_1,o_2,o_3… o1,o2,o3的情况下,求得令条件概率 P ( s 1 , s 2 , … ∣ o 1 , o 2 , … ) P(s_1,s_2,…|o_1,o_2,…) P(s1,s2,o1,o2,)达到最大的那个信息串 s 1 , s 2 , … s_1,s_2,… s1,s2,,即:

s 1 , s 2 , … = A r g M a x P a l l s 1 , s 2 , … ( s 1 , s 2 , … ∣ o 1 , o 2 , … ) s_1,s_2,… = ArgMax P_{all s_1,s_2,… }(s_1,s_2,…|o_1,o_2,…) s1,s2,=ArgMaxPalls1,s2,(s1,s2,o1,o2,)

用贝叶斯公式可以将上述公式变换成:

P ( o 1 , o 2 , … ∣ s 1 , s 2 , … ) ⋅ P ( s 1 , s 2 , … ) P ( o 1 , o 2 , … ) \frac{P(o_1,o_2,…|s_1,s_2,…)\cdot P(s_1,s_2,…)}{P(o_1,o_2,…)} P(o1,o2,)P(o1,o2,s1,s2,)P(s1,s2,)

5.2 隐马尔可夫模型

马尔可夫假设:随机过程中各个状态 s t s_t st的概率分布只与他前一个状态 s t − 1 s_{t-1} st1有关,即 P ( s t ∣ s 1 , s 2 , … , s t − 1 ) = P ( s t ∣ s t − 1 ) P(s_t|s_1,s_2,…,s_{t-1})=P(s_t|s_{t-1}) P(sts1,s2,,st1)=P(stst1),符合该假设的过程称为马尔可夫过程。

隐马尔可夫模型:

  • 任一时刻 t t t的状态 s t s_t st是不可见的,观察者没法通过观察到一个状态序列 s 1 , s 2 , … … s_1,s_2,…… s1,s2,来推测转移概率等参数。但是隐马尔可夫模型在每个时刻 t t t都会输出一个符号 o t o_t ot,并且 o t o_t ot仅和 s t s_t st相关。这个被称为独立输出假设

  • 计算某个特定状态序列 s 1 , s 2 , … … s_1,s_2,…… s1,s2,输出符号 o 1 , o 2 , … … o_1,o_2,…… o1,o2,的概率:

    P ( s 1 , s 2 , … , o 1 , o 2 , … ) = ∏ t P ( s t ∣ s t − 1 ) ⋅ P ( o t ∣ s t ) P(s_1,s_2,…,o_1,o_2,…) = \displaystyle\prod_tP(s_t|s_{t-1})\cdot P(o_t|s_t) P(s1,s2,,o1,o2,)=tP(stst1)P(otst)

  • 利用维特比算法计算上面式子的最大值

5.3 隐马尔可夫模型的训练

如何估计隐马尔可夫模型的参数:

  • 两个参数:

    • 转移概率: P ( s t ∣ s t − 1 ) P(s_t|s_{t-1}) P(stst1)
    • 生成概率: P ( o t ∣ s t ) P(o_t|s_t) P(otst)
  • 对于生成概率(转移概率也类似),我们知道 P ( s t ∣ s t − 1 ) = P ( o t , s t ) P ( s t ) P(s_t|s_{t-1}) = \frac{P(o_t,s_t)}{P(s_t)} P(stst1)=P(st)P(ot,st)。如果有足够多的人工标记(Human Annotated)的数据,知道经过状态 s t s_t st有多少次# ( s t ) (s_t) (st),每次经过这个状态时,分别产生的输出 o t o_t ot是什么,知道# ( o t , s t ) (o_t,s_t) (ot,st),即可计算比值直接算出模型的参数。由于数据是人工标注的,因此称为有监督的训练方法(Supervised Training)

  • 仅通过 o 1 , o 2 , … o_1,o_2,… o1,o2,就推算出模型参数的方法称为无监督的训练方法,主要用到鲍姆-韦尔奇算法

    • 首先找到一组能够产生输出序列O的模型参数,称为 M θ 0 M_{\theta_0} Mθ0
    • 算出这个模型产生O的概率,找到这个模型产生O的所有可能的路径以及这些路径的概率。记录每个状态经历了多少次,到达了哪些状态,输出了那些符号,将这些当做“有标注的训练数据”,计算出一组新的模型参数 θ 1 \theta_1 θ1,从 M θ 0 M_{\theta_0} Mθ0 M θ 1 M_{\theta_1} Mθ1的过程成为一次迭代,可以证明 P ( O ∣ M θ 1 ) > P ( O ∣ M θ 0 ) P(O|M_{\theta_1})>P(O|M_{\theta_0}) P(OMθ1)>P(OMθ0)
  • 重复上述迭代过程,直到模型的质量不再有明显提高为止。

  • 每一次迭代都是不断地估计(Expectation)新的模型参数,使得输出的概率达到最大化(Maximization),这个过程称为期望值最大化(Expectation-Maximization),简称EM过程。

6 信息的度量和作用

6.1 信息熵

香农提出,信息熵(Entropy)——准确信息量为: H = − ( p 1 ⋅ l o g p 1 + p 2 ⋅ l o g p 2 + … + p n ⋅ l o g p n ) H = -(p_1\cdot logp_1 + p_2\cdot logp_2 +…+ p_n\cdot logp_n ) H=(p1logp1+p2logp2++pnlogpn)

6.2 信息的作用

几乎所有的自然语言处理、信息与信号处理的应用都是一个消除不确定性的过程

条件熵(condition entropy):

  • 假设 X X X Y Y Y是两个随机变量,X的随机分布是 P ( X ) P(X) P(X),则 X X X的熵为: H ( X ) = − ∑ x ∈ X P ( x ) ⋅ l o g P ( x ) H(X) = - \displaystyle\sum_{x\in X} P(x)\cdot logP(x) H(X)=xXP(x)logP(x)
  • 假设我们知道 Y Y Y的一些情况,包括和 X X X一起出现的概率(联合概率分布),以及在 Y Y Y取不同值的情况下 X X X的概率分布(条件概率分布),定义在 Y Y Y的条件下的条件熵为: H ( X ∣ Y ) = − ∑ x ∈ X , y ∈ Y P ( x , y ) ⋅ l o g P ( x ∣ y ) H(X|Y) = - \displaystyle\sum_{x\in X,y\in Y}P(x,y)\cdot logP(x|y) H(XY)=xX,yYP(x,y)logP(xy)
  • 同理还有三元模型以及更多元的模型。可以证明三元模型比二元好……比如 H ( X ∣ Y ) ≤ H ( X ) H(X|Y)\le H(X) H(XY)H(X)
6.3 互信息(Mutual Information)

假定有两个随机事件 X X X Y Y Y,它们的互信息定义如下:

  • I ( X ; Y ) = ∑ x ∈ X , y ∈ Y P ( x , y ) ⋅ l o g P ( x , y ) P ( x ) P ( y ) I(X;Y)=\displaystyle\sum_{x\in X,y\in Y}P(x,y)\cdot log\frac{P(x,y)}{P(x)P(y)} I(X;Y)=xX,yYP(x,y)logP(x)P(y)P(x,y)

  • 可以证明: I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) I(X;Y)=H(X)-H(X|Y) I(X;Y)=H(X)H(XY)

  • 互信息是两个事件相关性的量化度量。就是在了解了其中一个 Y Y Y的前提下,对消除另一个 X X X的不确定性所提供的信息量

6.4 相对熵(Relative Entroy)

衡量两个取值为正数的函数的相似性:

  • K L ( f ( x ) ∣ ∣ g ( x ) ) = ∑ x ∈ X f ( x ) ⋅ l o g f ( x ) g ( x ) KL(f(x)||g(x))=\displaystyle\sum_{x\in X}f(x)\cdot log\frac{f(x)}{g(x)} KL(f(x)g(x))=xXf(x)logg(x)f(x)

相关结论:

  • 对于两个完全相等的函数,它们的相对熵为0
  • 相对熵越大,两个函数差异越大
  • 对于概率分布或者概率密度函数,如果取值均大于零,相对熵可以度量两个随机分布的差异性

为了让相对熵更对称,詹森和香农提出了一种新的相对熵的计算方法:

  • J S ( f ( x ) ∣ ∣ g ( x ) ) = 1 2 [ K L ( f ( x ) ∣ ∣ g ( x ) ) + K L ( g ( x ) ∣ ∣ f ( x ) ) ] JS(f(x)||g(x))=\frac{1}{2}[KL(f(x)||g(x))+KL(g(x)||f(x))] JS(f(x)g(x))=21[KL(f(x)g(x))+KL(g(x)f(x))]

利用相对熵,还可以得到信息检索中最重要的一个概念:词频率-逆向文档频率(TF-IDF)

7 贾里尼克和现代语言处理

大牛、公正、朴素、勤奋、格局

8 简单之美——布尔代数和搜索引擎

建立搜索引擎:

  • 自动下载尽可能多的网页
  • 建立快速有效的索引
  • 根据相关性对网页进行公平准确的排序
8.1 布尔代数
  • 二进制:最简单的计数方法。由莱布尼茨完善。
  • 1938年,香农在硕士论文中指出用布尔代数来实现开关电路,才使得布尔代数成为数字电路的基础(布尔代数第一次像样的应用)
  • 布尔运算将数学和逻辑合二为一
  • 所有数学和逻辑运算,加减乘除乘方开方等等都能转换成二值的布尔运算
  • 布尔代数对于数学的意义如同量子力学对物理的意义,他们将我们对世界的认识从连续状态扩展到离散状态
8.2 索引

查询语句(SQL)是基于布尔运算的,它会自动地把用户的查询语句转换成布尔运算的模式

9 图论和网络爬虫

第八章讲到了如何建立索引。本章介绍如何自动下载互联网所有的网页——图论中的遍历算法

9.1 图论
  • 广度优先搜索(Breadth-First Search,BFS):
    • 先访问根节点
    • 再访问根节点的子节点(从左到右)
    • 依次向下一次遍历
  • 深度优先搜索(Depth-First Search,DFS):
    • 一条路走到黑
9.2 网络爬虫

网络爬虫(Web Crawlers)把网页当做一个结点,超链接作为连接网页的弧,从一个网页出发,用图的遍历算法自动地访问到每一个网页并把它们存起来。

  • 世界上第一个爬虫程序是麻省理工学院的学生马休·格雷在1993年完成的,他给自己的程序起名“互联网漫游者”(WWW Wander)
  • 假定先访问一个网站的首页,再解析这个网页里面的所有超链接,相当于知道了这家网站首页所直接链接的所有网页,分析这些网页又能找到其他相连的网页,让计算机不停做下去,就能下载整个互联网。
  • 哈希表记载哪些网页下载过了,以免重复
9.3 图论的两点补充说明
9.3.1 七桥问题

定理:如果一个图能够从一个点出发,每条边不重复地遍历一遍回到这个顶点,那么每一顶点的度必须是偶数

  • 度:每个顶点与之相连的边的数量
  • 每个顶点有多少个进入的边就得有多少个出去的边才能实现上述问题
9.3.2 构建网络爬虫的工程要点
  • 用BFS还是DFS?

    • 理论上,都能在大致的时间爬取整个静态互联网上的内容
    • 但实际上,不考虑时间因素、互联网静态不变都是现实中做不到的
    • 各个网站最重要的显然是首页。在这个前提下,BFS明显优于DFS。
    • 但DFS并非不使用。这跟爬虫的分布式结构以及网络通信的握手成本有关。“握手”就是下载服务器和网站的服务器建立连接的过程。这个过程需要额外的时间,握手次数太多会导致下载效率降低。对于某个网站,一般由一个或几个特定的服务器专门下载,有点像DFS,虽然下载同一个网站的时还是需要用BFS
    • 总结:网络爬虫对网页遍历的次序不是简单的BFS还是DFS,而是有一个相对复杂的下载优先级排序的方法。管理这个优先级排序的子系统一般称为调度系统(Scheduler)。一般来说,在爬虫中,BFS的成分多一点
  • 页面的分析和URL的获取?

    • 现如今很多网页使用一些脚本语言(JavaScript等)生成的,打开网页的源代码,URL并不是直接可见的文本,需要解析。
    • 有的网页的脚本写的不是很规范,解析起来很困难,但浏览器可以解析。因此需要做浏览器内核的工程师来写网络爬虫的解析程序,可惜出色的浏览器内核的工程师数量很少
    • 若一些网页命名存在,但搜索引擎没有收录,则说明网络爬虫中的解析程序没能成功解析网页中不规范的脚本程序
  • URL表

    • 在一台下载服务器上建立和维护一张哈希表不是难事,但是同时有上千台服务器一起下载网页,维护一张统一的哈希表很困难

    • 解决办法:

      • 首先明确每台下载服务器的分工,也就是说在调度时一看到某个URL就能知道交给哪台服务器下载,一面很多服务器重复判断某个URL是否需要下载
      • 明确分工后,判断URL是否需要下载可以进行批处理

10 PageRank——Google的民主表决式网页排名技术

10.1 PageRank算法的原理

PageRank的核心思想:如果一个网页被很多其他网页所链接,说明它受到普遍的信任和依赖,那么它的排名就高

理论:运用了迭代的思想

  • 假定所有网页的排名是相同的
  • 根据这个初始值,计算各个网页的第一次迭代排名。网页 Y Y Y的排名(权重)来自于所有指向这个网页的其他网页 X 1 , X 2 , … , X K X_1,X_2,…,X_K X1,X2,,XK的权重之和。
  • 根据第一次迭代排名计算出第二次的排名。
  • 佩奇和布林从理论上证明了不论初始值如何选取,这种算法都能保证网页排名的估计值收敛到排名的真实值。

应用:

  • 由于网页数量是庞大的,矩阵的元素过多。佩奇和布林两个人利用稀疏矩阵的技巧,大大简化了计算量,实现了网页排名算法

PageRank算法符合系统论的观点。大部分人只注意到网页内容和查询语句之间的关系,而忽略了网页之间的关系

10.2 PageRank算法的计算方法

假定向量: B = ( b 1 , b 2 , … , b N ) T B = (b_1,b_2,…,b_N)^T B=(b1,b2,,bN)T为第一、第二……第N个网页的网页排名

矩阵:

A = [ a 11 … a 1 n a 1 M … … a m 1 … a m n a m M … … a M 1 … a M n a M M ] A = \begin{bmatrix}a_{11} & … & a_{1n} & a_{1M}\\… & & & …\\a_{m1} & … & a_{mn} & a_{mM}\\… & & & …\\a_{M1} & … & a_{Mn} & a_{MM}\end{bmatrix} A=a11am1aM1a1namnaMna1MamMaMM

为网页间链接的数目,其中 a m n a_{mn} amn代表第 n n n个网页指向第 m m m个网页的链接数。 A A A是已知的, B B B是未知的,假定 B i B_i Bi是第 i i i次迭代的结果,那么 B i = A ⋅ B i − 1 B_i=A\cdot B_{i-1} Bi=ABi1

初始假设:所有网页的排名都是1/N,即

B 0 = ( 1 N , 1 N , … , 1 N ) B_0 = (\displaystyle\frac{1}{N},\frac{1}{N},…,\frac{1}{N}) B0=(N1,N1,,N1)

可以证明 B i B_i Bi最终会收敛,即 B = B × A B=B\times A B=B×A

计算网页时要对零概率或者小概率事件进行平滑处理,网页的排名是一个一维向量,因此只能利用一个小的常数 α \alpha α,此时公式变为

B i = [ α N ⋅ ( 1 − α ) A ] ⋅ B i − 1 B_i=[\displaystyle\frac{\alpha}{N}\cdot (1-\alpha)A]\cdot B_{i-1} Bi=[Nα(1α)A]Bi1

11 如何确定网页和查询之间的相关性

  • 影响搜索引擎质量的诸多因素:
    • 完备的索引
    • 对网页质量的度量(PageRank)
    • 用户偏好
    • 确定一个网页和某个查询的相关性的方法
11.1 搜索关键词权重的科学度量TF-IDF
  1. 如果一个查询包括 N N N个关键词 w 1 , w 2 , … , w N w_1,w_2,…,w_N w1,w2,,wN,它们在一个特定网页中的词频分别是 T F 1 , T F 2 , … , T F N TF_1,TF_2,…,TF_N TF1,TF2,,TFNTF:Term Frequency,是词频一词的缩写)。

  2. 其中每个词都有相应的权重

    1. 一个词预测主题的能力越强,权重越大
    2. 停止词的权重为0(的,地,得等词)
  3. 确定权重的方式:假定一个关键词 w w w D w D_w Dw个网页中出现过,那么 D w D_w Dw越大, w w w的权重越小。在信息检索中,使用最多的权重是“逆文本频率指数(Inverse Document Frequency,缩写为IDF)”: I D F = l o g ( D D w ) IDF = log(\displaystyle\frac{D}{D_w}) IDF=log(DwD),其中 D D D为所有网页数。

    1. 其实IDF的概念就是特定条件下关键词频率分布的交叉熵(Kullback-Leibler Divergency)
  4. 确定相关性的公式(加权求和):

    $TF_1\cdot IDF_1 + TF_2\cdot IDF_2 + … + TF_N\cdot IDF_N $

  5. (有关网页的综合排名大致由相关性和网页排名的乘积决定)

11.2 TF-IDF的信息论依据

关键词的权重应该反应这个词对查询来讲提供了多少信息,每个词的信息量即:

I ( w ) = − P ( w ) l o g P ( w ) = − T F ( w ) N l o g T F ( W ) N = T F ( w ) N l o g N T F ( w ) I(w) = -P(w)logP(w) = -\frac{TF(w)}{N}log\frac{TF(W)}{N}= \frac{TF(w)}{N}log\frac{N}{TF(w)} I(w)=P(w)logP(w)=NTF(w)logNTF(W)=NTF(w)logTF(w)N

其中, N N N是整个语料库的大小,是个可以忽略的常数。上面的公式可以简化为:

I ( w ) = T F ( w ) l o g N T F ( w ) I(w)=TF(w)log\frac{N}{TF(w)} I(w)=TF(w)logTF(w)N

但这个公式存在明显的问题:两个词 T F TF TF相同,但一个是某篇文章特定的常见词,另一个散布在多篇文章中,显然第一个词的分辨率更高,权重应该更大。

现在做一些基本假设:

  1. 每篇文献大小基本相同,均为 M M M个词: M = N D = ∑ w T F ( w ) D M=\frac{N}{D}=\frac{\displaystyle\sum_wTF(w)}{D} M=DN=DwTF(w)
  2. 一个关键词只要在文献中出现,不论次数多少,贡献都相同。一个词要么在一个文献中出现 c ( w ) = T F ( w ) D ( w ) c(w)=\frac{TF(w)}{D(w)} c(w)=D(w)TF(w)次,要么出现 0 0 0次.

可得到公式:

T F ( w ) l o g N T F ( w ) = T F ( w ) l o g M D c ( w ) D ( w ) = T F ( w ) l o g ( D D ( w ) M c ( w ) ) TF(w)log\frac{N}{TF(w)}=TF(w)log\frac{MD}{c(w)D(w)}=TF(w)log(\frac{D}{D(w)}\frac{M}{c(w)}) TF(w)logTF(w)N=TF(w)logc(w)D(w)MD=TF(w)log(D(w)Dc(w)M)

可以看出来,该公式与 T F − I D F TF-IDF TFIDF公式的差异在于 l o g log log中第二项。 c ( w ) < M c(w)<M c(w)<M,所以第二项大于0,是 c ( w ) c(w) c(w)的递减函数。将公式重写为:

T F − I D F ( w ) = I ( w ) − T F ( w ) l o g M c ( w ) TF-IDF(w)=I(w)-TF(w)log\frac{M}{c(w)} TFIDF(w)=I(w)TF(w)logc(w)M

可以看到,一个词的信息量越多, T F − I D F TF-IDF TFIDF值越大;同时 w w w命中的文献中 w w w平均出现的次数越多,第二项越小。 T F − I D F TF-IDF TFIDF越大。结论与信息论相符。

12 有限状态机和动态规划——地图与本地搜索的核心技术

12.1 地址分析和有限状态机

有限状态机:一个特殊的有向图。包括一些状态和连接状态的有向弧。

基于有限状态机的地址识别方法在应用中会有一些问题:

  • 输入的地址不标准或有错别字时,有限状态机会束手无策
  • 改进:基于概率的有限状态机
12.2 全球导航和动态规划

全球导航的关键算法是计算机科学图论中的动态规划(Dynamic Programming)的算法

解释:假设已经找到从北京到广州的最短路径,如果他路过郑州,则从北京到郑州这条子路线一定是北京到郑州所有子路线中最短的。

12.3 有限状态传感器

定义:有限状态机是一个五元组 ( Σ , S , S 0 , δ , f ) (\Sigma,S,S_0,\delta,f) (Σ,S,S0,δ,f),其中:

  • Σ \Sigma Σ:输入符号的集合
  • S S S:非空的有限状态集合
  • S 0 S_0 S0:起始状态
  • δ \delta δ:从空间 S × Σ S\times \Sigma S×Σ S S S的映射函数: δ : S × Σ → S \delta:S\times \Sigma →S δ:S×ΣS
  • f f f:终止状态

有限状态机的合法序列:从起始状态经过一系列状态进入终止状态

加权的有限状态传感器(WFST):

  • 每个状态有输入和输出符号定义
  • 基于概率
  • 概率最大的路径是该句子的识别效果
  • 是天然的自然语言处理的分析工具和解码工具

13 Google AK-47的设计者——阿米特·辛格博士

遵循简单的哲学

简单有效

14 余弦定理和新闻的分类

14.1 新闻的特征向量

新闻的特征向量:某篇新闻中词汇表中每个词的TF-IDF值构成的向量

14.2 向量距离的度量

新闻之间的接近程度:两个向量之间的夹角

余弦定理: c o s A = < b , c > ∣ b ∣ ⋅ ∣ c ∣ cosA=\displaystyle\frac{<b,c>}{|b|·|c|} cosA=bc<b,c>

夹角的余弦: c o s θ = x 1 y 1 + x 2 y 2 + … + x N y N x 1 2 + x 2 2 + … + x N 2 ⋅ y 1 2 + y 2 2 + … + y N 2 cos\theta = \displaystyle\frac{x_1y_1+x_2y_2+…+x_Ny_N}{\sqrt{x_1^2+x_2^2+…+x_N^2}·\sqrt{y_1^2+y_2^2+…+y_N^2}} cosθ=x12+x22++xN2 y12+y22++yN2 x1y1+x2y2++xNyN

由于每个变量均为非负值,因此cos值大于0,夹角在0到90度之间

余弦越小,夹角越大,说明两个新闻相关度低

14.3 计算向量余弦的技巧

大数据量时的余弦计算

  • 存储向量的长度 ∣ a ∣ |a| a,能节约三分之二的运算量,但不能本质上简化算法
  • 计算两个向量内积,只需要考虑其中的非零元素
  • 删除虚词,不仅提高计算速度,还能对分类的准确性大有好处

位置的加权:

标题>正文开头和正文结尾>其他

15 矩阵运算和文本处理中的两个分类问题

15.1 文本和词汇的矩阵

当新闻的数量很大,用上一章讲的余弦定理进行计算,会进行多次迭代,耗时很长。而用矩阵运算中的**奇异值分解(Singular Value Decomposition,SVD)**可以一次性把所有新闻的相关性计算出来。

首先,构造一个 M × N M\times N M×N的大矩阵:

A = [ a 11 … a 1 n a 1 M … … a m 1 … a m n a m M … … a M 1 … a M n a M M ] A = \begin{bmatrix}a_{11} & … & a_{1n} & a_{1M}\\… & & & …\\a_{m1} & … & a_{mn} & a_{mM}\\… & & & …\\a_{M1} & … & a_{Mn} & a_{MM}\end{bmatrix} A=a11am1aM1a1namnaMna1MamMaMM

其中, a i j a_{ij} aij代表字典中第 j j j个词在第 i i i篇文章中出现的加权词频(比如TF-IDF)

然后,将大矩阵 A A A分解成三个小矩阵

A M N = X M M B M N Y N N A_{MN}=X_{MM}B_{MN}Y_{NN} AMN=XMMBMNYNN

  • 第一个矩阵 X X X是对词进行分类的一个结果,每一行代表一个词,每一列表示一个语义相近的词类(语义类),这一行的每个非零元素表示这个词在语义类中的重要性,数值越大约相关。
  • 最后一个矩阵 Y Y Y是对文本分类的一个结果,每一列对应一篇文本,每一行代表一个主题。
  • 中间的矩阵 B B B代表词的类和文章的类的相关性
15.2 奇异值分解的方法和应用场景

对于矩阵 A M N = X M M B M N Y N N A_{MN}=X_{MM}B_{MN}Y_{NN} AMN=XMMBMNYNN

其中 X X X是一个酉矩阵, Y Y Y则是一个酉矩阵的共轭矩阵。(与其共轭矩阵转置相乘等于单位阵的矩阵称为酉矩阵,酉矩阵机器共轭矩阵都是方形的矩阵。)

  • 共轭矩阵:矩阵的元素先转置,后取共轭
  • 例如: A = [ 1 + i 2 − i 3 4 − i ] A = \begin{bmatrix}1+i & 2-i\\3 &4-i\end{bmatrix} A=[1+i32i4i]的共轭矩阵为 A H = [ 1 − i 3 2 + i 4 + i ] A^H = \begin{bmatrix}1-i & 3\\2+i &4+i\end{bmatrix} AH=[1i2+i34+i]

矩阵 B B B是一个对角阵,只有对角线上非零值。

16 信息指纹及其应用

16.1 信息指纹

信息指纹:将网址压缩至16个字节(128位)的随机数。

生成信息指纹的算法:

  • 早期的PRNG算法(冯诺依曼):将数的平方掐头去尾取中间,但这样产生的数字并不是很随机(两个不同的信息可能有同一指纹)
  • 梅森转转算法
  • 互联网上要使用伪随机数产生器:
    • MD5
    • SHA-1
16.2 信息指纹的用途
  1. 集合相同的判定

    定义集合 S = { e 1 , e 2 , … , e n } S=\{e_1,e_2,…,e_n\} S={e1,e2,,en}的指纹 F P ( S ) = F P ( e 1 ) + F P ( e 2 ) + … + F P ( e n ) FP(S)=FP(e_1)+FP(e_2)+…+FP(e_n) FP(S)=FP(e1)+FP(e2)++FP(en)

    判断两个集合的指纹是否相同即可判断集合是否相同(不同元素的指纹相同的概率非常非常小,工程上可以忽略不计)

  2. 判定集合基本相同

    找出网页中IDF最大的几个词,计算信息指纹,如果相同则基本是相同的网页

    Google采用了一种特定的信息指纹——相似哈希(Simhash)

  3. YouTube的反盗版

    视频的匹配有两个关键技术——关键帧的提取和特征的提取

16.3 信息指纹的重复性和相似哈希

信息指纹重复的可能性:

假定一个伪随机数的范围是 0   N − 1 0~N-1 0 N1,共 N N N个。如果是128位的二进制,则 N = 2 128 N=2^{128} N=2128

,两个指纹重复的可能性是 1 N \displaystyle\frac{1}{N} N1,不重复的可能性是 N − 1 N \displaystyle\frac{N-1}{N} NN1

k k k个指纹不重复的概率 P k = ( N − 1 ) ( N − 2 ) … ( N − k + 1 ) N k − 1 P_k=\displaystyle\frac{(N-1)(N-2)…(N-k+1)}{N^{k-1}} Pk=Nk1(N1)(N2)(Nk+1),随着 k k k增加而减小。下面估算 P k < 0.5 P_k<0.5 Pk<0.5时, k k k的大小:

N → ∞ , P k + 1 ≈ e − 1 n e − 2 n … e − k n = e x p ( − k ( k + 1 ) 2 N ) < − 0.5 N\rightarrow \infty,P_{k+1} \approx \displaystyle e^{-\frac{1}{n}}e^{-\frac{2}{n}}…e^{-\frac{k}{n}}=exp(-\frac{k(k+1)}{2N})<-0.5 N,Pk+1en1en2enk=exp(2Nk(k+1))<0.5

等效于 k 2 + k + 2 N l n 0.5 > 0.5 k^2+k+2Nln0.5>0.5 k2+k+2Nln0.5>0.5

由于 k > 0 k>0 k>0,上式有唯一解: k > − 1 + 1 + 8 N l o g 2 2 k>\displaystyle\frac{-1+\sqrt{1+8Nlog2}}{2} k>21+1+8Nlog2

也就是说,每一千八百亿亿次才能重复一次

相似哈希:

步骤:

第一步扩展:

  • 将八位二进制的指纹扩展为8个0-1实数,每一位对应0,则在 r i r_i ri w i w_i wi,反之则加
  • 依次扫描所有词,得到最后的8个数 r 1 , r 2 , … , r 8 r_1,r_2,…,r_8 r1,r2,,r8

第二部收缩:

  • r 1 , r 2 , … , r 8 r_1,r_2,…,r_8 r1,r2,,r8中,把正数变成1,负数变成0,得到了最后的相似哈希指纹

17 由电视剧《暗算》所想到的——谈谈密码学的数学原理

17.1 密码学的自发时代

凯撒密码等

17.2 信息论时代的密码学

密码的最高境界:敌方在截获密码后,对我方的所知没有任何增加,集信息量没有增加

公开密钥(非对称加密算法):

  • 两个完全不同的密钥,一个加密一个解密
  • 两个看上去无关的密钥,数学上是关联的

破解RSA的方法——大数分解:

  • 耗时极长,往往几十年,而且是基于穷举(试)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值