> For the complete documentation index, see [llms.txt](https://chenjunren.gitbook.io/read-the-beauty-of-mathematics/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://chenjunren.gitbook.io/read-the-beauty-of-mathematics/di-3-zhang-tong-ji-yu-yan-mo-xing.md).

# 第 3 章 统计语言模型

讲述如何利用统计语言模型处理自然语言，以及如何确保结果的准确性、减少不平滑。

## 统计语言模型

用来处理自然语言的上下文关系，它是所有自然语言处理的基础。并广泛应用于机器翻译、语音识别、印刷体或手写体识别、拼音纠错、汉字输入和文献查询。

## 利用概率大小衡量一个文字序列是否能构成大家理解而且有意义的句子

假定![S](https://www.zhihu.com/equation?tex=S)表示某一个有意义的句子，由一连串特定顺序排列的词![w\_1,\ w\_2,\ \cdots ,\ w\_n](https://www.zhihu.com/equation?tex=w_1%2C%5C%20w_2%2C%5C%20%5Ccdots%20%2C%5C%20w_n)组成， 其中![n](https://www.zhihu.com/equation?tex=n)是句子的长度。现在我们想知道![S](https://www.zhihu.com/equation?tex=S)在文本中出现的可能性，即是![S](https://www.zhihu.com/equation?tex=S)的概率![P\left( S \right) ](https://www.zhihu.com/equation?tex=P%5Cleft\(%20S%20%5Cright\)%20)。 既然![ S = w\_1,\ w\_2,\ \cdots ,\ w\_n ](https://www.zhihu.com/equation?tex=%20S%20%3D%20w_1%2C%5C%20w_2%2C%5C%20%5Ccdots%20%2C%5C%20w_n%20)，那不妨将![P\left( S \right) ](https://www.zhihu.com/equation?tex=P%5Cleft\(%20S%20%5Cright\)%20)展开表示：

![ （3.1）](https://www.zhihu.com/equation?tex=%20P%5Cleft\(%20S%20%5Cright\)%20%3DP%5Cleft\(%20w_1%2C%5C%20w_2%2C%5C%20%5Ccdots%20%2C%5C%20w_n%20%5Cright\)%20)

序列![S](https://www.zhihu.com/equation?tex=S)出现的概率，等于序列中每一个词![w\_i](https://www.zhihu.com/equation?tex=w_i)出现的**条件概率**相乘，其中![i=\left\\{ \text{1,}\cdots ,\ n \right\\} ](https://www.zhihu.com/equation?tex=i%3D%5Cleft%5C%7B%20%5Ctext%7B1%2C%7D%5Ccdots%20%2C%5C%20n%20%5Cright%5C%7D%20)，并且出现的概率同他前面的所有词有关，于是![P\left( w\_1,\ w\_2,\ \cdots ,\ w\_n \right)](https://www.zhihu.com/equation?tex=P%5Cleft\(%20w_1%2C%5C%20w_2%2C%5C%20%5Ccdots%20%2C%5C%20w_n%20%5Cright\))可展开为：

![条件概率公式（3.2）](https://www.zhihu.com/equation?tex=P%5Cleft\(%20w_1%2C%5C%2C%5C%2Cw_2%2C%5C%2C%5C%2C%5Ccdots%20%2C%5C%2C%5C%2Cw_n%20%5Cright\)%20%3DP%5Cleft\(%20w_1%20%5Cright\)%20%5Ccdot%20P%5Cleft\(%20w_2%5Cmid%20w_1%20%5Cright\)%20%5Ccdot%20P%5Cleft\(%20w_3%5Cmid%20w_1%2C%5C%20w_2%20%5Cright\)%20%5Ccdot%20%5Ccdots%20%5Ccdot%20P%5Cleft\(%20w_n%5Cmid%20w_1%2C%5C%20w_2%2C%5C%20%5Ccdots%20%2C%5C%20w_%7Bn-1%7D%20%5Cright\)%20)

由于计算复杂，所以就假设（马尔科夫假设）任意一个词![w\_i](https://www.zhihu.com/equation?tex=w_i)出现的概率只同它前面的词![w\_{i-1}](https://www.zhihu.com/equation?tex=w_%7Bi-1%7D)有关：

![马尔科夫假设 or 二元模型（Bigram Model）（3.3）](https://www.zhihu.com/equation?tex=P%5Cleft\(%20S%20%5Cright\)%20%3DP%5Cleft\(%20w_1%20%5Cright\)%20%5Ccdot%20P%5Cleft\(%20w_2%5Cmid%20w_1%20%5Cright\)%20%5Ccdot%20P%5Cleft\(%20w_3%5Cmid%20w_2%20%5Cright\)%20%5Ccdot%20%5Ccdots%20%5Ccdot%20P%5Cleft\(%20w_n%5Cmid%20w_%7Bn-1%7D%20%5Cright\))

接下来的问题就是估计条件概率![P\left( w\_i\mid w\_{i-1} \right)](https://www.zhihu.com/equation?tex=P%5Cleft\(%20w_i%5Cmid%20w_%7Bi-1%7D%20%5Cright\))根据定义，可知：

![条件概率（3.4）](https://www.zhihu.com/equation?tex=P%5Cleft\(%20w_i%5Cmid%20w_%7Bi-1%7D%20%5Cright\)%20%3D%5Cfrac%7BP%5Cleft\(%20w_%7Bi-1%7D%2C%5C%20w_i%20%5Cright\)%7D%7BP%5Cleft\(%20w_%7Bi-1%7D%20%5Cright\)%7D)

对与联合概率![P\left( w\_{i-1},\ w\_i \right)](https://www.zhihu.com/equation?tex=P%5Cleft\(%20w_%7Bi-1%7D%2C%5C%20w_i%20%5Cright\))和边缘概率![P\left( w\_{i-1} \right)](https://www.zhihu.com/equation?tex=P%5Cleft\(%20w_%7Bi-1%7D%20%5Cright\))的估计就变得简单了。通过计数可获得这些词或者二元组的相对频度：

![二元组的相对频度（3.5）](https://www.zhihu.com/equation?tex=f%5Cleft\(%20w_%7Bi-1%7D%2Cw_i%20%5Cright\)%20%3D%5Cfrac%7B%5C%23%5Cleft\(%20w_%7Bi-1%7D%2C%5C%20w_i%20%5Cright\)%7D%7B%5C%23%7D)

![相对频度（3.6）](https://www.zhihu.com/equation?tex=f%5Cleft\(%20w_%7Bi-1%7D%20%5Cright\)%20%3D%5Cfrac%7B%5C%23%5Cleft\(%20w_%7Bi-1%7D%20%5Cright\)%7D%7B%5C%23%7D)

根据**大数定律**，只要统计量足够，相对频度就等于概率，即：

![   （3.7）](https://www.zhihu.com/equation?tex=%20%20%20P%5Cleft\(%20w_%7Bi-1%7D%2C%5C%20w_i%20%5Cright\)%20%5Capprox%20%5Cfrac%7B%5C%23%5Cleft\(%20w_%7Bi-1%7D%2C%5C%2C%5C%2Cw_i%20%5Cright\)%7D%7B%5C%23%7D)

![（3.8）](https://www.zhihu.com/equation?tex=P%5Cleft\(%20%20w_%7Bi-1%7D%20%5Cright\)%20%5Capprox%20%5Cfrac%7B%5C%23%5Cleft\(%20w_%7Bi-1%7D%20%5Cright\)%7D%7B%5C%23%7D)

{% hint style="info" %}

#### 大数定律

大数定律(law of large numbers)，是一种描述当试验次数很大时所呈现的概率性质的定律。但是注意到，大数定律并不是经验规律，而是在一些附加条件上经严格证明了的定理，它是一种自然规律因而通常不叫定理而是大数“定律”。

在随机事件的大量重复出现中，往往呈现几乎必然的规律，这个规律就是大数定律。通俗地说，这个定理就是，在试验不变的条件下，重复试验多次，随机事件的频率近似于它的概率。偶然中包含着某种必然。
{% endhint %}

结合（3.4），（3.7），（3.8），可得：

![（3.9）](https://www.zhihu.com/equation?tex=P%5Cleft\(%20w_i%5Cmid%20w_%7Bi-1%7D%20%5Cright\)%20%5Capprox%20%5Cfrac%7B%5C%23%5Cleft\(%20w_%7Bi-1%7D%2C%5C%2C%5C%2Cw_i%20%5Cright\)%7D%7B%5C%23%5Cleft\(%20w_%7Bi-1%7D%20%5Cright\)%7D)

## &#x20;N-1 阶马尔科夫模型

&#x20;假设文本中的每个词![w\_i](https://www.zhihu.com/equation?tex=w_i)和前面的![N-1](https://www.zhihu.com/equation?tex=N-1)个词有关系，而与更前面的词无关，则：

![N-1阶马尔科夫假设（3.10）](https://www.zhihu.com/equation?tex=P%5Cleft\(%20w_i%5Cmid%20w_1%2C%5C%20w_2%2C%5C%20%5Ccdots%20%2C%5C%20w_%7Bi-1%7D%20%5Cright\)%20%3DP%5Cleft\(%20w_i%5Cmid%20w_%7Bi-N%2B1%7D%2C%5C%20w_%7Bi-N%2B2%7D%2C%5C%20%5Ccdots%20%2C%5C%20w_%7Bi-1%7D%20%5Cright\)%20)

![N=1](https://www.zhihu.com/equation?tex=N%3D1)的一元模型实际上是一个上下文无关的模型，![N](https://www.zhihu.com/equation?tex=N)的值一般为2，或3。

![N](https://www.zhihu.com/equation?tex=N)值很少取更高值的原因：

* &#x20;一是 ![N](https://www.zhihu.com/equation?tex=N)越大，复杂度![O\left( |V|^N \right) ](https://www.zhihu.com/equation?tex=O%5Cleft\(%20%7CV%7C%5EN%20%5Cright\)%20)越大（这里![ |V|](https://www.zhihu.com/equation?tex=%20%7CV%7C)是一种语言词典的词汇量）。
* &#x20;二是自然语言中上下文的相关性可能跨度非常大，甚至可以从一个段落跨到另一个段落，所以即使模型阶数n再高，也没有太多意义。这是马尔科夫假设的局限。

{% hint style="warning" %}

#### &#x20;马尔科夫假设的局限

* 一是 ![N](https://www.zhihu.com/equation?tex=N)越大，复杂度![O\left( |V|^N \right) ](https://www.zhihu.com/equation?tex=O%5Cleft\(%20%7CV%7C%5EN%20%5Cright\)%20)越大（这里![ |V|](https://www.zhihu.com/equation?tex=%20%7CV%7C)是一种语言词典的词汇量）。
* 二是自然语言中上下文的相关性可能跨度非常大，甚至可以从一个段落跨到另一个段落，所以即使模型阶数![n](https://www.zhihu.com/equation?tex=n)再高，也没有太多意义。
  {% endhint %}

## 模型的训练

通过对语料的统计，得到模型中的参数。

我们需要足够的语料才能得到较为可靠的概率。然而语料过多，可能会导致大部分条件概率为0的情况，这种模型叫做“不平滑”。

## &#x20;减少不平滑

**古德-图灵估计（Good-Turing Estimate）**：对于没有看见的事件，我们不能认为它的发生概率就是零，因此我们从概率的总量中，分配一个很小的概率给予这些没有看见的事件。这样一来，看见的时间的概率总和就要小于1了。至于小多少，要根据“越是不可信的统计折扣越多”的方法进行。

![古德-图灵估计](https://543297831-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LEY4jsxH4p0F7hFIFwd%2F-LEZR4CxMypyk7AB5kbe%2F-LEZRd_flfUs1Os9_lEf%2F%E5%9B%BE%E7%89%874.png?alt=media\&token=464387fa-8cc5-4ce2-91c3-0927bcf70457)

设语料库中出现![r](https://www.zhihu.com/equation?tex=r)次的词有![N\_r](https://www.zhihu.com/equation?tex=N_r)个，特别地，未出面的词数量为![N\_0](https://www.zhihu.com/equation?tex=N_0),语料库大小为![N](https://www.zhihu.com/equation?tex=N)。那么，显然有：

![（3.11）](https://www.zhihu.com/equation?tex=N%3D%5Csum_%7Br%3D1%7D%5E%7B%5Cinfty%7D%7BrN_r%7D)

出现![r](https://www.zhihu.com/equation?tex=r)次词在整个语料库中的相对频度（Relative Frequency）则是![r/N](https://www.zhihu.com/equation?tex=r%2FN)，若不做任何优化处理，就可用这个相对频度作为这些词的频率估计。

&#x20;现在假定当![r](https://www.zhihu.com/equation?tex=r)比较小时，它的统计可能不可靠，因此出现![r](https://www.zhihu.com/equation?tex=r)次的那些词在计算它们的概率时要使用一个更小一点的次数![d\_r](https://www.zhihu.com/equation?tex=d_r)（而不直接使用![r](https://www.zhihu.com/equation?tex=r)），古德-图灵估计按照下列公式计算：

![（3.12）](https://www.zhihu.com/equation?tex=d_r%3D%5Cleft\(%20r%2B1%20%5Cright\)%20%5Ccdot%20N_%7Br%2B1%7D%2FN_r)

显然：

![（3.13）](https://www.zhihu.com/equation?tex=%5Csum_r%7Bd_r%5Ccdot%20N_r%3D%7DN)

{% hint style="info" %}

#### Zipf 定律（Zipf's Law）

一般来说，出现一次的词的数量比出现两次的多，出现两次的比出现三次的多。这种规律称为Zipf定律。
{% endhint %}

**删除插值法**：因为一元组![\left( w\_i \right) ](https://www.zhihu.com/equation?tex=%5Cleft\(%20w_i%20%5Cright\)%20)出现的次数平均比二元组![\left( w\_{i-1},\ w\_i \right) ](https://www.zhihu.com/equation?tex=%5Cleft\(%20w_%7Bi-1%7D%2C%5C%20w_i%20%5Cright\)%20)出现的次数要高得多，根据大数定理，它的频度更接近概率分布。所以，用低阶语言模型和高阶模型进行线性差值来达到平滑的目的。即连续三个字出现的概率![=](https://www.zhihu.com/equation?tex=%3D)![\lambda](https://www.zhihu.com/equation?tex=%5Clambda)倍连续三个字出现的概率![+](https://www.zhihu.com/equation?tex=%2B)![\mu ](https://www.zhihu.com/equation?tex=%5Cmu%20)倍连续两个字出现的概率![+](https://www.zhihu.com/equation?tex=%2B)![\left( 1-\lambda -\mu \right) ](https://www.zhihu.com/equation?tex=%5Cleft\(%201-%5Clambda%20-%5Cmu%20%5Cright\)%20)倍该字单独出现的概率：

![删除插值法（3.14）](https://www.zhihu.com/equation?tex=P%5Cleft\(%20w_i%5Cmid%20w_%7Bi-2%7D%2C%5C%20w_%7Bi-1%7D%20%5Cright\)%20%3D%5Clambda%20%5Cleft\(%20w_%7Bi-2%7D%2C%5C%20w_%7Bi-1%7D%20%5Cright\)%20%5Ccdot%20f%5Cleft\(%20w_i%5Cmid%20w_%7Bi-2%7D%2C%5C%20w_%7Bi-1%7D%20%5Cright\)%20%2B%5Cmu%20%5Cleft\(%20w_%7Bi-1%7D%20%5Cright\)%20%5Ccdot%20f%5Cleft\(%20w_i%5Cmid%20w_%7Bi-1%7D%20%5Cright\)%20%2B%5Cnu%20f%5Cleft\(%20w_i%20%5Cright\)%20%5Ctext%7B%EF%BC%8C%7D%5Clambda%20%3E%5Ctext%7B0%EF%BC%8C%7D%5Cmu%20%3E%5Ctext%7B0%EF%BC%8C%7D%5Cnu%20%3E%5Ctext%7B0%EF%BC%8C%7D%5Clambda%20%2B%5Cmu%20%2B%5Cnu%20%3D1)

## 语料的选取

* 训练语料和模型应用的领域须保持一致，以减少噪音。
* 语料数据通常是越多越好，可以利用平滑过渡方法解决小/零概率事件。
* 最好能预处理能具有规律的、量比较大的噪音。

## &#x20;小结

数学的魅力在于将复杂的问题简单化。
