维特比(viterbi)算法与中文词性标注(一)

隐马尔可夫模型(Hidden Markov Model,HMM)

马尔科夫假设

随机过程中各个状态 S t S_t St的概率分布,只与它的前一个状态 S t − 1 S_{t-1} St1有关,即
P ( S t ∣ S 1 , S 2 , S 3 , … , S t − 1 ) = P ( S t ∣ S t − 1 ) P(S_t|S_1,S_2,S_3,…,S_{t-1}) = P(S_t|S_{t-1}) P(StS1,S2,S3,,St1)=P(StSt1)
对于一些实际情况中的概率关系(比如天气预报)显然是不够合理的,但至少给出了一个相对准确的近似解

符合马尔科夫假设的随机过程称为马尔科夫过程,或马尔科夫链
维特比(viterbi)算法与中文词性标注(一)_第1张图片

上图中圆圈表示状态,圆圈间的箭头表示状态的转化,箭头的权值 P ( x i + 1 , t ∣ x i , j ) P(x_{i+1,t}|x_{i,j}) P(xi+1,txi,j)代表由状态 x i , j x_{i,j} xi,j向状态 x i + 1 , t {x_{i+1,t}} xi+1,t转移的概率,此处 x i , j x_{i,j} xi,j均取自同一个状态集合,之间互相转化。

隐马尔科夫链

在马尔科夫链的基础上引入隐马尔科夫链,任一时刻t的状态 S t S_t St是不可见的。观察者没法通过观察到状态序列 S 1 , S 2 , S 3 , … , S T S_1,S_2,S_3,…,S_T S1,S2,S3,,ST来进行推测。但是隐含马尔可夫模型在每个时刻t会输出一个符号 O t O_t Ot,而且 O t O_t Ot S t S_t St仅和 S t S_t St相关。

维特比(viterbi)算法与中文词性标注(一)_第2张图片

其中 P ( S 2 ∣ S 1 ) P(S_2|S_1) P(S2S1)代表由 S 1 S_1 S1转化为 S 2 S_2 S2的概率, P ( O 1 ∣ S 1 ) P(O_1|S_1) P(O1S1)代表在状态 S 1 S_1 S1时,输出 O 1 O_1 O1的概率

隐马尔科夫链的五元组

HMM模型的五元组 ( S , O , Π , A , B ) (S,O,\Pi,A,B) (S,O,Π,A,B)

状态值集合 S = { S 1 , S 2 , . . . , S n } S=\{S_1,S_2,...,S_n\} S={S1,S2,...,Sn}

观察值集合 O = { O 1 , O 2 , . . . , O m } O=\{O_1,O_2,...,O_m\} O={O1,O2,...,Om}

初始状态序列 Π = { P 1 , P 2 , . . . , P n } \Pi=\{P_1,P_2,...,P_n\} Π={P1,P2,...,Pn},此处初始化概率 P i P_i Pi是指 P ( S i ∣ 初 始 状 态 ) P(S_i|初始状态) P(Si)

转移概率序列 A = { A i , j ∣ i , j ∈ { 1 , 2 , . . . , n } } A=\{A_{i,j}|i,j\in \{1,2,...,n\}\} A={Ai,ji,j{1,2,...,n}},此处转移概率 A i , j A_{i,j} Ai,j是指由状态 S i S_i Si S j S_j Sj转移的概率

发射概率序列 B = { B i , j ∣ i ∈ { 1 , 2 , . . . , n } , j ∈ { 1 , 2 , . . . , m } } B=\{B_{i,j}|i\in \{1,2,...,n\},j\in \{1,2,...,m\}\} B={Bi,ji{1,2,...,n},j{1,2,...,m}},此处转移概率 A i , j A_{i,j} Ai,j是指由状态 S i S_i Si输出 O j O_j Oj转移的概率

为方便对HMM五元组的理解,举个例子:

医生通过病人对自身身体感受的描述(正常,头晕,冷)来判断病人的病情(健康,低烧,高烧)

其中隐含的病情状态值集合为{健康,低烧,高烧}

可观察的身体感受观察值集合为{正常,头晕,冷}

医生根据以往病例,预判病人的病情,即初始状态序列

健康 低烧 高烧
0.7 0.2 0.1

医生根据以往病例,得出的病人在两天之间病情转换概率,即转移概率序列

前\后 健康 低烧 高烧
健康 0.8 0.15 0.05
低烧 0.4 0.3 0.3
高烧 0.2 0.5 0.3

根据以往病例,医生得出的病人在相应病情下的身体感受概率,即发射概率序列

病情\感受 正常 头晕
健康 0.8 0.1 0.1
低烧 0.2 0.4 0.4
高烧 0.1 0.3 0.6

隐马尔科夫链的三个假设

  • 有限历史性假设:状态的概率分布只与其前一个状态有关
    P ( S i ∣ S i − 1 , S i − 2 , . . . , S 1 ) = P ( S i ∣ S i − 1 ) P(S_i|S_{i-1},S_{i-2},...,S_1)=P(S_i|S_{i-1}) P(SiSi1,Si2,...,S1)=P(SiSi1)
  • 齐次性假设:状态与具体时间无关
    P ( S i + 1 ∣ S i ) = P ( S j + 1 ∣ P ( S j ) ) P(S_{i+1}|S_i)=P(S_{j+1}|P(S_j)) P(Si+1Si)=P(Sj+1P(Sj))
  • 输出独立性假设:输出仅与当前状态有关
    P ( O 1 O 2 . . . O t ∣ S 1 S 2 . . . S t ) = P ( O t ∣ S t ) P(O_1O_2...O_t|S_1S_2...S_t)=P(O_t|S_t) P(O1O2...OtS1S2...St)=P(OtSt)

隐马尔科夫链的三类问题

  • 评估问题:给定模型,求某个输出序列的概率
    • 在病人近几日的病情已知,所有概率序列均已知的情况下,计算病人最后一日身体感受的概率
    • Forward-Backward算法
  • 解码问题:给定模型和某个特定的输出序列,找到最可能产生这个输出的状态序列
    • 已知所有概率序列,和近几日病人身体感受,得出近几日病人的病情
    • Viterbi算法
  • 学习问题:给定足够量的观测数据,估计隐含马尔可夫模型的参数
    • 通过大量病例推算模型参数
    • 无监督训练算法(鲍姆-韦尔奇算法)

维特比(viterbi)算法与中文词性标注(二)—— 维特比算法

维特比(viterbi)算法与中文词性标注(三)——词性标注实现
参考文献
[1]一文搞懂HMM(隐马尔可夫模型)

[2]HMM模型和Viterbi算法

[3]简单理解viterbi算法

你可能感兴趣的:(机器学习)