基于实际工作经验和网络、书籍资料查询,记录的学习笔记。主要关于中文分词中HMM(隐马尔可夫模型)、Viterbi算法及其在中文分词中的应用。
前言
在处理题库去重采用了关键词提取+simhash的办法。而提取关键词之前,需要先进行中文分词。一种基本方法是基于词库进行分词,但显然词库是不可能齐全的,这时,为了确认对于未被记入词库的词(未登录词)如别被处理,就需要有一定了解,才能准确应对意外的分词情况。本文为作者在进行题库去重过程中,对中文分词的学习经验总结,在此积累,以期未后来者参考学习、彼此交流。
本篇介绍HMM(隐马尔可夫模型)和Viterbi(维特必)算法,主要面向对概率论不熟悉而希望对中文分词工具有更进一步了解的同学,期待忘为读者深入了解其他相关算法提供学习方式思路。同时,也期待专业人士能提供更进一步的意见或建议。
同时,希望数学不好的同学对此也不必有恐惧心理。因为作者也不是对此特别熟悉,会结合个人的学习过程和实例,尽可能简单的介绍HMM、Viterbi,以及它们与中文分词三者之间的关系。
正文
在正式介绍HMM之前,我们有必要先了解马尔可夫过程和马尔可夫链。
Markov process(马尔可夫过程)
一个性质: 当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态;换句话说,在给定现在状态时,它与过去状态(即该过程的历史路径)是条件独立的,那么此随机过程即具有马尔可夫性质
一个定义: 满足马尔可夫性质的过程称为马尔可夫过程
DTMC(离散马尔可夫链)
一个定义: 时间和状态都是离散的马尔可夫过程。
一个重要特性: 已知系统当前状态,则未来的演变不依赖于过去的演变。
一个泛化描述: 假设,当前时间是T,则T+1等于某个值的概率,仅与T相关,而与[0, T-1]中的所有值都无关(一阶马尔可夫链)。
P { X n + 1 = i n + 1 ∣ X 0 , X 1 , . . . , X n = i n } = P { X n + 1 ∣ X n = i n } P\{X_{n+1}=i_{n+1}\ |\ X_0,X_1,...,X_n=i_n\} = P\{X_{n+1}\ |\ X_n = i_n\} P{
Xn+1=in+1 ∣ X0,X1,...,Xn=in}=P{
Xn+1 ∣ Xn=in}
一个矩阵: 这个是其实是n步转移概率矩阵,详细讲解较为复杂,可以自行百度,不影响后文理解。
P = [ P 11 P 12 … P 1 n … P 21 P 22 … P 2 n … P 31 P 32 … P 3 n … ] P\ =\ \left[ \begin{array}{ccc} P_{11} & P_{12} & … & P_{1n} & … \\ P_{21} & P_{22} & … & P_{2n} & … \\ P_{31} & P_{32} & … & P_{3n} & … \end{array} \right ] P = ⎣⎡P11P21P31P12P22P32………P1nP2nP3n………⎦⎤
如此,先记住什么是马尔可夫过程和DTMC,后续再了解什么是HMM(隐马尔可夫模型)就容易了。
HMM(隐马尔可夫模型)
在正式介绍之前,我们先由一个句子作为实例。我们直接给定一个文本,按HMM给这个文本分词。
"我爱梅沙"
接下来我们按照HMM的过程进行分析。
-
对于句子中的字,我们定义起包含四种状态(隐含状态空间S):
- B——begin。表示该字为词的起始字
- M——middle。表示该字为词的中间字
- E——end。表示词语中的结束字
- S——single。表示单字成词
-
我们定义句子中,所有的字共同组成了一个观测值集合(观察状态),即:O = { 我, 爱, 梅, 沙 }。
-
当我们看到一个字(观察状态)时,它是BMES中某一个的概率,组成一个初始的概率矩阵(矩阵值已经基于海量文本统计求得)。对于任何字,转移到BMES中的概率都是一致的,因此该矩阵是1x4的概率矩阵(π向量/初始概率矩阵),在这里,矩阵如下:
{ "B":