统计语言模型

一个统计语言模型包含一个有限集合V,和一个函数p(x1,x2,...xn)p(x_1,x_2,...x_n),满足:

  1. 对于任意(x1,x2,...xn)v+(x_1,x_2,...x_n)\in v^+,有p(x1,x2,...xn)0p(x_1,x_2,...x_n) \ge 0
  2. 所有词序列的概率之和为1

(x1,,xn,v+p(x1,x2,,xn)=1\sum_{\left( x_{1}, \ldots, x_{n}, \right\rangle \in v^{+}} p\left(x_{1}, x_{2}, \ldots, x_{n}\right)=1

统计语言模型是所有词序列上的一个概率分布

计算方法

统计语言模型概率的计算方法:

P(S)=P(x1=w1,xn=wn)=P(w1n)=P(w1)P(w2w1)P(w3w12)P(wnw1n1)=k=1nP(wkw1k1)\begin{aligned} P(S) &=P\left(x_{1}=w_{1}, \ldots x_{n}=w_{n}\right)=P\left(w_{1}^{n}\right) \\ &=P\left(w_{1}\right) P\left(w_{2} \mid w_{1}\right) P\left(w_{3} \mid w_{1}^{2}\right) \ldots P\left(w_{n} \mid w_{1}^{n-1}\right) \\ &=\prod_{k=1}^{n} P\left(w_{k} \mid w_{1}^{k-1}\right) \end{aligned}

其中,$P\left(w_{n} \mid w_{1}^{n-1}\right) 的含义是:在所有词序列中,含有词的含义是:在所有词序列中,含有词w_n,且,且w_n前面是前面是w_1, w_2, …, w_{n-1}$的概率。概率的获取方法是从语料库(Corpus)中获取,如:

P( buy  It is too expensive to )=C( It is too expensive to buy )C( It is too expensive to )P(\text { buy } \mid \text { It is too expensive to })=\frac{C(\text { It is too expensive to buy })}{C(\text { It is too expensive to })}

C表示计数。

但是随着词序列的增长,语料库中就越难找到相应的词序列,所估计出的概率就越不准确。此时容易想到,可以用最近的几个历史词代替整个历史词串,也就是N-gram语言模型。

N-gram

N-gram:用前N-1个词作为历史,估计当前(第N个)词,即:

P(wiw1i1)=P(wiwiN+1i1)P\left(w_{i} \mid w_{1}^{\mathrm{i}-1}\right)=P\left(w_{i} \mid w_{\mathrm{i}-N+1}^{\mathrm{i}-1}\right)

统计语言模型概率的计算方法可化简为:

P(S)=P(x1=w1,xn=wn)=P(w1n)=P(w1)P(w2w1)P(w3w12)P(wnw1n1)=k=1nP(wkw1k1)=k=1nP(wkwkN+1k1)\begin{aligned} P(S) &=P\left(x_{1}=w_{1}, \ldots x_{n}=w_{n}\right)=P\left(w_{1}^{n}\right) \\ &=P\left(w_{1}\right) P\left(w_{2} \mid w_{1}\right) P\left(w_{3} \mid w_{1}^{2}\right) \ldots P\left(w_{n} \mid w_{1}^{n-1}\right) \\ &=\prod_{k=1}^{n} P\left(w_{k} \mid w_{1}^{k-1}\right) =\prod_{k=1}^{n} P\left(w_{k} \mid w_{k-N+1}^{k-1}\right) \end{aligned}

二元语言模型(bi-gram)词概率的计算方法为:

P(wiwi1)=C(wi1wi)C(wi1)P\left(w_{i} \mid w_{\mathrm{i}-1}\right)=\frac{C\left(w_{\mathrm{i}-1} w_{i}\right)}{C\left(w_{i-1}\right)}

ASR领域用来标记开头结尾,并方便统计。
没有在vocabulary中的词(OOV, out of vocabulary),一般标记为

评估

语言模型的评估方法主要有:

  • 根据应用实地测试
  • 困惑度(Perplexity)

困惑度的计算方法:

PP(W)=P(w1w2wN)1N=1P(w1w2wN)N=i=1N1P(wiwiN+1i1)N\begin{aligned} PP(W) &=P\left(w_{1} w_{2} \ldots w_{N}\right)^{-\frac{1}{N}} \\ &=\sqrt[N]{ \frac{1}{P\left(w_{1} w_{2} \ldots w_{N}\right)} } \\ &=\sqrt[N]{ \prod_{i=1}^{N} \frac{1}{P\left(w_{i} \mid w_{i-N+1}^{i-1}\right)}} \end{aligned}

其中W=w1,w2,...,wNW=w_1,w_2,...,w_N是测试集的一条词序列,困惑度就是用单词数归一化后的测试集概率

PPL:考虑词数和句子数(i.e. 考虑)

PPL1:只考虑词数

平滑算法

含义

由于语料的稀疏性(sparse data), 有些词序列在语料中找不到,会导致P(wiwi1)=0P\left(w_{i} \mid w_{\mathrm{i}-1}\right)=0的情况,从而无法计算概率

平滑的思想就是将一部分能够看得见的事件的概率分给未看见的事件

两个概念

  1. 调整计数(adjusted count) cc^*: 描述平滑算法仅对分子的影响
  2. 相对打折折率(discount ratio) dcd_c:打折计数和原计数的比率

典型算法

拉普拉斯平滑

算法

基本思想:将每个计数加一,从而使得任何词序列都有计数。

以unigram为例,平滑前:

P(wi)=C(wi)NP(w_i) = \frac{C(w_i)}{N}

平滑后:

P(wi)=C(wi)+1N+VP(w_i)= \frac{C(w_i)+1}{N+V}

N为语料库中的总词数

缺点: 原来计数量较高的词序列,概率削减严重。

调整计数 和 相对打折率

  1. 调整计数(adjusted count) :

ci=(ci+1)NN+Vc_i^*=(c_i+1) \frac{N}{N+V}

  1. 相对打折折率(discount ratio) :

dc=ccd_c = \frac{c^*}{c}

插值(Interpolation)法

主要思想:从所有N-grams估计中,把所有的概率估计混合。例如,我们优化一个tri-gram模型,我们将统计的tri-gram,bigram和unigram计数进行插值。

回退(Back off)法

主要思想:如果存在非零的高阶语言模型,则直接使用。只有当高阶语言模型存在计数零时,我们回退到低阶语言模型。(递归)

例如,一个tri-gram,某些概率为0,我们将tri-gram非零计数打折后,获得遗漏量,将遗漏量用bi-gram进行重分配,依次类推。

其他平滑算法

未完待续

存储格式与工具包

存储格式

ARPA Format是N-gram的标准储存模式

是一个ASCII文件,在小标题后跟着一个表,列举出所有非零的N元语法概率,如下图所示:

每个N元语法条目中,依次为:

折扣后对数概率(log10格式存储),词序列,回退权重(log10格式存储)

即:

log10P(wiwi1)wi1wilogα(wi1wi)\log _{10} P^{*}\left(w_{i} \mid w_{i-1}\right) \quad w_{i-1} w_{i} \quad \log \alpha\left(w_{i-1} w_{i}\right)

工具包