1. 语言模型的目的
提到语言模型,给一个大家最熟悉的使用场景就是输入法,智能拼音输入法,打出一串拼音,直接给出了合适的句子,即使不是你想要的,但确实是符合语法习惯的,例如,你的名字叫“福贵”你输入了“fugui”,出来的可能是“富贵”,但不会出来“抚跪”,这就是语言模型的功劳!~~~~
一句话,语音识别中语言模型的目的就是根据声学模型输出的结果,给出概率最大的文字序列!~~~
2. n-gram语言模型
1)n-gram概念
p(S)=p(w1,w2,w3,w4,w5,…,wn)
=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)//链规则
p(S)被称为语言模型,即用来计算一个句子概率的模型。
那么,如何计算p(wi|w1,w2,...,wi-1)呢?最简单、直接的方法是直接计数做除法,如下:
p(wi|w1,w2,...,wi-1) = p(w1,w2,...,wi-1,wi) / p(w1,w2,...,wi-1)
但是,这里面临两个重要的问题:数据稀疏严重;参数空间过大,无法实用。
基于马尔科夫假设(Markov Assumption):下一个词的出现仅依赖于它前面的一个或几个词。
- 假设下一个词的出现依赖它前面的一个词,则有:
p(S)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)
=p(w1)p(w2|w1)p(w3|w2)...p(wn|wn-1) // bigram
- 假设下一个词的出现依赖它前面的两个词,则有:
p(S)=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|w1,w2,...,wn-1)
=p(w1)p(w2|w1)p(w3|w1,w2)...p(wn|wn-1,wn-2) // trigram
那么,我们在面临实际问题时,如何选择依赖词的个数,即n。当n取1、2、3时,n-gram模型分别称为unigram、bigram和trigram语言模型。
- 更大的n:对下一个词出现的约束信息更多,具有更大的辨别力;
- 更小的