n gram model

n元语法(n gram model)

句子出现的概率

n gram简单来说是用来统计一句话在整个语言中出现的概率:假如我们有一句话“我想吃苹果”,那么先分词:“我/想/吃/苹果”,那么

\[\begin{split} P(我想吃苹果) = P(我,想,吃,苹果) = P(我)P(想|我)P(吃|我,想)P(苹果|我,想,吃) \end{split}\]

推而广之,对于句子 $s=w_1,w_2,…,w_t$

\[\begin{split} P(s)=P(w_1,w_2,...,w_t)=P(w_1)P(w_2|w_1)P(w_3|w_1,w_2)...P(w_t|w_1,w_2,...,w_{t−1}) \end{split}\]

n gram model

假如严格按照上述公式计算句子出现的概率,假设总词汇大小为 N,那么第 t 个词的概率 要考虑 \(N_{t−1}\)种情况,当 N 较大时,句子长度也较长时,计算量将是一个天文数字。我们需要找到一种办法降低计算量。 而且上述模型参数空间过大,而且数据非常稀疏。

根据马尔科夫假设当前隐含状态只取决于前一个隐含状态

  • 当 n=1 时,称为一元语法,被记为unigram,此时第 i 个词出现的概率与之前的情况完全独立。
  • 当 n=2 时,称为二元语法,被称为一阶马尔科夫链,记为bigram,此时第 i 个词出现的概率与它的前一个词有关
  • 当 n=3 时,称为三元语法,被称为二阶马尔科夫链,记作trigram,此时第 i 个词出现的概率与它的前两个词有关

对于二元语法:

\[\begin{split} P(s)=P(w_1,w_2,...,w_t)≈P(w_1)P(w_2|w_1)P(w3|w_2)...P(w_t|w_{t−1}) \end{split}\]

另外:为了使当 t=1 时上述公式仍然有意义,可以在句子面前加上一个句子起始标记<BOS>,而结尾也可以添加句子结束标记<EOS>

条件概率的计算

求 \(\begin{split} P(w_t|w_{t−1}) \end{split}\) 时,可直接计算 \(w_{t−1}\), \(w_t\) 在语料出现的频率并归一化。

\[P(w_t|w_{t-1}) = \frac{count(w_{t-1}w_t)}{\sum_{w_t}count(w_{t-1}w_t)}\]

对于语料 S:{ “我想吃苹果”, “他想吃橘子”, “我想吃蓝莓” }

对于句子“他想吃苹果”在语料 S 中出现的概率为:

\[\begin{split} P(他想吃苹果) = P(他,想,吃,苹果) ≈ P(他|<BOS>)P(想|他)P(吃|想)P(苹果|吃)P(<EOS>|苹果) \end{split}\]

由语料可知:

\[\begin{multline} P(他|<BOS>) = \frac{1}{3} \end{multline}\] \[\begin{multline} P(想|他) = \frac{1}{1} \end{multline}\] \[\begin{multline} P(吃|想) = \frac{1}{1} \end{multline}\] \[\begin{multline} P(苹果|吃) = \frac{1}{3} \end{multline}\] \[\begin{multline} P(<EOS>|苹果) = \frac{1}{3} \end{multline}\]

所以:

\[\begin{matrix} P(他|<BOS>)P(想|他)P(吃|想)P(苹果|吃)P(<EOS>|苹果) = \frac{1}{3} \times \frac{1}{1} \times \frac{1}{1} \times \frac{1}{3} \times \frac{1}{3} = \frac{1}{27} \end{matrix}\]

平滑处理

零概率问题

假如有词 A 和 B,而在语料中词 A B 从未连续存在过,那么 \(\begin{matrix} P(A|B) = 0 \end{matrix}\) ,而如果 A 和 B 确实有同时出现的情况,那么P(A|B)概率为0显然不够准确。

平滑(smoothing)技术

最简单的办法是引入先验概率(加法平滑算法),即假设每种组合至少存在一次:

\[P(w_t|w_{t-1}) = \frac{1 + count(w_{t-1}w_t)}{|V| + \sum_{w_t}count(w_{t-1}w_t)}\]

这里用 \(\begin{matrix} |V| \end{matrix}\) 来表示词汇表中单词的个数。

其它平滑算法

  • Good-Turing估计法
  • Katz平滑法
  • Jelinek-Mercer平滑法
  • 绝对值减法
  • Kneser-Ney平滑法
  • 贝叶斯平滑法

Original link:https://izhangzhihao.github.io//2018/01/27/n-gram-model/

Search

    Table of Contents