首页 > 代码库 > 隐马尔可夫模型(HMM)中文分词

隐马尔可夫模型(HMM)中文分词

1. 马尔可夫模型

  如果一个系统有n个有限状态$S=\{s_{1} , s_{2} ,\dots s_{n}\}$,随着时间推移,该系统将从某一状态转移到另一状态,$Q=\{q_{1},q_{2},\dots q_{n}\}$位一个随机变量序列,该序列中的变量取值为状态集S中的某个状态,其中$q_{t}$表示系统在时间t的状态。那么:系统在时间t处于状态$s_{j}$的概率取决于其在时间1,2, $\dots$  t-1的状态,该概率为:

$$P(q_{t} = s_{j} | q_{t-1} = s_{i}, q_{t-2} = s_{k} \dots)$$ 

如果在特定条件下,系统在时间t的状态只与其在时间t-1的状态相关,即:
$$P(q_{t} = s_{j} | q_{t-1} = s_{i}, q_{t-2} = s_{k}\dots) = P(q_{t} = s_{j} | q_{t-1} = s_{i})$$
则该系统构成一个离散的一阶马尔可夫链。
进一步,如果只考虑上述公式独立于时间t的随机过程:
$$P(q_{t} = s_{j} | q_{t-1} = s_{i})= a_{ij} , 1 \leq i,j \leq N$$
该随机过程为马尔可夫模型。其中,状态转移概率aij 必须满足以下条件:
$$a_{ij} \geq 0 , \sum_{j=1}^{N}{a_{ij} = 1} $$

2.隐马尔可夫模型  

  相对于马尔可夫模型,在隐马尔可夫模型中,我们不知道模型经过的状态序列,只知道状态的概率函数,即,观察到的事件是状态的随机函数,因此,该模型是一个双重的随机过程。其中,模型的状态转换过程是不可观察的,即隐蔽的,可观察事件的随机过程是隐蔽的观察状态转换过程的随机函数。隐马尔可夫模型可以用五个元素来描述,包括2个状态集合和三个概率矩阵:

  (1) 隐含状态 S

  这些状态之间满足马尔可夫性质,是马尔可夫模型中实际所隐含的状态。这些状态通常无法通过直接观测而得到。(例如$S_{1},S_{2},S_{3}$等等)

  (2)可观测状态 O

  在模型中与隐含状态相关联,可通过直接观测而得到。(例如$O_{1},O_{2},O_{3}$等等,可观测状态的数目不一定要和隐含状态的数目一致。

  (3)初始状态概率矩阵 π 

  表示隐含状态在初始时刻t=1的概率矩阵,(例如t=1时,$P(S_{1})=p_{1},P(S_{2})=P_{2},P(S_{3})=p_{3}$,则初始状态概率矩阵 π=[ p1 p2 p3 ]

  (4)隐含状态转移概率矩阵A

  描述了HMM模型中各个状态之间的转移概率。其中$A_{ij} = P( S_{j} | S_{i} ),1 \leq i,,j \leq N$, 表示在 t 时刻、状态为 $S_{i}$ 的条件下,在 t+1 时刻状态是 $S_{j}$ 的概率

  (5) 观测状态转移概率矩阵B

  令N代表隐含状态数目,M代表可观测状态数目,则 $B_{ij} = P( O_{i} | S_{j} ), 1 \leq i \leq M,1 \leq j \leq N$ 表示在 t 时刻、隐含状态是 $s_{j}$条件下,观察状态为 $O_{i}$ 的概率。

3.维特比算法

  在Hmm中存在这样一个问题,给定一个观察序列$O=\{O_{1},O_{2}\dots O_{T}\}$和模型$\mu = (A,B,\ pi)$,如何快速有效地选择在一定意义下“最优”的状态序列$Q={q_{1},q_{2} \dots q_{t}}$,使得该状态序列最好的解释观察序列。维特比算法就是解决这个问题的一个有效方法,下面请看详细介绍。维特比变量$ \delta _{t} (i)$是在时间t时,Hmm沿着某一条路径达到状态$s_{i}$,并输出观察序列$O_{1}O_{2} \dots O_{t}$的最大概率:
$$\delta _{t} (i) = \max \limits_{q_{1},q_{2} \dots q_{t-1}} P(q_{1},q_{2},\dots,q_{t}=s_{i},O_{1},O_{2}, \dots O_{t} | \mu)$$
其中,$\delta _{t} (i)$有如下递归关系:
$$\delta _{t+1} (i) = \max_{j}[\delta _{j} \cdot a_{ij}] \cdot b_{i}(O_{t+1})$$
  维特比算法(Viterbi algorithm):
  步1 初始化:
  $$\delta _{1} (i) = \pi _{i}b_{i}(O_{1}), 1 \leq i \leq N$$
  $$ \psi _{1} (i) = 0$$
  步2 归纳计算:
  $$\delta _{t} (j) = \max_{1 \leq i \leq N}[\delta _{i-1}(i) \cdot a_{ij}] \cdot b_{j}(O_{t}),2 \leq t \leq T, 1 \leq j \leq N$$
  $$\psi _{t}(j) =  argmax _{1 \leq i \leq N}[\delta _{t-1}(i) \cdot a_{ij}] \cdot b_{j}(O_{t}),2 \leq t \leq T, 1 \leq i \leq N$$
  步3 终结:
  $$\widehat Q_{T} =  argmax_{1 \leq i \leq N}[\delta_{T}(i)]$$
  $$ \widehat P(\widehat Q_{T}) = \max_{1 \leq i \leq N}[\delta_{T}(i)]$$
  步4 路径回溯:
  $$ \widehat q_{t} = \psi_{t+1}(\widehat q_{t+1}),t=T-1,,T-2 \dots , 1$$ 

4.HMM用于中文分词

  在将HMM用于中文分词中,可以采用四个隐含状态,分别为‘S‘,‘B‘,‘M‘,‘E‘,分别表示为单字成词,词组的开头,词组的中间,词组的结尾。通过标注好的分词训练集,可以得到HMM的各个参数,然后使用维特比算法来解释测试集,得到分词结果,源码在可参考 HMM实现中文分词

  本次实验中所使用的训练文件,测试文件,及词典等是由国际计算语言学会中文语言处理小组所主办的国际中文语言处理竞赛中所使用的数据。这份数据中,主要包含了训练文件,测试文件,词典以及一个评分脚本。特别需要说明的是这些中文语料库分别由台湾中央研究院,香港城市大学,北京大学以及微软亚洲研究院提供。具体可参考 中文分词入门之资源

 

隐马尔可夫模型(HMM)中文分词