概念: 语言模型是计算一个句子是句子的概率的模型。(即这句话是不是按照人的说话方式说出来,别人是否能听懂)
栗子:(假设大多数人认为某某老师讲课很厉害)
某某老师的课讲的真好! 0.8 (既合乎语义也合乎语法)
某某老师的课讲的真的很一般! 0.01 (合乎语法但是与语义不符)
课的某某老师很真好的! 0.000001 (不合乎语法,也就没有在乎是否合乎语义了)
在输入法中,当输入一句话的拼音后,会把最可能是一句话的句子推荐在第一位。有助于用户选择,有利于用户体验 。
基于专家语法规则的语言模型
语言学家企图总结出一套通用的语法规则,比如动词后面跟副词,形容词后面跟名词等等。
但是总结出一套通用的语法规则太难了,因为语言是千变万化的,总是有反例提出来推翻语言法则;其次,随着社会的发展,不断有新词出现,并且在打破这种规则,比如奥利给等等。
统计语言模型
就是通过概率计算来构建语言模型
设 s = [ c 1 , c 2 , ⋯ , c n ] s=[c_{1},c_{2},\cdots,c_{n}] s=[c1,c2,⋯,cn]是一句话, c i c_{i} ci表示句子中第 i i i个词。
P ( s ) = P ( c 1 , c 2 , ⋯ , c n ) = P ( c 1 ) P ( c 2 ∣ c 1 ) P ( c 3 ∣ c 1 c 2 ) … P ( c n ∣ c 1 c 2 … c n − 1 ) P(s)=P(c_{1},c_{2},\cdots,c_{n})=P(c_{1})P(c_{2}|c_{1})P(c_{3}|c_{1}c_{2})\dots P(c_{n}|c_{1}c_{2}\dots c_{n-1}) P(s)=P(c1,c2,⋯,cn)=P(c1)P(c2∣c1)P(c3∣c1c2)…P(cn∣c1c2…cn−1)
把一句话的概率用句子中词的概率相乘,且其中每个词都是在该词前面的词出现的条件下的概率。即把句子的概率转化成求词的概率和词的条件概率,接下来让我们来看一下,如何求词的概率和词的条件概率。
用语料的频率代替概率(用这个词在预料中出现的频率来作为这个词的概率。)
P ( c i ) = c o u n t ( c i ) N P(c_{i})=\dfrac{count(c_{i})}{N} P(ci)=Ncount(ci)
c o u n t ( c i ) count(c_{i}) count(ci)表示该词在语料中出现的次数.
那么已知词 c i − 1 c_{i-1} ci−1求之后出现词 c i c_{i} ci的概率怎么求呢?
条件概率公式为 P ( A ∣ B ) = P ( A B ) P ( B ) P(A|B)=\dfrac{P(AB)}{P(B)} P(A∣B)=P(B)P(AB),则
P ( c i ∣ c i − 1 ) = P ( c i − 1 , c i ) P ( c i − 1 ) P(c_{i}|c_{i-1})=\dfrac{P(c_{i-1},c_{i})}{P(c_{i-1})} P(ci∣ci−1)=P(ci−1)P(ci−1,ci)
又因为 P ( c i − 1 ) = c o u n t ( c i − 1 ) N P(c_{i-1})=\dfrac{count(c_{i-1})}{N} P(ci−1)=Ncount(ci−1), P ( c i − 1 , c i ) = c o u n t ( c i − 1 , c i ) N 1 P(c_{i-1},c_{i})=\dfrac{count(c_{i-1},c_{i})}{N_{1}} P(ci−1,ci)=N1count(ci−1,ci).
其中 N 1 = N − 1 N_{1}=N-1 N1=N−1,因为是前后两个词为一组,则 ( c 1 , c 2 ) (c_{1},c_{2}) (c1,c2), ( c 2 , c 3 ) (c_{2},c_{3}) (c2,c3), ( c 3 , c 4 ) (c_{3},c_{4}) (c3,c4) … \dots … ( c n − 1 , c n ) (c_{n-1},c_{n}) (cn−1,cn),一共 N − 1 N-1 N−1个。
所以 P ( c i ∣ c i − 1 ) = c o u n t ( c i − 1 , c i ) N 1 N c o u n t ( c i − 1 ) P(c_{i}|c_{i-1})=\dfrac{count(c_{i-1},c_{i})}{N_{1}} \dfrac{N}{count(c_{i-1})} P(ci∣ci−1)=N1count(ci−1,ci)count(ci−1)N,
因为 N 1 = N − 1 N_{1}=N-1 N1=N−1和 N N N几乎相等,约掉后为:
P ( c i ∣ c i − 1 ) = c o u n t ( c i − 1 , c i ) c o u n t ( c i − 1 ) ∈ [ 0 , 1 ] P(c_{i}|c_{i-1})=\dfrac{count(c_{i-1},c_{i})}{count(c_{i-1})}\in[0,1] P(ci∣ci−1)=count(ci−1)count(ci−1,ci)∈[0,1]
但是这样构造的语言模型存在这一定的问题,它会因为一些词没有在语料中出现过,就判定这句话的概率为0;也会因为短语(即该词出现的条件)太长导致这句话的概率为0。比如说“弟弟的媳妇很漂亮”这句话的概率很高,但是"姑姑的儿子的表姐的妈妈的弟弟的媳妇很漂亮“这句话的概率就很低,因为弟弟前面出现了很多形容词,那在语料中这些词后面出现弟弟的概率很小,甚至为0,所以导致这句话的概率很低或为0,但是这句话是合乎语义也合乎语法的,该语言模型判断的有些问题。
改进
P P ( s ) = P ( c 1 , c 2 , ⋯ , c n ) − 1 n PP(s)=P(c_{1},c_{2},\cdots,c_{n})^{-\frac{1}{n}} PP(s)=P(c1,c2,⋯,cn)−n1
持续更新!