NLP|贝叶斯定理
贝叶斯定理(Bayes' theorem)是概率论中的一个定理,它跟随机变量的条件概率以及边缘概率分布有关。贝叶斯定理(贝叶斯公式)能够告知我们如何利用新证据修改已有的看法。
通常,事件A在事件B(发生)的条件下的概率,与事件B在事件A(发生)的条件下的概率是不一样的。然而,这两者是有确定的关系的,贝叶斯定理就是这种关系的陈述。贝叶斯公式的一个用途在于通过已知的三个概率函数推出第四个。
贝叶斯定理贝叶斯定理背后想说的是:
实质在机器学习中,贝叶斯应用广泛,因为不少人认为贝叶斯定理和人脑的工作机制很像。比如在和对方聊天时,如果对方说出“虽然”两字,你大概会猜到,对方后面很可能说“可是”。我们的大脑看起来好像天生是在使用贝叶斯定理。
放到自然语言处理(NLP)中,我们看一个关于中文分词的例子。
以“学历史知识”为例来说明,使用正向最大匹配法, 我们把“学历史知识”从头到尾扫描匹配一遍,就被分成了“学历\史\知识”,很显然,这种分词不是我们想要的;如果我们使用反向
最大匹配法从尾到头扫描匹配一遍,那就会分成“学/历史/知识”,这才是我们想要的分词结果。
可以看出查字典法可以用来分词, 就会存在二义性,一种解决办法就是分别从头到尾和从尾到头匹配,在这个例子中,得到“学历\史\知识”和“学/历史/知识”,很显然,这两个分词都有“知识”,那么说明“知识”是正确的分词,然后就看“学历\史”和“学/历史”哪个是正确的?
从我们人的角度看,很自然想到“学/历史”是正确的,为什么呢?因为
- 在“学历\史”中“史”这个词单独出现的几率很小,在现实中我们几乎不会单独使用这个词;
- “学历”和“史”同时出现的概率也要小于“学”和“历史”同时出现的概率,所以“学/历史”这种分词将会胜出。
这只是我们大脑的猜测,有什么数学方法证明呢?有,那就是基于统计概率模型。
例子下面的事情就很简单了,对于每种分词计算一下p(S|A)p(A)这个值,然后取最大的,得到的就是最靠谱的分词结果。比如“学历史知识”(用S表示)可以分为如下两种(当然, 实际情况就不止两种情况了):
- “学历\史\知识”(用A表示, A1=学历, A2=史, A3=知识)
- “学/历史/知识”(用B表示, B1=学, B2=历史, B3=知识)
那么我们分别计算一下p(S|A)p(A)和p(S|B)p(B),哪个大,说明哪个就是好的分词结果。
题外话
但是p(S|A1, A2, … Ak)p(A1, A2, … Ak)这个公式并不是很好计算,p(S|A1, A2, … Ak)可以认为就是 1,因为由A1, A2, … Ak必然能生成S,那么剩下就是如何计算p(A1, A2, … Ak)
上面计算p(A1, A2, … Ak)的过程其实就是统计语言模型, 然而在实际系统中,由于性能等因素,很少使用语言模型来分词消歧, 而是使用序列标注、 共现和一些规则等方法来消歧。
参考资料:
- 怎样用非数学语言讲解贝叶斯定理
- 文本上的算法