- 标题:第3章 统计语言模型
- 作者:luomgf
- 163mail:luomgf
- 说明:转载请注明出处,系本人原创阅读分享,欢迎有兴趣的机器学习、人工智能和自然语言处理技术学习的朋友一起交流
- 地址:https://www.cnblogs.com/luomgf/p/10971773.html
第3章 统计语言模型
1、用数学的方法描述语言规律
\[\begin{equation} P(S)=P(w_1,w_2,w3,\cdots,w_n) \end{equation}\]
根据条件概率公式:
\[\begin{equation} =P(w_1|<s>)P(w_2|w_1)P(w_3|w_1,w_2),\cdots,P(w_i|w_1,w_2,w_3,\cdots,w_{i-1}),P(w_n|w_1,w_2,w_3,\cdots,w_{n-1})) \end{equation}\]
根据马尔可夫假设:
当N=2,二元模型
\[ \approx P(w_1|<s>)P(w_2|w_1)P(w_3|w_2)P(w_i|w_{i-1})P(w_n|w_{n-1}) \]
当N=3,三元模型
\[ \begin{equation} =P(w_1|<s>)P(w_2|w_1)P(w_3|w_1,w_2)P(w_4|w_1,w_2,w_3)P(w_5|w_2,w_3,w_4),\cdots,P(w_i|w_{i-3},w_{i-2},w_{i-1}),P(w_n|w_{n-3},w_{n-2},w_{n-1})) \end{equation} \]
N元模型
\[ =P(w_1|<s>)P(w_2|w_1)P(w_3|w_1,w_2),\cdots,P(w_i|w_{i-1-N},\cdots,w_{i-1}),P(w_n|,w_{n-1-N},\cdots,w_{n-1})) \]
马尔可夫假设推导形成的常见语言模型
| N=1 | Unigram | 一元语言模型 |
| --- | --- | --- |
| N=2 | Bigram | 二元语言模型 |
| N=3 | Trigram | 三元语言模型 |
| N=? | N-gram | N元gram模型 |
对于任意给定单词\(w_i\),\(P(w_i)\)当取二元模型时:
\[ \begin{equation} P(w_i) = \frac{ P(w_{i-1},w_i) }{ P(w_{i-1}) } \label{eq:qmath} \end{equation} \]
$ P(w_{i-1},w_i)\(是联合概率,\)P(w_{i-1})$是边缘概率。我们要计算这两个的概率,需要用到大数定理。当有大量重复事件时,事件发生的频率接近于概率。
\[ \begin{equation} f(w_{i-1},w_i)=\frac{\#(W_{i-1},w_i)}{\#} \end{equation} \]
\[ \begin{equation} f(w_{i-1})=\frac{\#(W_{i-1})}{\#} \end{equation} \]
当统计量足够,相对频度和概率就几乎相等。(同时这个地方的假设我个人认为也是对我们的语料库提出了要求。)
\[ \begin{equation} f(w_{i-1},w_i)=\frac{\#(W_{i-1},w_i)}{\#}\approx P(w_{i-1},w_i) \end{equation} \]
\[ \begin{equation} f(w_{i-1})=\frac{\#(W_{i-1})}{\#}\approx P(w_{i-1}) \end{equation} \]
\[ \begin{equation} P(w_i|w_{i-1})=\frac{P(w_{i-1},w_i)}{P(w_{i-1})}\approx \frac{f(w_{i-1},w_i)}{f(w_{i-1})} =\frac{\frac{\#(w_{i-1},w_i)}{\#}}{\frac{\#(w_{i-1})}{\#}} =\frac{\#(w_{i-1},w_i)}{\#(w_{i-1})} \end{equation} \]
本节提到的概念
联合概率
边缘概率
条件概率
马尔可夫假设
大数据定理
语料库
相对频度
本节人物
费里尼克
马尔可夫
李开复
罗赛塔
2、延伸阅读:统计语言模型的工程诀窍
2.1、高阶语言模型
N合适的取值是2-3
- 空间复杂度
- 计算速度
马尔可夫假设局限性和文本长程依赖性
2.2 模型的训练、零概率问题和平滑方法
2.2.1 模型的训练
使用语言模型的条件是得知道所有词的出现条件概率值,然后将他们按照预测的句子概率相乘得到句子概率。所以我们需要先计算每一个的条件概率,这些概率值我们称为模型的参数。通过对语料的统计,得到这些参数的过程称作模型的训练。
2.2.2 零概率问题
2.2.2.1 问题出现的原因
假如我们使用二元统计语言模型,根据前面的推理公式有:
\[ P(S)\approx P(w_1|<s>)P(w_2|w_1)P(w_3|w_2)P(w_i|w_{i-1})P(w_n|w_{n-1}) \]
\[ \begin{equation} P(w_i|w_{i-1})=\frac{P(w_{i-1},w_i)}{P(w_{i-1})}\approx \frac{f(w_{i-1},w_i)}{f(w_{i-1})} =\frac{\frac{\#(w_{i-1},w_i)}{\#}}{\frac{\#(w_{i-1})}{\#}} =\frac{\#(w_{i-1},w_i)}{\#(w_{i-1})} \end{equation} \]
我们考虑以下两种情况
- 当\(\#(w_{i-1},w_i)=0\),即该联合词在语料库中一次都没有出现。则,\(P(w_i|w_{i-1})=0\).
当$#(w_{i-1},w_i)=1,#(w_{i-1})=1 \(,即该联合词和前面的词在语料库中只出现一次。则,\)P(w_i|w_{i-1})=1=100%$.
以上两种情况,从数学的推导上面看似是没有问题,但是我们结合现实情况考虑以下,这样的结论是否是完备和太过于绝对。即当该词在语料库中一次都没有我们就说这个不合理,当两个都出现1次就一定会出现,显然语料库是有可能不完整和充分的。因此这样的结论和概率是不合适的,需要我们解决该问题。运用更为通俗的学生例子加以解释
2.2.2.2.2 0概率问题解决办法
最直接的办法:增加数据量,因为我们都知道根据大数定理,当量一定程度后其频率都比较接近概率,因此我们对这些出现一次的再增加就可以使其逼近真实概率。
但是现实生活中大的数据量只是一个相对的概念,因此最后都会面临一个0概率或者100%的问题。- 古德图灵估计原理:
对于没有看见的事件,我们不能认为他发生的概率是0,因此我们从概率总理中,分配一个很小的比例给这些没有看见的事件。这样以来看见的那些时间的概率总和就要小于1了,因此,需要将所有看见的事件概率调小一点。至于小多少。要根据“越是不可信的统计折扣越多的”的方法进行。 - 古德-图灵估计语料估计过程
假定在语料库中出现r次的词有\(N_r\)个,特别地,未出现的词数量\(N_0\)个,语料库的大小为N。则有:
\[\begin{equation} N=\sum_{r=1}^\infty rN_r \end{equation} \]
这个的意思就是,比如出现100次的有“我”“你”“他”三个词,则N=3*100=300
对于出现r次的词在整个语料库中的相对频度则是:
\[\begin{equation} 出现r次的词在整个语料库中的相对频度=rN_r/N \end{equation}\]
现在我们看是如何运用的
如果r次数比较小--》统计不可考---〉需要调整---》这个地方我们调整次数即可---〉用\(d_r\)代替r--->其满足如下古德图灵公式:
\[ d_r=(r+1)N_{r+1}/N_r=(r+1)\frac{N_{r+1}}{N_r} \]
同时以下等式也是成立的:
\(\sum_rd_r\cdot N_r=N\) - zipf定律
背景知识:根据观察一般语料库中,出现一次的词的数量比出现两次的多,出现两次的比出现三次的多。即出现次数越多的词,数量越少,出现次数越少的词数量越多。这个很好理解,常用词出现的次数很多,但是数量很少,其他不常用词出现次数少,但是量大,因为中文或者词语有几千个字,常用的不多,所以出现次数越多的单身数量却不多,不常用字生僻字还是占据了很大一部分,所以数量多,但是用的次数少。
理解记忆小技巧:这就好像,r类似考试的100道题,能够做100分的活着高分的能人数很少,但是做个普通分数或者低分的人数量很多,有些类似或者可以这么记。 - 古德图灵估计-2元模型
\[ P(w_i|w_{i-1})= \left\{ \begin{aligned} f(w_i|w_{i-1}) &&& if \#(w_{i-1},w_i) >=T \\ f_{gt}(w_i|w_{i-1}) &&& if 0<\#(w_{i-1},w_i)< T \\ Q(w_{i-1}) \cdot f(w_i) &&& otherwise \\ \end{aligned} \right.\]
\[ Q(w_{i-1})=\frac{1-\sum_\limits{w_i seen}P(w_i|w_{i-1})}{ \sum_\limits{w_i seen}f(w_i) } \] 古德图灵估计-3元模型
\[ P(w_i|w_{i-2},w_{i-1})= \left\{ \begin{aligned} f(w_i|w_{i-2,w_{i-1}}) &&& if \#(w_{i-2},w_{i-1},w_i) >=T \\ f_{gt}(w_i|w_{i-2},w{i-1}) &&& if 0<\#(w_{i-2},w_{i-1},w_i)< T \\ Q(w_{i-2},w_{i-1}) \cdot P(w_i|w_{i-1}) &&& otherwise \\ \end{aligned} \right.\]语料库
- 训练语料和模型应用领域需要相关,最好一致,比如不要用中华字典语料取训练网络流行语应用
- 语料有适当噪声没有关系,因为他跟贴近实际。
- 训练数据理论上越多越好
- 由于实际过程中大部分语料不足,不要片面追求高阶模型,因为高阶模型需要训练的参数多,需要的数据更多。
对语料数据,处理中,对于一些有规律、模式的噪声应该加以清除过滤。
本节概念
zipf定律
卡茨退避法
不平滑模型,即条件概率大部分为0的模型。
概率估计,统计语言模型的训练好坏的艺术就是在统计样本不足的情况下如何更好的概率估计。
古德图灵估计(Good-Turing Estimate)疑问
中文语料库是否具备zipf定律,如何运用中文语料库和英文语料库进行重现。
本节数学符号
- \(\#\) 语料库大小
- \(r\) 某个词在语料库中出现的次数为r
参考链接
http://www.52nlp.cn/%E4%B8%AD%E8%8B%B1%E6%96%87%E7%BB%B4%E5%9F%BA%E7%99%BE%E7%A7%91%E8%AF%AD%E6%96%99%E4%B8%8A%E7%9A%84word2vec%E5%AE%9E%E9%AA%8C
吴恩达马尔可夫
http://open.163.com/movie/2008/1/2/N/M6SGF6VB4_M6SGKSC2N.html
吴恩达序列模型-nlp
https://mooc.study.163.com/learn/2001280005?tid=2001391038#/learn/content- 作者:luomgf
- 163mail:luomgf
- 说明:转载请注明出处