当前位置:职场发展 > 浅谈统计语言模型

浅谈统计语言模型

  • 发布:2023-10-06 12:22

统计语言模型是用来描述单词、句子甚至整个文档等不同语法单元的概率分布的模型。它可以用来衡量某个句子或词序列是否符合人们在语言环境中的日常写作和说话风格。 统计语言模型 统计语言模型是用来描述单词、句子甚至整个文档等不同语法单元的概率分布的模型。它可以用来衡量某个句子或词序列是否符合人们在语言环境中的日常使用。写作和说话的方式。统计语言模型对于复杂的大规模自然语言处理应用具有重要价值。它们可以帮助提取自然语言的内在规律,以提高语音识别、机器翻译、文档分类和光学字符识别等自然语言应用的性能。表现。一个好的统计语言模型依赖于大量的训练数据。在 20 世纪 70 年代和 80 年代,模型的性能基本上取决于该领域数据的丰富程度。 IBM曾经进行过一次信息检索评估,发现二元模型(Bi-gram)需要数亿个单词才能达到峰值性能,而三元模型(TriGram)则需要数十亿个单词才能达到最佳性能。达到饱和。本世纪初,最流行的统计语言模型是N-gram,它是一种典型的基于稀疏表示(Sparse Representation)的语言模型。近年来,随着深度学习的爆发和兴起,以词嵌入(WordEmbedding)作为分布式表示的语言模型取得了较好的效果,深刻影响了自然语言领域其他模型和应用的变革。加工。此外,Ronald Rosenfeld[7]还提到了基于决策树的语言模型(Decision Tree Models)、***熵模型以及自适应语言模型(Adaptive Models)。 统计语言模型可以用来表达词汇序列的统计特性,例如学习序列中单词的联合分布概率函数。如果我们用w1w1到wtwt依次表示这个句子中的每个单词,那么这个句型的出现概率可以简单地表示为: P(w1,...,wt)=∏i=1tP(wi|w1,...,wi−1)=∏i=1tP(wi|上下文)P(w1,w2,...,wt) =P(w1)×P(w2|w1)×P(w3|w1,w2)×…×P(wt|w1,w2,…,wt−1)(1)(1)P(w1,…, wt)=∏i=1tP(wi|w1,...,wi−1)=∏i=1tP(wi|上下文)P(w1,w2,...,wt)=P(w1)×P( w2| w1)×P(w3|w1,w2)×…×P(wt|w1,w2,…,wt−1) 统计语言模型训练目标还可以是使用最大似然估计来获得最大化对数似然。公式为1TΣTt=1Σ−c≤j≤c,j≠0logp(wt+j|wt)1TΣt=1TΣ−c≤j≤c,j≠0logp(wt+j|wt)。其中 cc 是训练上下文的大小。例如,当cc的值为5时,一次使用5个连续的单词进行训练。一般来说,cc越大,效果越好,但花费的时间也越长。 p(wt+j|wt)p(wt+j|wt)表示wtwt条件下wt+jwt+j的概率。衡量语言模型的通用标准是其复杂度。需要注意的是,这里的困惑度与信息论中的困惑度并不具有相同的含义。这里混淆的定义公式参考Stolcke[11],即exp(−logP(wt)/|w⃗ |)exp(−logP(wt)/|w→|),即1/P(wt|wt −11 )1/P(wt|w1t−1) 的几何平均值。最小化困惑度值就是最大化每个单词的概率。然而,困惑度的值在很大程度上取决于词汇和所使用的具体单词,因此它经常被用来判断具有相同其他因素的两个系统,而不是通用绝对度量参考。 N-gram 语言模型 参考上面的描述,在统计语言模型中我们致力于计算某个词序列的出现概率E=wT1E=w1T,可以形式化地表示为: P(E)=P(|E|=T,wT1)(2)(2)P(E)=P(|E|=T,w1T) 上式中,我们获取概率的目标单词序列EE的长度为TT,序列中的第一个单词为w1w1,第二个单词为w2w2,以此类推,直到最后一个单词为wTwT。上面的公式非常直观、容易理解,但是在真实环境中并不可行,因为序列的长度TT未知,并且词汇表中单词的组合数量也非常大,无法直接获得。为了找到实用的简化模型,我们可以将整个单词序列的联合概率重写为单个单词或单个单词对的概率乘积。即上式可以改写为 P(w1,w2,w3)=P(w1)P(w2|w1)P(w3|w1,w2)P(w1,w2,w3)=P(w1) P(w2| w1)P(w3|w1,w2),由通用词序列导出,我们可以得到以下形式表示: P(E)=∏t=1T+1P(wt|wt−11)(3)(3)P(E)=∏t=1T+1P(wt|w1t−1) 至此我们已经将整个单词序列的联合概率分解为近似求P(wt|w1,w2,…,wt−1)P(wt|w1,w2,…,wt−1)。这里要讨论的N-gram模型使用P(wt|wt−n+1,…,wt−1)P(wt|wt−n+1,…,wt−1)来近似表示前者。根据NN取值的不同,我们可以将其分为一元语言模型(Uni-gram)、二元语言模型(Bi-gram)、三元语言模型(Tri-gram)等。该模型中文称为中文语言模型(CLM),即当需要将表示字母或笔画的数字,或不带空格的连续拼音和笔画转换成汉字字符串(即句子)时,使用搭配信息利用上下文中相邻单词之间的关系来计算概率最高的句子;无需用户手动选择,避免了同一个拼音(或一串笔画或一串数字)对应的多个汉字重复编码的问题。 一元语言模型,也称为上下文无关语言模型,是一种简单易实现但实际应用价值有限的统计语言模型。该模型不考虑单词对应的上下文,而只考虑当前单词本身的概率,是N-gram模型中N=1N=1的特例。 p(wt|上下文)=p(wt)=NwtN(4)(4)p(wt|上下文)=p(wt)=NwtN N-gram语言模型也存在一些问题。该模型无法对单词之间的相似性进行建模。有时候两个具有一定相似度的词,如果一个词经常出现在某个词之后,那么也许另一个词出现在本段之后的概率也比较高。例如,如果“白色汽车”频繁出现,则完全可以安全地假设“白色汽车”也可能频繁出现。 N-gram 语言模型无法建模进一步的关系,并且缺乏语料库使得无法训练高阶语言模型。大多数研究或工作都使用 Tri-gram。即使使用高阶模型,统计概率的可靠性也会大大降低。还有一些使用 Bi-gram 的小问题。有一些n元组没有在训练语料中出现过,它们对应的条件概率为0,导致整个句子的计算概率为0。计算单词出现概率最简单的方法就是统计个数固定长度单词序列在准备好的训练集中出现的次数,然后除以它在上下文中出现的次数;例如,以Bi-gram为例,我们有以下三块训练数据: 我来自江苏。 我在南京大学学习。 我妈妈是盐城人。 我们可以分别推导词am、study相对于i的后验概率: p(w2=am|w1=i)=w1=i,w2=amc(w1=1)=12=0.5p(w2=study|w1=i)=w1=i,w2=studyc(w1=1) =12=0.5(5) (5)p(w2=am|w1=i)=w1=i,w2=amc(w1=1)=12=0.5p(w2=study|w1=i)=w1=i,w2=studyc(w1 =1)=12=0.5 上述计算过程可以推导出如下广义公式: PML(wt|wt−11)=cprefix(wt1)cprefix(wt−11)(6)(6)PML(wt|w1t−1)=cprefix(w1t)cprefix(w1t−1) 这里cprefix(⋅)cprefix(⋅)表示指定字符串在训练集中出现的次数。这种方法也就是所谓的最大似然估计;这种方法非常简单易用,而且还可以保证更好地利用训练集的统计特性。根据该方法,我们还可以推导出Tri-gram模型似然计算公式如下: P(wt|wt−2,wt−1)=count(wt−2wt−1wt)count(wt−2wt−1)(7)(7)P(wt|wt−2,wt−1)=count( wt−2wt−1wt)count(wt−2wt−1) 我们将 N-gram 模型中的参数表示为 θθ,它包含给定前 n−1n−1 个单词时第 nn 个单词出现的概率。其正式表达为: θwtt−n+1=PML(wt|wt−1t−n+1)=c(wtt−n+1)c(wt−1t−n+1)(8)(8)θwt−n+1t=PML (wt|wt−n+1t−1)=c(wt−n+1t)c(wt−n+1t−1) 在naive N-gram模型中,训练集中没有出现过的单词序列的概率默认为零,因为我们的模型是多个单词的概率相乘,最终会导致整个句子为零。我们可以通过所谓的平滑技术来解决这个问题,该技术结合不同的NN值来计算平均概率。例如,我们可以将Uni-gram模型和Bi-gram模型结合起来: P(wt|wt−1)=(1−α)PML(wt|wt−1)+αPML(wt)(9)(9)P(wt|wt−1)=(1−α)PML(wt |wt−1)+αPML(wt) 其中αα表示分配给Uni-gram得到的概率的比例。如果我们设置α>0α>0,那么词汇表中的任何单词都会被分配一定的概率。这种方法就是所谓的插值法,在许多低频稀疏模型中使用,以保证其鲁棒性。当然,我们还可以引入更多不同的NN值。整个组合概率递归定义如下: P(wt|wt−1t−m+1)=(1−αm)PML(wt|wt−1t−m+1)+αmP(wt|wt−1t−m+2)(10)(10)P (wt|wt−m+1t−1)=(1−αm)PML(wt|wt−m+1t−1)+αmP(wt|wt−m+2t−1) [Stanley et al., 1996]还引入了许多其他复杂但精致的平滑方法,例如上下文相关的平滑系数,它不设置固定的αα值,而是动态设置它们。是 αwt−1t−m+1αwt−m+1t−1。这保证了模型在训练样例较多时能够为高阶N-gram模型分配更多权重,在训练样例较少时为低阶N-gram模型分配更多权重。克模型。目前公认的使用最广泛、最有效的平滑方法是[Stanley et al., 1996]提出的改进的Kneser-Ney平滑(MKN)模型,该模型综合使用了上下文平滑因子计算、折扣和低阶分布校正。以确保更准确的概率估计。 神经网络语言模型 顾名思义,神经网络语言模型是一种基于神经网络的语言模型,它可以利用神经网络非线性拟合的能力来推导词汇或文本的分布式表示。在神经网络语言模型中,单词的分布式表示被视为激活神经元的向量空间,这与所谓的局部表示不同,即一次只有一个神经元被激活。标准的神经网络语言模型架构如下图所示: 最流行的神经网络语言模型是Bengio[10]提出的概率前馈神经网络语言模型,它包括输入、投影、隐藏)和输出(Output)四层。在输入层中,从VV单词中选择NN个单词并用下标进行编码,其中VV是整个词汇表的大小。然后输入层通过共享投影矩阵N×DN×D投影到投影层PP;由于只有NN个输入值同时处于活动状态,因此计算压力不是很高。 NNLM模型真正的计算压力在于投影层和隐藏层之间的转换。例如,如果我们选择N=10N=10,那么投影层PP的维度在500到2000之间,隐藏层HH的维度在500500到10001000之间。同时,隐藏层HH还负责计算词汇表中所有单词的概率分布,因此输出层的维度也是VV。综上所述,整个模型的训练复杂度为: Q=N×D+N×D×H+H×VQ=N×D+N×D×H+H×V 它的训练集是一个巨大但固定的词汇集VV中的单词序列w1...wtw1...wt;它的目标函数是学习一个好的模型 f(wt,wt−1,…,wt−n +2,wt−n+1)=p(wt|wt−11)f(wt,wt−1,…, wt−n+2,wt−n+1)=p(wt|w1t−1),约束条件为 f(wt,wt−1,…,wt−n+2,wt−n+1)>0 f (wt,wt−1,…,wt−n+2,wt−n+1)>0 且 Σ|V|i=1f(i,wt−1,…,wt−n+2,wt−n+ 1)=1Σi=1|V|f(i,wt−1,…,wt−n+2 ,wt−n+1)=1。每个输入单词被映射到一个向量,映射用CC表示,所以C(wt−1)C(wt−1)就是wt−1wt−1的词向量。将gg定义为前馈或递归神经网络,其输出是向量,向量中的第ii个元素表示概率p(wt=i|wt−11)p(wt=i|w1t−1)。训练目标仍然是***似然加正则项,即: MaxLikelihood=max1TΣtlogf(wt,wt−1,…,wt−n+2,wt−n+1;θ)+R(θ)MaxLikelihood=max1TΣtlogf(wt,wt−1,…,wt−n +2,wt−n+1;θ)+R(θ) 其中,θθ为参数,R(θ)R(θ)为正则项,输出层使用sofamax函数: p(wt|wt−1,…,wt−n+2,wt−n+1)=eywtΣieyip(wt|wt−1,…,wt−n+2,wt−n+1)=eywtΣ伊伊 其中yiyi为每个输出词ii的非归一化对数概率,计算公式为y=b+Wx+Utanh(d+Hx)y=b+Wx+Utanh(d+Hx)。其中,b、W、U、d、Hb、W、U、d、H均为参数,xx为输入。需要注意的是,一般的神经网络输入不需要优化,但是这里,x = (C( wt−1),C(wt−2),…,C(wt−n+1))x= (C(wt−1),C(wt−2),…,C(wt−n+1) ) 也是需要优化的参数。图中,如果下层的原始输入xx不直接连接到输出,则可以设置b=0b=0,W=0W=0。如果采用随机梯度算法,则梯度更新规则为: θ+ϵ∂logp(wt|wt−1,…,wt−n+2,wt−n+1)∂θ→θθ+ϵ∂logp(wt|wt−1,…,wt−n+2,wt −n+1)∂θ→θ 其中,ϵϵ为学习率。需要注意的是,一般神经网络的输入层只是一个输入值,但这里,输入层xx也是一个参数(存储在CC中),同样需要优化。优化完成后,词向量就有了,语言模型也就有了。这个Softmax模型使得概率值为(0,1),因此不会出现0的概率,即它有自己的平滑,而不需要传统N-gram模型中复杂的平滑算法。 Bengio 在 APNews 数据集上的对比实验也表明,他的模型通过精心设计的平滑算法比普通 N-gram 算法要好 10% 到 20%。 递归神经网络语言模型 一个好的语言模型应该至少捕获自然语言的两个特征:语法特征和语义特征。为了保证语法的正确性,我们往往只需要考虑生成词的前置上下文;这意味着语法特征通常是局部特征。语义一致性要复杂得多。我们需要考虑大量的上下文信息甚至整个文档语料库才能获得正确的全局语义。神经网络语言模型比经典的N-gram模型具有更强大的表达能力和更好的泛化能力。然而,传统的N-gram语言模型与[Bengio et al., 2003]中提出的神经网络语言不同,这些模型都不能有效地捕获全局语义信息。为了解决这个问题,[Mikolov et al., 2010;]中提出了基于循环神经网络(RNN)的语言模型。 2011]使用隐藏状态来记录词序的历史信息,可以捕获语言中的长范围。依靠。在自然语言中,句子中相距较远的两个词往往具有一定的语法和语义关系。例如,他对自己不太有信心,她对自己也不太有信心。对于句子中的两个词对来说,虽然句子中间的词可能会发生变化,但这两个词对中两个词之间的关联关系是固定的。这种依赖不仅出现在英语中,也出现在汉语和俄语中。这种类型的词对组合有大量。长期依赖的另一个典型例子是所谓的选择首选项;简而言之,选择限制主要基于已知某人做了某事的信息。例如,在“我想用叉子吃沙拉”和“我想和我的朋友一起吃沙拉”这句话中,叉子指的是某种工具,而我的朋友则指的是伙伴。如果有人说我要从背包里吃沙拉,那会很奇怪。背包既不是工具,也不是伴侣;如果我们违反了这种选择限制,我们就会产生很多无意义的句子。 ***,某个句型或者文档往往属于某个主题。如果我们突然在某个技术主题的文档中发现了关于体育的一句话,我们一定会觉得奇怪。这就是所谓的破坏主题连贯性。 [Eriguchi et al., 2016]中介绍的循环神经网络在机器翻译中的应用值得借鉴,因为它可以有效地处理这种所谓的长期依赖问题。其思想的本质是在计算新的隐藏状态h⃗h→时引入某个先前的隐藏状态ht−1→ht−1→。正式表达式如下: h⃗ t={tanh(Wxhx⃗ t+Whhh⃗ t−1+b⃗ h),0,t ≥1,否则(11)(11)h→t={tanh(Wxhx→t+Whhh→t−1+b→ h),t ≥1,0,否则 我们可以看到,当t≥1t≥1时,与标准神经网络中隐藏层计算公式的区别在于,多了一个连接Whhh⃗t−1Whhh→t−1,该连接是由之前的隐藏状态导出的时间点。对RNN有了基本的了解后,我们就可以直接将其引入到语言模型的构建中,即在上面讨论的神经网络语言模型中添加一个新的循环连接: m⃗ t=M⋅,wt−1h⃗ t={tanh(Wxhx⃗ t+Whhh⃗ t−1+b⃗ h),0,t ≥1,否则sp⃗ t=softmax(Whsh⃗ t+bs)(12)(12)m→ t=M⋅,wt−1h→t={tanh(Wxhx→t+Whhh→t−1+b→h),t ≥1,0,否则sp→t=softmax(Whsh→t+bs) 需要注意的是,与上面介绍的前馈神经网络语言模型相反,循环神经网络语言模型仅将前一个单词而不是前两个单词作为输入;这是因为我们假设wt−2wt−2的信息已经包含在隐藏状态ht−1→ht−1→中,不需要重复替换。【本文为51CTO专栏作家“张子雄”原创文章。如需转载请通过51CTO联系作者】 点击此处查看该作者更多好文章

相关文章

最新资讯