HMM模型及其在中文分词中的应用

  • 马尔可夫模型
    • 有限状态集 s s s
    • 初始时刻的状态概率分布 π \pi π
    • 状态转移概率矩阵 A A A
    • 马尔可夫模型实例
  • 隐马尔可夫模型
    • 观测集 V V V
    • 发射概率矩阵 B B B
    • HMM的三个基本假设
    • 一个HMM的实例
    • HMM与中文分词

隐马尔可夫模型是一种概率模型,用于解决序列预测问题,可以对序列数据中的上下文进行建模。HMM用于描述含有隐含未知参数的马尔可夫过程。在HMM中,有两种类型的节点,分别为观测序列与状态序列。状态序列是不可见的,它们的值是需要通过对观测序列进行推断而得到的。很多现实应用可以抽象为此类问题,如语音识别、分词、词性标注、计算机视觉中的动作识别等。HMM在这些问题中得到了成功的应用。

马尔可夫模型

马尔可夫模型描述的是一类典型的随机过程,即系统的状态随时间变化而随机变化的过程。马尔可夫模型由有限状态集 s s s初始时刻的状态概率分布 π \pi π状态转移概率矩阵 A A A 三部分组成,有了这三部分,马尔可夫模型可以计算出系统每一时刻处于各种状态的概率。

下面我们先具体介绍一下这三部分:

有限状态集 s s s

设一个系统有有限个状态 S = { s 1 , s 2 , . . . , s N } S=\{s_1,s_2,...,s_N\} S={s1​,s2​,...,sN​}。随着时间推移,该系统将从某一状态转移到另一状态。从1时刻开始到T时刻为止,系统所有时刻的状态值构成一个随机变量序列,即状态序列,如下所示:

Q = q 1 , q 2 , . . . , q t Q=q_1,q_2,...,q_t Q=q1​,q2​,...,qt​

其中, q i q_i qi​表示第 i i i时刻系统的状态,其具体取值未知,但应在上述有限个状态 S = { s 1 , s 2 , . . . , s N } S=\{s_1,s_2,...,s_N\} S={s1​,s2​,...,sN​}中取值。

初始时刻的状态概率分布 π \pi π

初始时刻的状态概率分布为:

π = ( π 1 , π 2 , . . . , π N ) , 1 ≤ i ≤ N \pi=(\pi_1,\pi_2,...,\pi_N),1 \le i \le N π=(π1​,π2​,...,πN​),1≤i≤N

其中, π = ( π 1 , π 2 , . . . , π N ) \pi=(\pi_1,\pi_2,...,\pi_N) π=(π1​,π2​,...,πN​)满足下列各条件:

π i = P ( q 1 = s i ) \pi_i=P(q_1=s_i) πi​=P(q1​=si​)

π i ≥ 0 \pi_i \ge 0 πi​≥0

∑ i = 0 N π i = 1 \sum\limits_{i=0}^N \pi_i =1 i=0∑N​πi​=1

状态转移概率矩阵 A A A

系统在不同时刻可以处于同一种状态,但在任一时刻只能有一种状态。不同时刻的状态之间是有关系的。时刻t的状态由它之前时刻的状态决定,即当前时刻t处于状态的概率取决于其在时间1,2,…,t-1时刻的状态,系统状态的条件概率如下所示:

P ( q t ∣ q 1 , q 2 , . . . , q t − 1 ) P(q_t|q_1,q_2,...,q_{t-1}) P(qt​∣q1​,q2​,...,qt−1​)

上式中的条件概率要考虑之前所有时刻的状态,计算起来较为复杂,为此需要进行简化。如果假设t时刻的状态只与t-1时刻的状态有关,与更早的时刻无关,则上式的条件概率可简化为如下所示。

P ( q t ∣ q 1 , q 2 , . . . , q t − 1 ) = P ( q t ∣ q t − 1 ) P(q_t|q_1,q_2,...,q_{t-1})=P(q_t|q_{t-1}) P(qt​∣q1​,q2​,...,qt−1​)=P(qt​∣qt−1​)

上式称为一阶马尔可夫假设,满足这一假设的马尔可夫模型称为一阶马尔可夫模型。

设 t − 1 t-1 t−1时刻的状态为 s j s_j sj​, t t t时刻的状态为 s j s_j sj​,条件概率 P ( q t ∣ q t − 1 ) P(q_t|q_{t-1}) P(qt​∣qt−1​)构成一个 N × N N \times N N×N的矩阵 A A A(如下图,从 t − 1 t-1 t−1时刻到 t t t 时刻的状态转移共有 N × N N \times N N×N种可能),称为状态概率转移矩阵,具体可表示为:

A = ( P ( q t = s 1 ∣ q t − 1 = s 1 ) P ( q t = s 2 ∣ q t − 1 = s 1 ) … P ( q t = s N ∣ q t − 1 = s 1 ) P ( q t = s 1 ∣ q t − 1 = s 2 ) P ( q t = s 2 ∣ q t − 1 = s 2 ) … P ( q t = s N ∣ q t − 1 = s 2 ) ⋮ ⋮ … ⋮ P ( q t = s 1 ∣ q t − 1 = s N ) P ( q t = s 2 ∣ q t − 1 = s N ) … P ( q t = s N ∣ q t − 1 = s N ) ) A= \begin{pmatrix} P(q_t=s_1|q_{t-1}=s_1) & P(q_t=s_2|q_{t-1}=s_1) & \dots & P(q_t=s_N|q_{t-1}=s_1) \\ P(q_t=s_1|q_{t-1}=s_2)& P(q_t=s_2|q_{t-1}=s_2) & \dots & P(q_t=s_N|q_{t-1}=s_2) \\ \vdots & \vdots & \dots & \vdots \\ P(q_t=s_1|q_{t-1}=s_N) & P(q_t=s_2|q_{t-1}=s_N) & \dots & P(q_t=s_N|q_{t-1}=s_N)\\ \end{pmatrix} A= ​P(qt​=s1​∣qt−1​=s1​)P(qt​=s1​∣qt−1​=s2​)⋮P(qt​=s1​∣qt−1​=sN​)​P(qt​=s2​∣qt−1​=s1​)P(qt​=s2​∣qt−1​=s2​)⋮P(qt​=s2​∣qt−1​=sN​)​…………​P(qt​=sN​∣qt−1​=s1​)P(qt​=sN​∣qt−1​=s2​)⋮P(qt​=sN​∣qt−1​=sN​)​ ​
为保证上述矩阵更为简洁,我们令

a i j = P ( q t = s j ∣ q t − 1 = s i ) a_{ij}=P(q_t=s_j|q_{t-1}=s_i) aij​=P(qt​=sj​∣qt−1​=si​)

则状态转移概率矩阵可进一步简写为:
A = ( a 11 a 12 … a 1 N a 21 a 22 … a 2 N ⋮ ⋮ … ⋮ a N 1 a N 2 … a N N ) = [ a i j ] N × N A= \begin{pmatrix} a_{11} & a_{12} & \dots & a_{1N} \\ a_{21} & a_{22} & \dots & a_{2N} \\ \vdots & \vdots & \dots & \vdots \\ a_{N1} & a_{N2} & \dots & a_{NN}\\ \end{pmatrix} =[a_{ij}]_{N \times N} A= ​a11​a21​⋮aN1​​a12​a22​⋮aN2​​…………​a1N​a2N​⋮aNN​​ ​=[aij​]N×N​
其中转移状态概率矩阵的元素要满足下列约束:

∑ j = 1 N a i j = 1 , a i j ≥ 0 \sum \limits_{j=1}^N a_{ij}=1,a_{ij} \ge 0 j=1∑N​aij​=1,aij​≥0
上式表示概率值必须在 [ 0 , 1 ] [0,1] [0,1]之间,无论t-1时刻的状态值是什么,在下一个时刻t一定会转向N个状态中的一个,因此它们的转移概率和必须为1。

马尔可夫模型实例

为了更好地理解,我们举一个简单的例子,假设:
(1)小明所在城市的天气有{晴天,阴天,雨天}三种情况;
(2)这个城市每天的天气情况,会和前一天的天气情况有点关系。譬如说,如果前一天是晴天,那么后一天是晴天的概率,就大于后一天是阴天或雨天的概率;
(3)小明所在的城市,一年四季的天气情况都差不多。
上述例子中小明城市所在的天气情况即可构成一个马尔可夫模型。
1、有限状态集为 S = { s 1 , s 2 , s 3 } = { 晴天,阴天,雨天 } S=\{s_1,s_2,s_3\}=\{晴天,阴天,雨天\} S={s1​,s2​,s3​}={晴天,阴天,雨天}
2、初始时刻的状态概率分布为:
π 1 = P ( q 1 = 晴天 ) = 0.2 \pi_1=P(q_1=晴天)=0.2 π1​=P(q1​=晴天)=0.2;
π 2 = P ( q 1 = 阴天 ) = 0.4 \pi_2=P(q_1=阴天)=0.4 π2​=P(q1​=阴天)=0.4;
π 3 = P ( q 1 = 雨天 ) = 0.4 \pi_3=P(q_1=雨天)=0.4 π3​=P(q1​=雨天)=0.4.
即: π = ( π 1 , π 2 , π 3 ) = ( 0.2 , 0.4 , 0.4 ) \pi=(\pi_1,\pi_2,\pi_3)=(0.2,0.4,0.4) π=(π1​,π2​,π3​)=(0.2,0.4,0.4)
3、状态转移概率矩阵为:
A = ( P ( q t = 晴 ∣ q t − 1 = 晴 ) P ( q t = 阴 ∣ q t − 1 = 晴 ) P ( q t = 雨 ∣ q t − 1 = 晴 ) P ( q t = 晴 ∣ q t − 1 = 阴 ) P ( q t = 阴 ∣ q t − 1 = 阴 ) P ( q t = 雨 ∣ q t − 1 = 阴 ) P ( q t = 晴 ∣ q t − 1 = 雨 ) P ( q t = 阴 ∣ q t − 1 = 雨 ) P ( q t = 雨 ∣ q t − 1 = 雨 ) ) = ( 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ) \begin{align} A&= \begin{pmatrix} P(q_t=晴|q_{t-1}=晴) & P(q_t=阴|q_{t-1}=晴) & P(q_t=雨|q_{t-1}=晴) \\ P(q_t=晴|q_{t-1}=阴)& P(q_t=阴|q_{t-1}=阴) & P(q_t=雨|q_{t-1}=阴) \\ P(q_t=晴|q_{t-1}=雨) & P(q_t=阴|q_{t-1}=雨) & P(q_t=雨|q_{t-1}=雨)\\ \end{pmatrix} \notag\\ &=\begin{pmatrix} 0.5 & 0.2 & 0.3 \\ 0.3& 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5 \\ \end{pmatrix} \notag \end{align} A​= ​P(qt​=晴∣qt−1​=晴)P(qt​=晴∣qt−1​=阴)P(qt​=晴∣qt−1​=雨)​P(qt​=阴∣qt−1​=晴)P(qt​=阴∣qt−1​=阴)P(qt​=阴∣qt−1​=雨)​P(qt​=雨∣qt−1​=晴)P(qt​=雨∣qt−1​=阴)P(qt​=雨∣qt−1​=雨)​ ​= ​0.50.30.2​0.20.50.3​0.30.20.5​ ​​
有了上述三部分,我们就可以来计算任意时刻处于某种状态下的概率,例如,我们可以使用一阶马尔可夫模型来计算未来三天天气序列为 “晴阴阴” 的概率:
P ( 晴阴阴 ) = P ( q 1 = 晴 , q 2 = 阴 , q 3 = 阴) = P ( q 1 = 晴 ) P ( q 2 = 阴 ∣ q 1 = 晴 ) P ( q 3 = 阴 ∣ q 2 = 阴) = 0.2 ⋅ 0.2 ⋅ 0.5 = 0.02 \begin{align} P(晴阴阴)&=P(q_1=晴,q_2=阴,q_3=阴)\notag \\ &=P(q_1=晴)P(q_2=阴|q_1=晴)P(q_3=阴|q_2=阴)\notag \\ &=0.2 \cdot 0.2 \cdot 0.5 \notag \\ &=0.02 \notag \end{align} P(晴阴阴)​=P(q1​=晴,q2​=阴,q3​=阴)=P(q1​=晴)P(q2​=阴∣q1​=晴)P(q3​=阴∣q2​=阴)=0.2⋅0.2⋅0.5=0.02​

隐马尔可夫模型

马尔可夫模型中的状态是可见的,而HMM的状态则是部分可见,可见的部分称为观测变量,不可见的部分称为状态变量。由于HMM中不同时刻的状态值之间,同一时刻的状态值和观测值之间,都存在概率关系,所以HMM不仅对对状态建模,而且对观测值建模。

HMM是用于描述由隐藏的状态序列和显性的观测序列组合而成的双重随机过程,它由五部分组成,分别为:有限状态集 s = { s 1 , s 2 , . . . , s N } s=\{s_1,s_2,...,s_N\} s={s1​,s2​,...,sN​}观测集 V = { v 1 , v 2 , . . . , v M } V=\{v_1,v_2,...,v_M\} V={v1​,v2​,...,vM​}初始时刻的状态概率分布 π \pi π状态转移概率矩阵 A A A发射概率矩阵 B B B

其中,有限状态集 s s s初始时刻的状态概率分布 π \pi π状态转移概率矩阵 A A A 的定义与马尔可夫模型相同,不再赘述。只介绍一下观测集 V V V发射概率矩阵 B B B

观测集 V V V

HMM中可以观测到的部分称为观测变量,其取值来自有限的观测集 V = { v 1 , v 2 , . . . , v M } V=\{v_1,v_2,...,v_M\} V={v1​,v2​,...,vM​}。任一时刻的观测值均来自于该观测集,从1时刻开始到T时刻为止,系统所有时刻的观测值构成一个随机变量序列,即观测序列,如下所示:

O = o 1 , o 2 , . . . , o T O=o_1,o_2,...,o_T O=o1​,o2​,...,oT​

发射概率矩阵 B B B

在HMM中,同一时刻的状态值和观测值之间,都存在概率关系。对于任一时刻t,从状态 s j s_j sj​观察到 v k v_k vk​的概率记为:

P ( o t = v k ∣ q t = s j ) P(o_t=v_k|q_t=s_j) P(ot​=vk​∣qt​=sj​)

由于每一个状态下都会有 M M M个观测值,所以上述概率共有 N × M N \times M N×M个,将这些概率以矩阵的形式排列,即可得到发射概率矩阵 B B B:

B = ( P ( o t = v 1 ∣ q t = s 1 ) P ( o t = v 2 ∣ q t = s 1 ) … P ( o t = v M ∣ q t = s 1 ) P ( o t = v 1 ∣ q t = s 2 ) P ( o t = v 2 ∣ q t = s 2 ) … P ( o t = v M ∣ q t = s 2 ) ⋮ ⋮ … ⋮ P ( o t = v 1 ∣ q t = s N ) P ( o t = v 2 ∣ q t = s N ) … P ( o t = v M ∣ q t = s N ) ) B= \begin{pmatrix} P(o_t=v_1|q_t=s_1) & P(o_t=v_2|q_t=s_1) & \dots & P(o_t=v_M|q_t=s_1) \\ P(o_t=v_1|q_t=s_2)& P(o_t=v_2|q_t=s_2) & \dots & P(o_t=v_M|q_t=s_2) \\ \vdots & \vdots & \dots & \vdots \\ P(o_t=v_1|q_t=s_N) & P(o_t=v_2|q_t=s_N) & \dots & P(o_t=v_M|q_t=s_N)\\ \end{pmatrix} B= ​P(ot​=v1​∣qt​=s1​)P(ot​=v1​∣qt​=s2​)⋮P(ot​=v1​∣qt​=sN​)​P(ot​=v2​∣qt​=s1​)P(ot​=v2​∣qt​=s2​)⋮P(ot​=v2​∣qt​=sN​)​…………​P(ot​=vM​∣qt​=s1​)P(ot​=vM​∣qt​=s2​)⋮P(ot​=vM​∣qt​=sN​)​ ​
为保证上述矩阵尽可能简洁,我们令

P ( o t = v k ∣ q t = s j ) = b j ( v k ) P(o_t=v_k|q_t=s_j)=b_j(v_k) P(ot​=vk​∣qt​=sj​)=bj​(vk​)

则发射概率矩阵 B B B为:

B = ( b 1 ( v 1 ) b 1 ( v 2 ) … b 1 ( v M ) b 2 ( v 1 ) b 2 ( v 2 ) … b 2 ( v M ) ⋮ ⋮ … ⋮ b N ( v 1 ) b N ( v 2 ) … b N ( v M ) ) = [ b j ( v k ) ] N × M , 1 ≤ k ≤ M , 1 ≤ j ≤ N B= \begin{pmatrix} b_1(v_1) & b_1(v_2) & \dots & b_1(v_M) \\ b_2(v_1) & b_2(v_2) & \dots & b_2(v_M) \\ \vdots & \vdots & \dots & \vdots \\ b_N(v_1) & b_N(v_2) & \dots & b_N(v_M)\\ \end{pmatrix} =[b_j(v_k)]_{N \times M}, 1\le k \le M,1\le j \le N B= ​b1​(v1​)b2​(v1​)⋮bN​(v1​)​b1​(v2​)b2​(v2​)⋮bN​(v2​)​…………​b1​(vM​)b2​(vM​)⋮bN​(vM​)​ ​=[bj​(vk​)]N×M​,1≤k≤M,1≤j≤N

HMM的三个基本假设

1、马尔可夫假设:HMM在任意时刻t的状态只依赖于其前一时刻t-1的状态,而与其他更早时刻的状态无关;
2、齐次性假设:状态转移概率矩阵与时间无关。即所有时刻共享同一个状态转移矩阵;
3、观测独立性假设:当前时刻的观察值,仅依赖于当前时刻的状态值。

一个HMM的实例

为了更好的理解HMM,我们沿用上面小明与天气的例子(注:此例子来自于知乎文章《NLP硬核入门-隐马尔科夫模型HMM》)。假设:
(1)小明所在城市的天气有{晴天,阴天,雨天}三种情况,小明每天的活动有{宅,打球}两种选项;
(2)作为小明的朋友,我们只知道他每天参与了什么活动,而不知道他所在城市的天气是什么样的;
(3)这个城市每天的天气情况,会和前一天的天气情况有点关系。譬如说,如果前一天是晴天,那么后一天是晴天的概率,就大于后一天是阴天或雨天的概率 (马尔科夫假设)
(4)小明所在的城市,一年四季的天气情况都差不多 (齐次性假设)
(5)小明每天会根据当天的天气情况,决定今天进行什么样的活动 (观测独立性假设)
(6)我们想通过小明的活动,猜测他所在城市的天气情况。

那么,城市天气情况和小明的活动选择,就构成了一个隐马尔科夫模型HMM:
(1)在该例子中,小明的活动是可见的,即观测变量。有限观测集为 V = { 宅,打球 } = { v 1 , v 2 } V=\{宅,打球\}=\{v_1,v_2\} V={宅,打球}={v1​,v2​};
(2)城市的天气是不可见的,即状态变量。有限状态集为 S = { 晴,阴,雨 } = { s 1 , s 2 , s 3 } S=\{晴,阴,雨\}=\{s_1,s_2,s_3\} S={晴,阴,雨}={s1​,s2​,s3​};
(3)初始时刻的概率分布同上例,依然为:

π = ( π 1 , π 2 , π 3 ) = ( 0.2 , 0.4 , 0.4 ) \pi=(\pi_1,\pi_2,\pi_3)=(0.2,0.4,0.4) π=(π1​,π2​,π3​)=(0.2,0.4,0.4);

(4)转移状态概率矩阵也同上例,为
A = ( 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ) \begin{align} A=\begin{pmatrix} 0.5 & 0.2 & 0.3 \\ 0.3& 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5 \\ \end{pmatrix} \notag \end{align} A= ​0.50.30.2​0.20.50.3​0.30.20.5​ ​​
(5)发射概率矩阵为:
B = ( P ( o t = 宅 ∣ q t = 晴 ) P ( o t = 打球 ∣ q t = 晴 ) P ( o t = 宅 ∣ q t = 阴 ) P ( o t = 打球 ∣ q t = 阴 ) P ( o t = 宅 ∣ q t = 雨 ) P ( o t = 打球 ∣ q t = 雨 ) ) = ( 0.5 0.5 0.4 0.6 0.7 0.3 ) B= \begin{pmatrix} P(o_t=宅|q_t=晴) & P(o_t=打球|q_t=晴) \\ P(o_t=宅|q_t=阴)& P(o_t=打球|q_t=阴) \\ P(o_t=宅|q_t=雨) & P(o_t=打球|q_t=雨) \\ \end{pmatrix} =\begin{pmatrix} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \\ \end{pmatrix} \notag B= ​P(ot​=宅∣qt​=晴)P(ot​=宅∣qt​=阴)P(ot​=宅∣qt​=雨)​P(ot​=打球∣qt​=晴)P(ot​=打球∣qt​=阴)P(ot​=打球∣qt​=雨)​ ​= ​0.50.40.7​0.50.60.3​ ​
注:在实际应用中,初始时刻的状态概率分布 π \pi π、状态转移概率矩阵 A A A和发射概率矩阵 B B B都是通过样本学习得到的,此处只是为了展示HMM模型的计算过程,所以直接给出了。

有了这五部分以后,我们可以根据小明的活动序列来预测城市的天气序列。例如,已知小明在三天内的活动序列为{宅,打球,宅},则其城市的天气序列最有可能是什么?

我们的求解思路是这样的:每一天的天气都有3种状态,那三天时间就应该有 3 3 = 27 3^3=27 33=27种组合,我们需要的是去计算在已知观测序列为{宅,打球,宅}时,概率最大的天气状态序列,此时,我们需要一共计算27次 (在此处我们可以发现,此计算过程是时刻t和状态数量N的指数组合,当t和N较大时,其计算量将十分巨大。所以对于HMM模型的求解,我们常常采用维特比算法,而不是直接计算!维特比算法我们将在下一篇文章中介绍。)

在此,我们简单计算一个状态序列的概率,即在观测序列为{宅,打球,宅}时,状态序列为{晴,晴,晴}的概率。

P ( 晴,晴,晴 ∣ 宅,打球,宅 ) = P ( 晴,晴,晴 , 宅,打球,宅 ) P ( 宅,打球,宅 ) P(晴,晴,晴|宅,打球,宅)=\frac{P(晴,晴,晴,宅,打球,宅)}{P(宅,打球,宅)} P(晴,晴,晴∣宅,打球,宅)=P(宅,打球,宅)P(晴,晴,晴,宅,打球,宅)​

由于小明的活动观测序列{宅,打球,宅}是已知的,所以 P ( 宅,打球,宅 ) P(宅,打球,宅) P(宅,打球,宅)是一个确定的数。那上式的概率我们可以简化为只计算 P ( 晴,晴,晴 , 宅,打球,宅 ) P(晴,晴,晴,宅,打球,宅) P(晴,晴,晴,宅,打球,宅)的概率。

P ( 晴,晴,晴 , 宅,打球,宅 ) = P ( q 1 = 晴 ) P ( q 2 = 晴 ∣ q 1 = 晴 ) P ( q 3 = 晴 ∣ q 2 = 晴 ) P ( o 1 = 宅 ∣ q 1 = 晴 ) P ( o 2 = 打球 ∣ q 2 = 晴 ) P ( o 3 = 宅 ∣ q 3 = 晴 ) = 0.2 ⋅ 0.5 ⋅ 0.5 ⋅ 0.5 ⋅ 0.5 ⋅ 0.5 = 0.00625 \begin{align} P(晴,晴,晴,宅,打球,宅)&=P(q_1=晴)P(q_2=晴|q_1=晴)P(q_3=晴|q_2=晴)P(o_1=宅|q_1=晴)P(o_2=打球|q_2=晴)P(o_3=宅|q_3=晴) \notag \\ &=0.2 \cdot 0.5 \cdot 0.5 \cdot 0.5 \cdot 0.5 \cdot 0.5 \notag \\ &=0.00625 \end{align} P(晴,晴,晴,宅,打球,宅)​=P(q1​=晴)P(q2​=晴∣q1​=晴)P(q3​=晴∣q2​=晴)P(o1​=宅∣q1​=晴)P(o2​=打球∣q2​=晴)P(o3​=宅∣q3​=晴)=0.2⋅0.5⋅0.5⋅0.5⋅0.5⋅0.5=0.00625​​

注:此处公式的由来是根据概率论与数理统计中的概率乘法公式 P ( A 1 A 2 A 3 A 4 ) = P ( A 1 ) P ( A 2 ∣ A 1 ) P ( A 3 ∣ A 2 A 1 ) P ( A 4 ∣ A 3 A 2 A 1 ) P(A_1A_2A_3A_4)=P(A_1)P(A_2|A_1)P(A_3|A_2A_1)P(A_4|A_3A_2A_1) P(A1​A2​A3​A4​)=P(A1​)P(A2​∣A1​)P(A3​∣A2​A1​)P(A4​∣A3​A2​A1​),可以发现这个乘法公式和我们的计算公式是有区别的,这主要是因为我们题目中的设定(也就是HMM的三个基本假设)。
(1)当天的天气只与前一天的天气有关,所以 P ( q 3 = 晴 ∣ q 2 = 晴 , q 1 = 晴 ) = P ( q 3 = 晴 ∣ q 2 = 晴 ) P(q_3=晴|q_2=晴,q_1=晴)=P(q_3=晴|q_2=晴) P(q3​=晴∣q2​=晴,q1​=晴)=P(q3​=晴∣q2​=晴) ;
(2)小明活动的选择只与当天的天气有关,而与前面的天气无关,所以 P ( o 1 = 宅 ∣ q 3 = 晴 , q 2 = 晴 , q 1 = 晴 ) = P ( o 1 = 宅 ∣ q 1 = 晴 ) P(o_1=宅|q_3=晴,q_2=晴,q_1=晴)=P(o_1=宅|q_1=晴) P(o1​=宅∣q3​=晴,q2​=晴,q1​=晴)=P(o1​=宅∣q1​=晴)

HMM与中文分词

中文分词可以看作是中文的标注问题。标注问题是给定观测序列预测其对应的标记序列。下面以中文分词问题为例,介绍HMM如何用于中文标注。

(1)对于句子“我是中华人民共和国国民”,在这里观测序列 为“我是中华人民共和国国民”,每个字为每个时刻的观测值。

(2)状态序列为标注的结果,每个时刻的状态值有4种情况{B,M,E,S},其中B代表该字是起始位置的字,M代表中间位置的字,E代表末尾位置的字,S代表能够单独成字的字。

(3)对待分词语句进行序列标注,如果得到状态序列Q为{S S B E B M E},则有“我/S 是/S 一/B 位/E 程/B 序/M 员/E”。

(4)得到了这个标注结果后,即可得到分词结果。遇到S,则为一个单字词,遇到B,则为一个词的开始,直到遇到下一个E,则为一个词的结尾。

(5)这样句子“我是中华人民共和国国民”的分词结果为“我/是/中华人民共和国/国民”。

我们进一步将上述过程概括,就可以得到应用HMM进行中文分词的步骤:
1、根据已有的句子,将其所有可能的标注序列罗列出来;
2、计算在现有句子的条件下,所有可能标注序列的概率;
3、选择概率最大的标注序列,按照该标注序列进行分词,即为HMM分词结果。

HMM模型及其在中文分词中的应用相关推荐

  1. 中文分词中的战斗机-jieba库

    英文分词的第三方库NLTK不错,中文分词工具也有很多(盘古分词.Yaha分词.Jieba分词等).但是从加载自定义字典.多线程.自动匹配新词等方面来看. 大jieba确实是中文分词中的战斗机. 请随意 ...

  2. 基于python中jieba包的中文分词中详细使用

    基于python中jieba包的中文分词中详细使用(一) 01.前言 之前的文章中也是用过一些jieba分词但是基本上都是处于皮毛,现在就现有的python环境中对其官方文档做一些自己的理解以及具体的 ...

  3. HMM、Viterbi与中文分词

    基于实际工作经验和网络.书籍资料查询,记录的学习笔记.主要关于中文分词中HMM(隐马尔可夫模型).Viterbi算法及其在中文分词中的应用. 前言 在处理题库去重采用了关键词提取+simhash的办法 ...

  4. 基于python中jieba包的中文分词中详细使用(一)

    文章目录 基于python中jieba包的中文分词中详细使用(一) 01.前言 02.jieba的介绍 02.1 What 02.2特点 02.3安装与使用 02.4涉及到的算法 03.主要功能 03 ...

  5. 基于python中jieba包的中文分词中详细使用(二)

    文章目录 基于python中jieba包的中文分词中详细使用(二) 01.前言 02.关键词提取 02.01基于TF-IDF算法的关键词提取 02.02词性标注 02.03并行分词 02.04Toke ...

  6. 中文分词最佳记录刷新了,两大模型分别解决中文分词及词性标注问题丨已开源...

    伊瓢 发自 中关村 量子位 报道 | 公众号 QbitAI 中文分词的最佳效果又被刷新了. 在今年的ACL 2020上,来自创新工场大湾区人工智能研究院的两篇论文中的模型,刷新了这一领域的成绩. WM ...

  7. 中文分词_中文分词最佳纪录刷新,两大模型分别解决中文分词及词性标注问题...

    伊瓢 发自 中关村 量子位 报道 | 公众号 QbitAI 中文分词的最佳效果又被刷新了. 在今年的ACL 2020上,来自创新工场大湾区人工智能研究院的两篇论文中的模型,刷新了这一领域的成绩. WM ...

  8. 深度学习核心技术精讲100篇(二十四)-简单谈下深度学习在中文分词中的应用

    前言 随着深度学习的普及,有越来越多的研究应用新模型到中文分词上,让人直呼"手快有,手慢无".不过这些神经网络方法的真实水平如何?具体数值多少?以Sighan05中的PKU数据集为 ...

  9. 中文分词中的新词发现地点切分等问题

    在网上看了别人写的,感觉挺好,收录下. [url]http://blog.sina.com.cn/s/blog_64d0b03c0101bcxk.html[/url] 中文分词做为自然语言处理的第一工 ...

最新文章

  1. BCH接下来如何走?且看这场大会传达了什么思想
  2. 常见网络游戏同步方式
  3. ant 走马灯面板指示显示不出来_触摸屏报警信息显示设置方法
  4. Angular中父子组件传值@Input @Output @ViewChild最全面最简单的总结
  5. 轨迹分析_解析几何中的轨迹问题中经典问题,有详细分析及其解答
  6. python购物车代码_python简单商城购物车实例代码
  7. skycut刻字机软件控制选择
  8. 直角三角形用计算机怎么做,‎App Store 上的“直角三角形计算器”
  9. java实现百度识图后台
  10. 中国首个证券纠纷示范判决机制的规定在沪发布
  11. python实现论文查重系统_python 手把手教你基于搜索引擎实现文章查重
  12. Win10锁屏壁纸文件夹Assets无文件问题的解决方法
  13. 市场调研报告-全球与中国AI加速器的渗透和路线市场现状及未来发展趋势
  14. 高德数据下载器 POI,道路(含路况信息),切片数据
  15. r生成新的dataframe_R语言中数据框的定义与使用
  16. vhdl中变量(variable)和信号(signal)的区别
  17. 未来教育计算机二级为什么分数很低,为什么计算机二级office通过率不足30%很多大学童鞋生依然在考...
  18. 汽车 Flexry总线-笔记
  19. C语言--gets、puts、scanf、printf函数详细用法与区别(小白也能看懂,看不懂私信骂我)
  20. DNF手游多开搬砖赚RMB攻略

热门文章

  1. 办理北京市户口的流程
  2. 股票日回易略(附源码
  3. GitHub+Hexo搭建自己的Blog之(3)-主题配置(Next)
  4. OpenGL之gult/freeglut/glew/glfw/glad的联系与区别
  5. JavaScript 创建对象---寄生构造函数模式
  6. 好用!强大的词云图文字云制作神器!可永久使用,快速出图,支持自动分词关键词筛选词频统计!
  7. 【转】高密度数字KVM集中管控解决方案
  8. yum本地源 baseurl repodata repomd.xml comps.xml(一)
  9. 3D建模:别被骗了,你以为建模师工资真的能年薪50W吗?
  10. Android开启telnet服务