NLP学习笔记(5)——语言模型
- 1. 基本概念
- 1.1 概念导入
- 1.2 划分等价类的方法——n元文法模型(n-gram)
- 1.3 概率计算
- 1.4 语言模型的应用
- 1.4.1 音字转换问题
- 1.4.2 汉语分词问题
- 2. 参数估计
- 2.1 最大似然估计
- 2.2 数据平滑
- 2.2.1 前置知识
- 2.2.2 数据平滑的几种方法
- 2.2.2(1)加1法(Additive smoothing)
- 2.2.2(2)减值法/折扣法(discounting)
- 2.2.2(3)删除插值法(Deleted interpolation)
- 3. 语言模型的自适应
- 3.1 背景与亟待解决的问题:
- 3.2 自适应的三种方法
- 3.2.1 基于缓存的语言模型
- 3.2.2 基于混合方法的语言模型(Hybrid)
- 3.2.2 基于最大熵的语言模型(ME-based)
- 4. 语言模型的应用
- 4.1 汉语分词问题
- 4.2 分词与词性标注一体化方法
1. 基本概念
1.1 概念导入
大规模的语料库的出现为自然语言统计处理方法的实现提供了可能,基于大规模的语料库和统计方法,我们可以:
- 发现语言使用的普遍规律;
- 进行机器学习、自动获取语言知识;
- 对位置语言现象进行推测
我们研究语言模型时,需要计算语句的先验概率:
关于公式中的wi,可以是字、词、短语或者词类等等,统称为统计基元,在讨论中统一以“词”来代替。
对于wi来说,其出现的概率,由其之前的特定序列w1,……wi-1决定,这个序列成为wi的历史
由此就存在了一个问题,当历史基元的数量不断增加,不同的路径的可能性(第i个基元的不同的历史情况)会以指数级增长。i基元存在L(i-1)种不同的历史情况,其中L表示不同基元的数目。在这种情况下,产生不同的i基元发生的概率p(wm|w1……wm-1)时,就存在Lm个自由参数了,而这样大型的计算量显然不符合我们的期望
于是我们通过将历史序列映射到等价类的方法减少历史基元的数量,即将w1,w2……wi-1映射到S(w1 w2 w3……wi-1),则有:
p(wi|w1,……wi-1)=p(wi|S(w1……wi-1))
1.2 划分等价类的方法——n元文法模型(n-gram)
具体来讲
如果想将两个历史映射到相同的等价类,当且仅当这两个历史路径中最近的n-1个基元相同才可,即
这种设置n个有限记忆单元的语言模型称为n元文法模型
当n=1时,即出现在第i位的基元wi独立(于历史),一元文法可以成为uni-gram,或monogram
当n=2时,即基元wi的概率取决于其前一个单词,2-gram称为1阶马尔科夫链
当n=3时,即基元wi的概率取决于位置之前的两个单词,3-gram称为2阶马尔科夫链
1.3 概率计算
为了保证在计算条件概率的计算中,i=1时有意义,也为了保证句子内的所有字符串的概率之和为1(通过“加入终结符,将句子结尾词的开放性发展情况考虑进去”,从而能够综合考虑到所有的情况),可以在句子首尾两端加入标志<BOS>和 <EOS>。
二元文法计算举例:
首先对语句进行元素划分
计算该语句基于二元文法的概率:
1.4 语言模型的应用
1.4.1 音字转换问题
对于给定的拼音串,去猜测其可能的汉字串,有许多种可能。
我们期望得到发生概率最大的一个,经过贝叶斯公式进行转化,并且拼音的出现是一个确定住的事件,并且认为由句子得到的拼音序列的概率是确定的(或者说概率为1),因此我们只需要考虑,各个句子中最大可能性产生的(句子),这与我们的直觉相一致。
在上述化简结果的前提下,我们以二元文法为例进行研究
1.4.2 汉语分词问题
2. 参数估计
首先,介绍两个较为重要的概念:
~~ 训练语料:用于建立模型,确定模型参数的已知语料~~
最大似然估计:用相对频率来计算概率
2.1 最大似然估计
利用最大似然估计:
一个使用最大似然估计来求句子概率的例题:
以上为常规的最大似然估计,但由于数据稀疏(也称数据匮乏)sparse data的问题,极易导致出现条件概率为0的情况,这时就需要进行数据平滑(data smoothing)
2.2 数据平滑
2.2.1 前置知识
关于困惑度:
即为测试语料的交叉熵的指数形式
关于测试语料的交叉熵Hp(T),是:
其中WT表示总测试文本语料T的总词数,p(T)表示产生整个测试集的概率
关于测试集T生成的概率p(T),是若干个组成的独立句子的累乘:
其中lT表示测试集语料T的句子数目
(t1,……,tlT)构成测试语料T关于句子的概率p(ti)的计算(或者对于句子s概率p(s)的计算)
其中p(wi|wi-n+1i-1)表示对于一个平滑的n-gram的概率
=========
一个小知识,n-gram对于英文文本的困惑度的范围一般为50-1000(对应的交叉熵范围为6~10bits/word)
关于数据平滑,基本思想可以概括为“劫富济贫”:调整最大似然估计的概率值,使得零概率增值,非零概率下调,从而达到“劫富济贫”的目的,消除零概率,改进模型的整体正确率
数据平滑的基本目标,是减小测试样本的语言模型的困惑度。
数据平滑的基本约束,是条件概率之和为1
2.2.2 数据平滑的几种方法
2.2.2(1)加1法(Additive smoothing)
其基本思想,即在每种情况的基础上加1
针对以下例子,若不进行数据平滑,则会导致其中的部分条件概率为0。
使用数据平滑,使得零概率的情况被避免了,起到了一个缓冲的作用
值得注意的是,词汇量|V|指的是set()后的元素集个数
2.2.2(2)减值法/折扣法(discounting)
其基本思想是,通过修改训练样本材料中发生事件的实际计数,从而使得样本中(修改后)实际计数对应的不同概率之和小于1,而将剩余下来的概率分配给未在训练样本中出现的事件。
对于减值法这一思想,在具体实现方式上,分为四种途径:
- Good-Turing法:
- Katz后退法(Back-off方法):
- 绝对减值法
- 线性减值法
对于Good-Turing估计:
首先假设N为原始训练样本的大小,对于确定的事件,可能在原始数据中出现若干次,我们设其出现的次数为r;出现总次数为r的事件的数目则设置为nr
则有
但,观察上式,仅考虑到了某事件出现的概率,未考虑未出现过的事件,于是我们计算r*,以期能够将r=0(某事件未出现)的情况考虑进去
计算得到r*,即考虑“未在样本中出现过的事件”的情况
在这种方法下,估计事件在样本中出现r次的概率为:
显然,这种(r/N格式的)极大似然思想的概率计算方法是针对初始情况(也就是不考虑未出现样本的情况)时所使用的,在新的思想的加持下,使用r*必然导致总数的减小,如下式:
小于1,与1的差值,即n1/N的概率,则分配给所有的未见事件,在Good-Turing法中,这个剩余的概率量时均匀分配给所有的未见事件的。
Good-Turing估计适用于大词汇集产生的符合多项式分布的发亮的观察数据,实际上是对非零事件的概率按照公式削减,将节留出来的概率均匀分配给零概率事件
对于Back-off方法(Katz后退法)
其基本思想为,当某一事件在样本中出现的频率大于阈值K时(K为0或1),运用最大似然估计的减值法来估计其概率,否则使用低阶的概率,即使用(n-1)gram的概率代替n-gram,而这种替代需要受到归一化因子alpha的作用
后退方法的另一种理解:对于每个技术的r>0的n元文法的出现次数减值,把因减值而省下来的剩余概率根据低阶的(n-1)gram分配给未见事件。
下面以二元文法为例,实现Katz平滑
在短语的出现次数大于0时,按照Good-Turing方法进行减值,减值法中的r*/r在这里被抽象成折扣率dr,即直接表示对极大似然方法的折扣比率;
在2-gram短语的出现次数为0时(未现事件),采取低一阶的uni-gram进行运算,符号为pML(wi),同时我们设置归一化因子α,即按照低一阶(n-1)阶文法的概率比例对剩余的概率值进行分配。
根据此思想,可以按照归一化的方法,公式化求出归一化因子
Katz后退法,其对非零事件的概率仍然按照Good-Turing法进行计算减值,不过原零概率的事件的新概率不再是对剩余概率进行均分,而是按照低阶分布的概率比例进行分布,仅需保证概率之和为1即可。
对于绝对减值法:
其基本思想,即为从每个技术r中减去同样的量,剩余的概率量由未见事件进行均分
设置R为所有可能的事件的个数
当事件满足n-gram时,如果统计基元为词(为了方便与n-gram进行匹配),词汇集的大小为L,则可能出现的数目为R=Ln。
在这种情况下,实现绝对减值法:
其中n0,为样本中未出现过的时间的数目,而b为绝对减值减去的常量(b<=1,是为了在非零事件的计数上做减法之后保持非零)对于b(R-n0)/N,是减值法产生的剩余概率量(在发生的事件的计数上直接做减法),其上限可以通过留存数据法计算得到:
对于绝对减值法,是对非零事件的出现次数削减某个固定值,节留出来的概率为零概率事件进行均分。
对于线性减值法,其基本思想为:从每个计数r中减去与该技术成正比的量(从这个角度讲,减值函数为线性的),剩余的概率量α则被n0个未见事件均分(参数alpha是一个自由参数,不过其优化值为n1/N)。
值得注意的是,绝对减值法(无条件削减(非未见事件的)出现次数)产生的n-gram通常优于线性减值法(预先设置非未见事件的总概率)。
或者说,线性减值法是对于非未见事件根据出现次数按照比例削减次数值(或概率值,两种理解均可),节留出来的概率α被均分给零概率事件。
2.2.2(3)删除插值法(Deleted interpolation)
对于删除插值法,其基本思想是用低阶语法估计高阶语法,即当3-gram的值不能给从训练数据中进行准确估计时,可以用2-gram来替代;2-gram同理。
对于插值公式:
该算法的核心是为λ的取值。对于上式中λ1,λ2,λ3的取值:
可以将训练语料分为两部分,即,从原始语料中删除一部分作为留存数据。
第一部分数据用于估计3-gram,2-gram,1-gram
第二部分基于困惑度,用于优化参数
3. 语言模型的自适应
3.1 背景与亟待解决的问题:
(1)训练所用的综合性语料难以反映不同领域之间在语言使用规律上的差异,而语言模型对于训练文本的类型、主题与风格都极为敏感
(2)n元模型的独立性假设,其前提是一个文本当前词出现的概率只与其前面相邻的n-1个词相关,但这种假设并不太科学
3.2 自适应的三种方法
- 基于缓存的语言模型(cache-based LM)
- 基于混合方法的语言模型
- 基于最大熵的语言模型
3.2.1 基于缓存的语言模型
其基本思路为:(文本中刚刚出现过的词在后文中再现的几率较大,)语言模型通过n-gram的线性插值求得
在这里,P cache(wi|w1i-1)通常的处理方式为:在缓存中保留前面出现过的K个单词,缓存概率可以用其在缓存中出现过的相对频率来表示:
上述这种方法的缺陷是,缓存中的单个词的重要性被迫独立于缓存词与当前次的距离。
因此,为了使得缓存中的每个词对当前词的影响随着与该词距离的增大呈指数级的衰减,将上式5-15改写:
其中α为衰减率,β则为归一化的常数
归一化常数的存在,使得概率之和为1
3.2.2 基于混合方法的语言模型(Hybrid)
背景:
3.2.2 基于最大熵的语言模型(ME-based)
其基本思想,是:通过结合不同信息源的信息,构建一个语言模型。每个信息源提供一组关于模型的参数的约束条件,在所有满足约束的模型中,我们选择使得熵最大的模型。
使用两种二元模型:M1为常规2元模型,M2为距离为2的2元函数(distance-2 bigram)
4. 语言模型的应用
4.1 汉语分词问题
采用基于语言模型的分词方法
在分析语(孤立语)中,并不能使用词为独立的统计基元,相比英语来说,效果差了许多。
在切分的时候,可以将汉语词汇划分成如下的几类:
- 分词词典中规定的词
- 由词法规则派生出的词或短语
- 与数字相关的实体:
- 专用名词
指人名地名、组织机构名等
上述这些词占了未登录词的95%,未登录词指的是没有被收录在分词词表中,但必须进行切分的词,包括人名地名机构名等各类专有名词、一些新词等等
如果一个词不是词表词,则可能是词法派生词MW,如果不是词法派生词,则可能为人名、地名、机构名或者其他的实体名,总是能找到对应的类别
故而,最终某个位置的p(si | ci)不可能为0,,即使是未见事件,也因为原先的平滑而可以避免。
4.2 分词与词性标注一体化方法