0 前言
本篇博客记录了笔者学习NLP里面N元语法模型部分的内容,包含了马尔可夫模型、N元语法(N-Gram)到一元、二元(Bi-Gram),最后提了下三元语法模型(Tri-Gram)。
1 马尔可夫模型
这里先展示马尔可夫性的创造者 Андрей Андреевич Марков 以示尊重🌞
马尔可夫模型简介
马尔可夫模型(Markov Model)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法等各个自然语言处理等应用领域。经过长期发展,尤其是在语音识别中的成功应用,使它成为一种通用的统计工具。 ——百度百科
马尔可夫模型需要满足两个关键假设
- 随机性
马尔可夫过程是一个随机过程,每个状态的转移有一定的随机性。模型必须反映这种随机性。
- 马尔科夫性
未来状态只依赖于当前状态,不依赖更早的状态。
即 P r [ X ( t + h ) = y ∣ X ( s ) = x ( s ) , s ≤ t ] = P r [ X ( t + h ) = y ∣ X ( t ) = x ( t ) ] , ∀ h > 0 Pr[X(t+h)=y|X(s)=x(s),s\leq t]=Pr[X(t+h)=y|X(t)=x(t)],\forall h>0 Pr[X(t+h)=y∣X(s)=x(s),s≤t]=Pr[X(t+h)=y∣X(t)=x(t)],∀h>0- 即在已知 X ( s ) = x ( s ) X(s) = x(s) X(s)=x(s),其中 s ≤ t s ≤ t s≤t,也就是在过去某个时刻的状态为 x ( s ) x(s) x(s) 的条件下,关心在未来的时刻 t + h t+h t+h 的状态是否为 y y y 的概率。这可以理解为在过去的一系列状态已知的情况下,预测未来的状态。
- X ( t ) = x ( t ) X(t) = x(t) X(t)=x(t),也就是在当前时刻 t t t 的状态为 x ( t ) x(t) x(t) 的条件下,关心在未来的时刻 t + h t+h t+h 的状态是否为 y y y 的概率。这可以理解为只考虑当前时刻的状态,而不考虑过去的状态。
- 如果这两个条件概率相等,那么它们告诉我们无论是否知道过去的状态信息,未来的状态预测都是一样的。这意味着过去的状态信息并没有提供额外的信息来改善未来状态的预测。未来的状态只受当前状态的影响,这就是马氏性质的核心思想。
但其实 N L P NLP NLP中的** N N N元语法模型并不是严格符合马尔可夫性的,而是宽泛的马尔可夫性,认为下一个状态不仅与当前状态X_t相关,还与之前n个状态有关,即: P ( X t + 1 = x ∣ X t = x t , . . . , X t − n + 1 = x t − n + 1 ) P(X_{t+1}=x| X_t=x_t, ..., X_{t-n+1}=x_{t-n+1}) P(Xt+1=x∣Xt=xt,...,Xt−n+1=xt−n+1)
依赖之前 n n n 个状态,而不是仅仅当前状态 X t X_t Xt 。这种扩展称为n阶马尔可夫过程**。
它虽然不再严格满足马尔可夫性质,但可以更好地反映状态之间的依赖关系,比一个状态的历史更有预测power。在自然语言处理中,我们通常会采用n阶马尔可夫过程,认为下一个词的状态依赖于前n个词,这就是n元语法。
2 推导
首先,现在的分词算法或者自然语言处理都不是基于语法、语义来处理的,并不是按照咱们上学时候老师教的主、谓、宾等概念来做的。原因可以去看一下数学之美中前几章。
其次,马尔可夫假设并不是一个现代的或者说现在各种分词算法中最先进的算法,甚至可以说马尔可夫假设是很简陋很粗糙的东西,但马尔可夫假设是划时代的后续的很多分词算法都是基于此演进过来的。思路和想法才是最重要的。
最后,理解马尔可夫假设的前提是需要认可这个设想:比如【需要】这个词语,出现【需】字之后,出现【要】字的概率比出现【你我他】的概率要大很多,所以如果发现第一个字是【需】第二个字是【要】,那么就可以认为这两个字大概率是有意义的,是正常应该会出现的情况。依次类推【需要】出现之后再出现【你】或者出现【我】字的概率远远大于再出现一个【要】字的概率。
基于以上的判断,贾里尼克提出了一个统计模型,如果若干个文字随机来组成一段话,每个字后边紧跟着字出现的概率越大的话,这一段话是一段正常、可理解、有含义的句子可能性最大。
比如一个句子
S
S
S 由若干个字
w
1
,
w
2
,
…
,
w
n
w_{1},w_{2},\ldots,w_{n}
w1,w2,…,wn 组成,则句子
S
S
S 是哟个正常句子的可能性为:
P
(
S
)
=
P
(
w
1
,
w
2
,
…
,
w
n
)
P(S)=P(w_{1},w_{2},\ldots,w_{n})
P(S)=P(w1,w2,…,wn)
即
P
(
w
1
,
w
2
,
w
3
∼
w
n
)
=
P
(
w
1
)
∗
P
(
w
2
∣
w
1
)
∗
P
(
w
n
∣
w
1
,
w
2
∼
w
n
−
1
)
{P}({w_1},{w_2},{w_3}\sim{w_n}) = P(w_1)*P(w_2 | w_1)*P(w_n|w_1,w_2\sim w_{n-1})
P(w1,w2,w3∼wn)=P(w1)∗P(w2∣w1)∗P(wn∣w1,w2∼wn−1)
这样看来并没有什么问题,但是每个字出现的几率都是依赖它之前的所有字出现过的几率来计算,这个计算量是指数级上涨的
引用数学之美第二版中话,即谷歌翻译中也仅仅往前推导了4个字,一般实际中往前推导3个字就已经可以满足需求了。
2.1 二元模型
也就是下一个字的出现只与当前这个字有关。
P ( S ) = P ( w 1 ) ⋅ P ( w 2 ∣ w 1 ) ⋅ P ( w 3 ∣ w 2 ) ⋯ P ( w i ∣ w i − 1 ) ⋯ P ( w n ∣ w n − 1 ) P(S)=P(w_1)\cdot P(w_2|w_1)\cdot P(w_3|w_2)\cdots P(w_i|w_{i-1})\cdots P(w_n|w_{n-1}) P(S)=P(w1)⋅P(w2∣w1)⋅P(w3∣w2)⋯P(wi∣wi−1)⋯P(wn∣wn−1)
根据条件概率公式可得
P ( w i ∣ w i − 1 ) = P ( w i − 1 , w i ) P ( w i − 1 ) P(w_{i}|w_{i-1})=\frac{P(w_{i-1},w_{i})}{P(w_{i-1})} P(wi∣wi−1)=P(wi−1)P(wi−1,wi)
根据大数定理得这里用到了大数定理,也就是说这个模型要有足够多的数据才有较好的效果。
P ( w i − 1 , w i ) ≈ C ( w i − 1 , w i ) C P ( w i − 1 ) ≈ C ( w i − 1 ) C \begin{aligned}P(w_{i-1},w_i)&\approx\frac{C(w_{i-1},w_i)}{C}\\\\P(w_{i-1})&\approx\frac{C(w_{i-1})}{C}\end{aligned} P(wi−1,wi)P(wi−1)≈CC(wi−1,wi)≈CC(wi−1)
也即
P ( w i ∣ w i − 1 ) ≈ C ( w i − 1 , w i ) C ( w i − 1 ) P(w_{i}|w_{i-1})\approx\frac{C(w_{i-1},w_{i})}{C(w_{i-1})} P(wi∣wi−1)≈C(wi−1)C(wi−1,wi)
2.2 三元模型
下一个字的出现依赖于前两个字。
则句子概率可以表示为:
P ( S ) = P ( w 1 , w 2 ) ∏ i = 3 n P ( w i ∣ w i − 2 , w i − 1 ) P(S)=P(w_1,w_2)\prod_{i=3}^{n}P(w_i|w_{i-2},w_{i-1}) P(S)=P(w1,w2)i=3∏nP(wi∣wi−2,wi−1)
根据条件概率公式,可以得到:
P ( w i ∣ w i − 2 , w i − 1 ) = P ( w i − 2 , w i − 1 , w i ) P ( w i − 2 , w i − 1 ) P(w_i|w_{i-2},w_{i-1})=\frac{P(w_{i-2},w_{i-1},w_i)}{P(w_{i-2},w_{i-1})} P(wi∣wi−2,wi−1)=P(wi−2,wi−1)P(wi−2,wi−1,wi)
同样根据大数定理,可以近似为:
P ( w i − 2 , w i − 1 , w i ) ≈ C ( w i − 2 , w i − 1 , w i ) C P ( w i − 2 , w i − 1 ) ≈ C ( w i − 2 , w i − 1 ) C \begin{aligned} P(w_{i-2},w_{i-1},w_i)&\approx \frac{C(w_{i-2},w_{i-1},w_i)}{C}\\ P(w_{i-2},w_{i-1})&\approx \frac{C(w_{i-2},w_{i-1})}{C} \end{aligned} P(wi−2,wi−1,wi)P(wi−2,wi−1)≈CC(wi−2,wi−1,wi)≈CC(wi−2,wi−1)
将上式代入可得:
P
(
w
i
∣
w
i
−
2
,
w
i
−
1
)
≈
C
(
w
i
−
2
,
w
i
−
1
,
w
i
)
C
(
w
i
−
2
,
w
i
−
1
)
P(w_i|w_{i-2},w_{i-1})\approx \frac{C(w_{i-2},w_{i-1},w_i)}{C(w_{i-2},w_{i-1})}
P(wi∣wi−2,wi−1)≈C(wi−2,wi−1)C(wi−2,wi−1,wi)# 3 总结
以上就是笔者在学习
N
N
N 语法模型时的理解,后续还有实验,会继续更新。
(PS:一元语法模型就是计算单个单词的概率(等价于单词之间都没有关系,两两之间独立),在这里就不做多余的展示了😁)
4 参考
https://www.au92.com/post/markov-assumption/#%E9%A9%AC%E5%B0%94%E5%8F%AF%E5%A4%AB%E5%81%87%E8%AE%BE%E6%98%AF%E4%BB%80%E4%B9%88
另外笔者也使用了Claude2进行了问答