隐式马尔可夫模型

HMM

隐马尔可夫模型(Hidden Markov Model, HMM)是一种统计模型,用于描述一个含有隐含未知参数的马尔可夫过程。它在语音识别、自然语言处理、生物信息学、金融分析等领域有着广泛的应用。 HMM 中的几个重要的组成部分为状态集合观测集合状态转移概率发射概率状态初始概率组成。以天气预报举例,状态集合为晴天(Sunny)、多云(Cloudy)和雨天(Rainy)不是直接观察得到的,而是预测出的;观测集合为晴,有雨,有云等,可以直接观测到;状态转移概率有一个状态转移到另一个状态的概率;一般可以假设各个状态平均分布创建状态初始概率;发射概率是在一个状态下观测到一个结果的概率。

发射概率矩阵例子

假设我们有一个天气预报的HMM,其中状态集合为{晴天(S),多云(C),雨天(R)},观测集合为{晴(O1),多云(O2),雨(O3),部分云(O4),雷阵雨(O5)}。发射概率矩阵可能如下所示:

O1O2O3O4O5
S0.80.10.050.050
C0.10.60.10.20
R00.10.70.10.1

在这个矩阵中,每个元素 $P(o∣s)$表示在状态 ss 下观测到观测 oo 的概率。例如,$P(O_{1}∣S)=0.8$ 表示在晴天状态下观测到晴的概率为0.8。

转移概率矩阵例子

通过统计输入的数据可以得出转移概率矩阵。例如:

SCR
S0.70.20.1
C0.30.50.2
R0.40.20.8

这个矩阵表示了从一个状态转移到另一个状态的概率。例如,如果今天是晴天,那么明天有70%的概率仍然是晴天,20%的概率变成多云,10%的概率变成雨天。

计算

比如要计算连续三天都是晴天的例子。 第一天:$P(S) = 0.33$ 初始概率 第二天:第一天->第二天,状态变化为晴天->晴天。$P(S) \times P(S\to S) = 0.33 \times 0.7 = 0.231$ 第三天:与前面相似,继续相乘。$P(S) \times P(S\to S) \times P(S \to S) = 0.1617$

中文分词

在进行中文分词时加入了四种状态每个字对应一个状态,分别是 B(词的开头)、M(词的中间)、E(词的结尾)、S(单字成词)。观测集合就是输入的句子中的每一个字。初始概率矩阵需要统计数据集。还有发射概率矩阵。

初始概率矩阵

直接统计一个数据集中 B, M, E, S 概率分别是多少。例如: $$ π={P(B)=0.5,P(M)=0,P(E)=0,P(S)=0.5} $$

转移概率矩阵

转移概率表示隐马尔可夫模型(HMM)中从一个状态转移到另一个状态的概率,用公式表示为: $$ P(sj​∣si​)= \frac{状态 si​ 出现的总次数}{状态 si​ 转移到状态 sj​ 的次数}​ $$ 统计从一种状态转移到另一种状态的概率。例如:

BMES
B00.40.60
M00.40.60
E0.333000.667
S0.444000.556
需要符合约束。
BMES
B00
M00
E00
S00

转移概率矩阵

发射概率是隐马尔可夫模型(HMM)中的关键部分,它表示一个隐状态 s 发射出观测符号 o 的概率,用公式表示为:

$$ P(o | s) = \frac{\text{状态 } s \text{ 发射符号 } o \text{ 的次数}}{\text{状态 } s \text{ 的总发射次数}} $$ 通过统计: 遍历语料,统计每个状态 sss 发射每个观测符号 o 的频次。例如:

状态 \ 符号自然语言处理技术
BBB0.010.01000.010
SSS000.02000
EEE0000.01400.014

维特比算法

维特比算法是一种动态规划算法,通过逐步计算每一步的最优路径和概率,最终找到全局最优路径。
公式如下:

定义

动态规划公式

  1. 初始化(第一个观测符号): $$ δ1(s)=π(s)⋅B(s,o1),ψ1(s)=0$$ 其中,$π(s)$ 是初始状态概率,$B(s,o1)$ 是状态 s 发射观测符号 $o_1$​ 的概率。

  2. 递推(从第 2 个符号到第 TTT 个符号): $$ δt​(s)=max_{s}​[δ_{t - 1}​(s′)⋅A(s′,s)]⋅B(s,o_{t}​) $$ $$ ψt​(s)=argmax_{s}​[δt−1​(s′)⋅A(s′,s)] $$ 其中,$A(s′,s)$ 是从状态 $s′$ 转移到 $s$ 的概率,$B(s,o_t)$ 是状态 s 发射 $o_t$​ 的概率。

  3. 终止(找到最优结束状态): $$ P_{max}=max⁡_{s}δ_{T}(s) $$ $$s_{T}​=argmax_{s}​δ_{T}​(s)$$

  4. 回溯(通过 $\psi_t(s)$ 找到最优路径): $$ st−1=ψ_{t}(s_{t}),t=T,T−1,…,2 $$

假设模型参数

假设以下参数:

1. 初始化

对于第一个字 "我":

$$ δ1​(B)=π(B)⋅B(B,"我")=0.5⋅0.5=0.25 $$ $$ δ1​(S)=π(S)⋅B(S,"我")=0.5⋅0.4=0.2 $$

2. 递推

对于第二个字 "爱":

$δ2​(B)=max[δ1​(B)⋅A(B→B),δ1​(S)⋅A(S→B)]⋅B(B,"爱") =$ $max⁡[0.25⋅0.5,0.2⋅0.5]⋅0.5=0.0625$ $$ δ2​(E)=max[δ1​(B)⋅A(B→E),δ1​(S)⋅A(S→E)]⋅B(E,"爱") $$ 记录前一步的最优状态:

$$ ψ2​(B)=args′max​[δ1​(s′)⋅A(s′→B)] $$

重复类似步骤,直到最后一个字 "处理"。

4. 回溯

从终止时的最优状态开始,根据 $\psi_t(s)$ 回溯每一步的最优状态,得到完整的状态序列。