本文为转载https://blog.csdn.net/asrgreek/article/details/81979194的基础上,做了一些推演与推演过程的修正,如有错误欢迎指正。
本文以KenlM介绍常用的N-gram语言模型原理。KenlM采用的平滑技术是Modified Kneser-ney smoothing
以以下代码段为例介绍,以N=2为例,即2-gram,bigram介绍N-gram模型:
我
你 我
他
我
你
接下来我们一步步剖析该模型的实现过程
一、增加<s>和</s>标记符,表示句子的开头和结尾
<s> 我 </s>
<s> 你 我 </s>
<s> 他 </s>
<s> 我 </s>
<s> 你 </s>
二、把每个词映射到唯一的数字id,为了更直观地描述下面的关键步骤,我们这里就不把单词映射为数字id
三、Counting(原始计数)。也就是把相同的字合并,然后排序(假设编码顺序为<s>、我、你、他、<\s>) 。根据步骤一的文本,我们可以得到1-gram和2-gram的原始计数counting一列:
表1 1-gram counting
1-gram | 原始计数counting | 中间计算过程 | Adjust count |
<s> | 5 | 由公式第一行,=<s>,a(<s>)=c(<s>)=5 | 5 |
我 | 3 | “我”前面出现了“你”和“<s>”,a(我)=2 | 2 |
你 | 2 | “你”前面出现了“<s>”,a(你)=1 | 1 |
他 | 1 | “他”前面出现了“<s>”,a(他)=1 | 1 |
</s> | 5 | “</s>”前面出现了“我”,“你”,“他”a(<\s>)=3 | 3 |
2-gram | 原始计数 | 中间计算过程 | Adjust count |
---|---|---|---|
<s> 我 | 2 | 根据式1的条件表达式(n=N),故与原始计数相同 | 2 |
<s> 你 | 2 | 同上 | 2 |
<s> 他 | 1 | 同上 | 1 |
我 </s> | 3 | 同上 | 3 |
你 我 | 1 | 同上 | 1 |
你 </s> | 1 | 同上 | 1 |
他 </s> | 1 | 同上 | 1 |
四、Adjusting(调整计数)。其基本思想是对于那些lower-gram,我们不care其出现的次数,而是关心其作为novel continuation的可能性。比如“York”,其在语料中出现的次数一般会比较多,因为“New York”是很高频的词。但“York”作为continuation(中文意思:别的词把“york”作为接续词)的可能性就较低,也就是说它前面的词只有“new”等少数几类词,所以应该给它较低的计数。其公式如右: