语言模型
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了语言模型相关的知识,希望对你有一定的参考价值。
参考技术A 1、链式法则(chain rule):P(ABCD)=P(A)·P(B|A)·P(C|AB)·P(D|ABC)(竖杠后面是给定的条件,即条件概率分布)
2、概率稀疏问题:给定的短句越长,越不容易找到,因为大部分概率都是零
3、马尔科夫假设,可解决概率稀疏(sparsity)问题:只以离它最近的若干词为指定词,假设离得近的词影响大。
如1st order markov assumption第一顺序马尔科夫假设,只考虑离得最近的前面的第一个单词、2st order只考虑前面的两个单词、3st……
语言模型用来判断:是否一句话从语法上通顺。用来计算一个句子的概率的模型,也就是判断一句话是否是人话的概率。
N元模型就是假设当前词的出现概率只与它前面的N-1个词有关:
1、unigram(一元模型)
最简单的模型,假定所有词互相独立,相当于0st order假设,不考虑单词之间的顺序。
2、bigram(二元模型)
最常用的模型,相当于1st order马尔科夫假设,只考虑前一个单词
3、trigram(三元模型)
常用模型,相当于2st order马尔科夫假设,只考虑前两个单词
4、N-gram
当N>3时,统称为higher order,比较复杂
高于四元的用的非常少,由于训练它须要更庞大的语料,数据稀疏严重,时间复杂度高,精度却提高的不多。
用于评价语言模型的好坏,困惑度越低,模型越好。
其基本思想是:给测试集的句子赋予较高概率值的语言模型较好。当语言模型训练完之后,测试集中的句子都是正常的句子,那么训练好的模型就是在测试集上的概率越高越好,公式如下:
由公式可知,句子概率越大,语言模型越好,迷惑度越小。
评估句子的可能性就是计算一句话整体的概率,由各个单词出现的概率相乘得到。若有一个单词未在语料库中出现,则其概率为零,致使整个句子的概率为零(最大似然估计)。
语料库即训练库,未包含的词不代表实际使用中不会出现,所以要尽量避免这种情况,可用“平滑”来解决:
1、 Add-one平滑,又称laplace smoothing
最简单最经典的平滑方法,在朴素贝叶斯中经常使用。
最大似然估计(maximum likelihood estimation,MLE),最大可能性估计,即看到什么就是什么,没有概率就是0,明确使用概率模型。
Add-1平滑,将概率计算公式的分子+1,分母+V,V是词典库的大小
分母+V的原因是:最后计算完所有可能性加起来概率=1
2、Add-K平滑
稍灵活一些,将概率计算公式的分子+K,分母+KV。K为超参数,需要不断调整,或者让机器帮助选择一个比较合理的值
比如评估模型好坏的方法,Perplexity相当于K的函数,找到一个K,使得Perplexity最小即可。
3、 Interpolation(插值)
同时使用unigram、bigram、N-gram,比如用bigram时,第一个词需要用到unigram。
核心思路:在计算trigram的同时,考虑unigram、bigram、trigram出现的频次,各给一个权重,权重相加=1
4、 Good-turning smoothing
即便现在的语料库中没有,但不代表未来不会出现。假设未出现的词与现在语料库中出现一次的单词概率一致。
神经语言模型
1. 语言模型
什么是语言模型?通俗的来讲是判断一句话是否符合人说话的模型,如可以说”猫有四条腿“,却不能说”四条腿有猫“。因为”四条腿有猫“这样的表述不符合人们的正常语言规范。在语言模型的发展过程中,分别出现了专家语法规则模型,统计语言模型,神经网络语言模型三个阶段。其中,专家语法规则模型出现在语言模型的初始阶段,我们知道,每一种语言都有其特定的语法规则,因此在早期,人们设法通过归纳出的语法规则来对语言建模;统计语言模型则是对句子的概率分布建模,通过对大量语料的统计发现,符合人们正常语言规范的句子出现的概率要大于不符合语言规范的句子,如上述的“猫有四条腿”出现的概率要大于“四条腿有猫”的概率;神经网络语言模型是在统计语言模型的基础上,通过神经网络模型对句子的概率分布建模的方法。下面将从统计语言模型开始讲起。
2. 统计语言模型
2.1. 统计语言模型
统计语言模型(statistical language modeling)通过对大量语料的统计预测出句子的分布。用形式表述,即对于一段文本序列 S = w 1 , w 2 , ⋯ , w T S=w_1,w_2,\\cdots ,w_T S=w1,w2,⋯,wT,它的概率可以表示为
P ( S ) = P ( w 1 , w 2 , ⋯ , w T ) P\\left ( S \\right )=P\\left ( w_1,w_2,\\cdots ,w_T \\right ) P(S)=P(w1,w2,⋯,wT)
通过概率中的链式法则,可以求得上述句子的概率值:
P ( w 1 , w 2 , ⋯ , w T ) = P ( w 1 ) ⋅ P ( w 2 ∣ w 1 ) ⋯ P ( w T ∣ w 1 , w 2 , ⋯ w T − 1 ) P\\left ( w_1,w_2,\\cdots ,w_T \\right )=P\\left ( w_1 \\right )\\cdot P\\left ( w_2\\mid w_1 \\right )\\cdots P\\left ( w_T\\mid w_1,w_2,\\cdots w_{T-1} \\right ) P(w1,w2,⋯,wT)=P(w1)⋅P(w2∣w1)⋯P(wT∣w1,w2,⋯wT−1)
其中, P ( w i ∣ w 1 , ⋯ , w i − 1 ) P\\left ( w_i\\mid w_1,\\cdots ,w_{i-1} \\right ) P(wi∣w1,⋯,wi−1)表示的是在词 w 1 , ⋯ , w i − 1 w_1,\\cdots ,w_{i-1} w1,⋯,wi−1出现的条件下词 w i w_i wi出现的概率,对于以上的统计语言模型,每一个词的概率便是模型的参数,如上述的 P ( w 1 ) P\\left ( w_1 \\right ) P(w1), P ( w 2 ∣ w 1 ) P\\left ( w_2\\mid w_1 \\right ) P(w2∣w1)等。为了计算模型的参数,需要统计每个词出现的概率,如对于词 w i w_i wi,可以通过以下的方式统计得到:
P ( w i ∣ w 1 , ⋯ , w i − 1 ) = N ( w 1 , w 2 , ⋯ , w i ) N ( w 1 , w 2 , ⋯ , w i − 1 ) P\\left ( w_i\\mid w_1,\\cdots ,w_{i-1} \\right )=\\frac{N_{\\left ( w_1,w_2,\\cdots ,w_i \\right )}}{N_{\\left ( w_1,w_2,\\cdots ,w_{i-1} \\right )}} P(wi∣w1,⋯,wi−1)=N(w1,w2,⋯,wi−1)N(w1,w2,⋯,wi)
其中, N ( w 1 , w 2 , ⋯ , w i ) N_{\\left ( w_1,w_2,\\cdots ,w_i \\right )} N(w1,w2,⋯,wi)表示的在文本语料中出现文本序列 w 1 , w 2 , ⋯ , w i w_1,w_2,\\cdots ,w_i w1,w2,⋯,wi的次数。
在实际的过程中,如果文本的长度比较长,要估算 P ( w i ∣ w 1 , ⋯ , w i − 1 ) P\\left ( w_i\\mid w_1,\\cdots ,w_{i-1} \\right ) P(wi∣w1,⋯,wi−1)是非常困难的,主要体现在以下的两个方面:
- 需要计算的参数过多。假设词库 V V V的大小为100000,对于包含10个词的序列,潜在的参数个数为 10000 0 10 − 1 100000^{10}-1 10000010−1;
- 数据极度稀疏,长序列的出现频次较低;
2.2. n-gram模型
为了简化上述的问题,通常在估算条件概率时,距离大于等于 n n n的上文词会被忽略,即所谓的n-gram模型。n-gram模型是基于马尔科夫假设,即当前词出现的概率仅依赖前 n − 1 n−1 n−1个词
P ( w i ∣ w 1 , ⋯ , w i − 1 ) ≈ P ( w i ∣ w i − n + 1 , ⋯ , w i − 1 ) P\\left ( w_i\\mid w_1,\\cdots ,w_{i-1} \\right )\\approx P\\left ( w_i\\mid w_{i−n+1},\\cdots ,w_{i-1} \\right ) P(wi∣w1,⋯,wi−1)≈P(wi∣wi−n+1以上是关于语言模型的主要内容,如果未能解决你的问题,请参考以下文章