语言模型——N-gram模型

N-Gram语言模型

模型定义

N-gram模型是一种基于马尔科夫假设的语言模型,简单来说,就是当前一个单词(中文中一般以字为最小单位)出现的可能性大小只与这个单词前面一个或者几个单词有关,而与这几个单词之外的其他单词无关。其中的N即表示有关联的单词的个数(包括当前词本身)。

N-gram

特别的,当N=1,即当前单词出现的可能性不依赖其他任何单词,称为unigram模型;

N=2,即当前单词出现的可能性与本身和前一个单词有关,称为bigram模型;

N=3,即当前单词出现的可能性与本身和前两个单词有关,称为trigram。

。。。

前面提到,对于一个语言序列 $w_1,w_2,…,w_n$,语言模型负责计算该序列的概率 $P(w_1,w_2,…,w_n)$。

对于unigram,由于当前词出现的可能性不依赖其他任何词,因此:

对于bigram,当前词出现的可能性只依赖于当前词汇的前一个词,因此:

其中 $P(w_i|w_i-1)$ 表示在的 $w_{i-1}$的 条件下 $w_i$ 出现的概率。

特别的,$P(w_1|w_0) 即 P(w_1|BOS)\ (BOS表示句子开头)$ 表示 $ w_1 $ 出现在句子开头的概率。

以此类推,K-gram模型概率为:

句子开头与结尾

可以看出,(1)式和(2)式不太一样,变成了条件概率,并且多了 BOS 对于bigram来说,因为要考虑到前一个字对于当前字的影响,那么某个字出现在句子中或者句子开头的概率是不一样的。那么为了表示某个字出现在句子开头,我们添加一个特殊符号 <BOS>(或者s)

另外,为了保持所有句子出现的总的概率为1,需要人为在句尾添加一个特殊符号EOS(或者\s) 表示句子结束,否则所有长度为1的句子出现概率之和已经为1:$\sum_{i=1}^n P(w_i|BOS) = 1$,而添加句尾符号之后,所有的句子的概率和为1(满足一个真正的分布)。

如果没有结束标签,那么N-gram系统根本没法区分一个长度为m的句子和一个长度大于m的句子中的前m个词。

在实践中,一般是在词表中添加一个特殊符号表示结尾符号,一个有N个字的词表,在计算单词概率时,加入结尾符号,按照N+句子个数来计算。

模型计算

之所以N-gram模型属于统计语言模型,是因为N-gram模型中,我们根据极大似然估计,由单词出现的频率来计算单词的概率。

以unigram为例,因为当前单词(或者字)的出现概率与其他词无关,只与本身出现的次数有关,那么某个单词(或者字)出现的概率为

其中 $count(w_i)$ 为 $w_i$ 出现的次数, $T$ 为语料库或者说单词表中所有字的个数(加上结尾符号,结尾符号个数等于句子个数。)。

以中文为例,直观解释就是,以一篇文章作为语料库,某个字出现在这篇文章的次数 $\div$ 这篇文章的总字数,就是这个字的概率。

下面举个小例子:

有一句话 $T$ 作为语料库:“张三喜欢写代码,张三和李四喜欢听音乐。”

要求得“张三喜欢音乐”出现的概率。

除去标点符号,共18个字(其中包括一个结束符号)。“张”、“三”,“喜”、“欢”出现2次,“听”、“音”、“乐”各出现一次。则:

P(张)= P(三)= P(喜)= P(欢)= 1/9,P(听)= P(音)= P(乐)= 1/18。

P(张三喜欢听音乐)= P(张)* P(三)* P(喜)* P(欢)* P(听)* P(音)* P(乐)= 1.31*10-8。

P(张三喜欢音乐)= P(张)* P(三)* P(喜)* P(欢)* P(音)* P(乐)= 2.35*10-7。

很显然,句子的长度在很大程度上会影响句子的概率,这就是之前提到的,为何计算句子困惑度需要用N次根号去解决句子长度对于句子概率的影响。

参数选择

对于unigram,P(欢)= count(欢)/ count(T)= 1 / 9, 只需要遍历一次词表就可以计算出“欢”出现的概率。

对于bigram,则需要使用条件概率才能计算出连续两个单词出现的概率,所以N为2时,相比N为1 的N-gram模型,计算复杂度高了一个量级。

仍然以 N-gram模型计算 一节中的 $T$ 作为语料库,此时我们使用bigram模型,此时模型计算公式为:

计算条件概率的方法仍然是数次数,只不过此时数数过程稍有不同,以二维转移矩阵显示比较直观:

从表中可得:

很显然,bigram模型概率的计算过程与unigram模型比较相似,但是条件概率计算难度比单个字符出现概率计算难度复杂的多。举个例子:

对于unigram,

即只需要遍历词表一次即可输出 “欢” 出现的次数。

对于bigram,

计算 $P(听|欢)$ 需要先遍历除所有以 “欢” 开头的词语,再计算 “欢听” 的条件概率。

更一般的:

也就是说,N为2时相比N为1的N-gram模型,计算复杂度高了一个量级。

N-gram模型的参数数量与N的关系成指数级,因此计算量受到N的影响很大。

毫无疑问,增大N的值可以提高模型的性能,但是也会使得模型难以计算,所以实践中一般用bigram或者trigram。

N-gram模型困惑度

N-gram模型的模型效果和计算量就像天平的两端,往往二者不可得兼,为了减少参数量,只能减小N的取值,但这样不可避免地会导致模型效果下降。一般来说,N-gram模型中的n的取值也就是3~5,而即使是N选取比较大的的值,也难以充分覆盖前文信息,因此仍然无法解决长距离依赖关系问题。


  上一篇
神经网络语言模型 神经网络语言模型
语言模型本质是计算给定序列的概率,而神经网络强大的非线性拟合能力很适合拟合概率分布。并且神经网络模型可以获取到当前词汇下文的信息,这一点是N-gram语言模型所不具备的,另外神经网络模型能够利用到的的上下文词汇长度要比N-gram模型长的多。
2021-08-06
下一篇 
语言模型概述 语言模型概述
语言模型(Language Model),是对语句的概率分布的建模。对于语言模型,输入为字或者单词组成的序列,输出为这个序列的概率。
2021-05-03
   目录