1. 定义
隐马尔可夫模型(Hidden Markov Model,HMM)是统计模型,它用来描述一个含有隐含未知参数的马尔可夫过程。它的状态不能直接观察到,但能通过观测向量序列观察到,每个观测向量都是通过某些概率密度分布表现为各种状态,每一个观测向量是由一个具有相应概率密度分布的状态序列产生。所以,隐马尔可夫模型是一个双重随机过程----具有一定状态数的隐马尔可夫链和显示随机函数集。
两个基本假设:齐次马尔可夫性假设(当前隐状态只依赖前一状态)、观测独立性假设(观测只依赖当前状态)。
2.三个基本问题:
(1) 概率计算问题
已知:模型λ=(A,B,π)、观测序列O。求:O观测序列出现概率P(O|λ)。
求解方法:直接计算法;前向算法(类似动态规划或剪枝);后向算法。
主要应用:
(2) 学习问题
已知:观测序列O。 求:模型λ=(A,B,π)的参数,使得观测序列概率P(O|λ)最大。
方法:监督学习法(训练数据包括观测序列和对应状态序列);非监督学习方法(训练数据只包括观测序列)——EM算法(对数似然函数取期望的Q函数、极大化)
(3) 预测问题
已知:模型λ=(A,B,π)、观测序列O。求:最有可能出现的状态序列 I。
求解方法:近似算法;维特比算法(动态规划递推地计算每一步的最优路径,即概率最大的一条)。
主要应用:中文分词。
3. 隐马尔可夫模型用于中文分词(从零开始训练)
(1) 参数解释
假设隐马尔可夫模型是一个五元组,已知S、O,根据观测集求模型参数A,B,π,进而对句子进行分词得到分词的最优路径I=(i1,i2,...,iT)。
具体到分词,分别解释每个变量的含义:隐马尔可夫模型及其在分词中的简单应用
假如训练语料有两句话:
我 爱 你 程序员。
他们 两个 人 是 半斤八两。
a. O是观察序列,本例中,就是:“我、爱、你、程、序、员、他、们、两、个、人、是、半、斤、八、两”这N=16个字。
注意区分观测序列与观测集合:
观测序列是给定的句子。
观测集合是所有汉字的集合——汉字的总数已经超过了8万,而常用的只有3500字。
b. S状态集合,由四种状态构成:词头标记为F(如“程”),词中标记为M(如“序”)、词尾标记为E(如“员”)、单字成词标记为 W(如“爱”、“你”)
c. A即由一个状态转移到另一个状态的概率集合,本例共有8种状态
i. W->W,如a(我是W->W)=1“我”后面一定是单字成词
ii. W->F,此例中a(我是W->F)=0,因此“我”后面一定不是词头,而a(你是W->F)=1
iii. F->M
iv. F->E
i. M->E
ii. M->M
iii. E->F
iv. E->W
d. B由各状态的概率分布构成,如b(我是W)=1(“我”一定单字成词)。
e. π由初始状态的概率构成,此例中为π(我)=1/2(以“我”开头的概率为1/2),π(他)=1/2(以“他”开头的概率为1/2)。也就是说中文分词中,初始状态是由标记为F、W的字出现概率组成。
(2) 学习模型
主要任务:学习状态转移矩阵A,观测概率分布B,初始参数π
监督学习方法
如果训练数据集已经给出句子(观测序列)及标记分词(路径序列):
初始参数π:π = π(i) = P(i_1=q_i), i=1,2,..,N,是时刻t=1时刻,某个观测值(汉字)处于q_i状态的概率。这里q_i = F, M, E, W,i=1,2,3,4.
统计每个句子开头第一个字出现频率,除以句子总数,即可得到这个字初始是状态 F 或 W 的概率,是其他状态的概率为0。
学习状态转移矩阵A:设它的子元素为a(i->j), 则 a(i->j) = (状态q_i变到状态q_j的次数) / (状态q_i变化的总次数)。这里只考虑状态变化,不考虑观测值变化。
观测概率分布B:设它的子元素为b_j(k), 则 b_j(k) = (状态为j,观测为k的次数) / (所有观测值为所有状态的总次数)。
总而言之:监督学习方法主要是通过统计频数除以总数,得到的概率,构成模型参数。
非监督学习方法
由于监督学习方法给出人工标注训练数据代价往往很高,因此,采用非监督学习的EM(期望最大化)算法来实现。
算法关键:
Q函数:参数为模型参数的当前估计值+下一步估计值。等号右边为(当前估计值条件下的O和I的联合概率)*log(新参数条件下的O和I的联合概率)、并在所有观测集基础上求和。具体推导是初始状态*观测概率*状态转移概率的迭代过程。
极大化:拉格朗日乘子法写出拉格朗日函数,包含了初始概率和为1的条件。对 π(i) 求偏导令结果为0可得 π(i)
同理,由于对某一状态而言,有转移状态和为1的约束条件,因此可得另一拉格朗日函数,求出aij。
同理求出aij
编辑公式不方便,具体参考《统计学习方法》第181页。
(3) 用模型得到分词路径
用维特比算法:动态规划算法求最优路径,其实就是从t=1开始,递归地计算在时刻t,状态为i的各条部分路径的最大概率,直至t=T。
于是得到最终分词。