一. 语言建模(Language Modeling)
s1 = 我 刚 吃 过 早饭
s2 = 刚 我 过 早饭 吃
对于上面这两句话,很明显,s1读起来要比s2通顺的多,也就是说P(s1) > P(s2);对于由n个词构成的不同句子(每个句子的基本组成词相同,只是顺序不同),那么它们出现的概率是大大不同的,而这就引出了一个问题——对给定句子如何分配概率?我们需要建立一个模型来完成这件事!
对于给定的自然语言L,P(s)未知;利用给定的语言样本估计P(s)的过程被称作语言建模。
二. 语言模型(Language Model)
根据语料库中的样本估计出的概率分布P称为语言L的语言模型。通俗来讲语言模型就是用来计算句子概率的模型,那么如何对给定句子 s = w1w2…wl,如何计算P(s)?
可以应用链式规则,分解P(s):
其中P(w1)表示第一个出现的概率,P(w2|w1)表示已知第一个词w1的前提下第二词出现的概率,依此类推…,不难看出,词wl出现的概率取决于它前面所有词,这样的话,随着前面出现的词l的增长,参数的规模成指数增长,难以估算。
1. 马尔可夫假设
针对上面难以估算的问题,引入马尔可夫假设——任意一个词wi的出现只与其之前的n-1个词有关,即:
只需要考虑n个词组成的片段,即n元组(n-gram)
那么得到n元模型如下:
当n=1时,有一元模型(unigram):
当n=2时,有二元模型(bigram):
当n=3时,有三元模型(trigram):