自然语言处理笔记-隐马尔克夫模型(HMM)

在中文分词里提到了分词时是否使用隐马尔克夫模型,这里就讲一下什么是隐马尔克夫模型

马尔可夫模型

事物在一段时间里的变化模式(规律)

比如知道今天的天气情况,推测明天的天气情况,这叫1阶马尔可夫模型,通过昨天与今天的天气情况,推测明天的天气情况,这叫2阶马尔可夫模型,

通过前n天的天气情况,推测明天的天气情况,这叫n阶马尔可夫模型。

隐马尔可夫模型

继续举例,比如你的异地朋友有三大爱好,散步,购物,打扫卫生,他每天选择做什么只根据当天什么样的天气,每次打电话他都会告诉你今天做了什么。这时你来猜测朋友当地的天气。

当天天气对于你来说是隐藏的,“散步,购物,打扫卫生”这些都是观察数据,整个系统就是隐马尔可夫模型

HMM

如上图就是一个简单的 HMM,我们假设第一天下雨的概率为0.6,晴天的概率为0.4,,如果今天下雨,那么明天也下雨的概率是0.7,晴天的概率是0.3,如果今天是晴天,明天也是晴天天的概率是0.6,下雨的概率是0.4.

如果是雨天,去散步的概率是0.1,去购物的概率是0.3, 去打扫的概率是0.6

如果是晴天,去散步的概率是0.5,去购物的概率是0.4, 去打扫的概率是0.1

根据以上的信息,我们得到了 HMM的一些基本要素:


# 状态数目,两个状态:下雨或晴天

states = ('下雨','晴天')


# 每个状态下可能的观察值

observations = ('散步', '购物', '打扫')


# 初始状态空间的概率分布  π

start_probability = {'下雨': 0.6, '晴天': 0.4}


#与时间无关的状态转移概率矩阵 A (如果这个模型定好之后,数据不会发生变化)

transition_probability = {

    '下雨' : {'下雨': 0.7, '晴天': 0.3},

    '晴天' : {'下雨': 0.4, '晴天': 0.6},

}


# 给定状态下,观察值概率分布,发射概率 B

emission_probability = {

    '下雨' : {'散步': 0.1, '购物': 0.3, '打扫': 0.6},

    '晴天' : {'散步': 0.5, '购物': 0.4, '打扫': 0.1},

}

现在,重点是要了解并解决HMM 的三个问题

问题一:概率计算问题。也叫评估问题(Evaluation)。给定模型 λ=(A,B,π) 和观察序列 O=(o1,o2,o3),计算在模型λ下观察序列O出现的概率P(O|λ)

结合上面列子,问题就是,已知整个模型,你朋友告诉你他连续三天做的事情分别是:散步,购物,收拾。那么,根据模型,计算产生这些行为的概率是多少?

解决方法:向前算法

先计算t=1时刻,

P(散步,下雨) = P(第一天下雨)*P(散步|下雨) = 0.6 * 0.1 = 0.06

P(散步,晴天) = P(第一天晴天)*P(散步|晴天) = 0.4 * 0.5 = 0.2

t=2时刻, 发生“购物的概率”

如果t=2下雨:

P(第一天散步,第二天购物,第二天下雨) =【P(第一天散步,第一天下雨) * P(第二天下雨 | 第一天下雨)

                                                      + P(第一天散步,第一天晴天) * P(第二天下雨 | 第一天晴天)】

                                                      * P(第二天购物 | 第二天下雨) 

                                                      = [0.06x0.7+0.2*0.4]*0.3

                                                      =0.0366

如果t=2晴天:

P(第一天散步,第二天购物,第二天晴天) =【P(第一天散步,第一天下雨) * P(第二天晴天 | 第一天下雨)

                                                      + P(第一天散步,第一天晴天) * P(第二天晴天 | 第一天晴天)】

                                                      * P(第二天购物 | 第二天晴天) 

                                                      = [0.06x0.3+0.2*0.6]*0.4

                                                      =0.0552

t=3时刻,发生“收拾的概率”

如果t=3 下雨

P(第一天散步,第二天购物,第三天收拾,第三天下雨)=[P(第一天散步,第二天购物,第二天下雨) * P(第三天下雨|第二天下雨)

                                                                       +P(第一天散步,第二天购物,第二天晴天)* P(第三天下雨|第二天晴天)]

                                                                       * P(第三天打扫|第三天下雨)

                                                                       =[0.0366**0.7+0.0552**0.4]*0.6

                                                                       = 0.02862

如果t=3 晴天

P(第一天散步,第二天购物,第三天收拾,第三天晴天)=[P(第一天散步,第二天购物,第二天下雨) * P(第三天晴天|第二天下雨)

                                                                       +P(第一天散步,第二天购物,第二天晴天)* P(第三天晴天|第二天晴天)]

                                                                       * P(第三天打扫|第三天晴天)

                                                                       =[0.0366**0.3+0.0552**0.6]*0.1

                                                                       = 0.00441

所以 P(第一天散步,第二天购物,第三天收拾) = 0.02862 + 0.00441 = 0.03303

从以上公式可以看出后一次的算法都与上一次的有关,所以使用递归方式,可以很轻松的算出最终结果

问题二:学习问题(Learning)。已知观察序列 O=(o1,o2,o3,... Or),估计模型 λ=(A,B,π) 参数,使得在该模型下观察序列概率P(O|λ)最大

Baum-Welch 算法

问题三:预测问题也称为解码问题(decoding)。已知模型 λ=(A,B,π) 和观察序列 O=(o1,o2,o3,... Or) ,求对给定的观察序列条件概率 P(I|O)最大的状态序列 I=(i1,i2,i3, ... ir)。 即给定观察序列,求最有可能的对应的状态序列。

结合上面列子,问题就是,已知整个模型,你朋友告诉你他连续三天做的事情分别是:散步,购物,收拾。那么,根据模型,这三天怎么样的天气才最有可能让她做这样的事情?

解法,解最大似然路径问题

1.第一天,散步。

第一天

当第一天是晴天时,去散步的概率最大,为0.4 * 0.5,高于下雨的0.6 * 0.1

2.第二天, 购物。

第二天

这时我们要分别求出第二天是晴天,下雨的最大概率,显然,要取得取大值,第一天必须是晴天

第二天是晴天的最大概率值:

P2(晴天) = P(散步|第一天是晴天)P(第二天晴天|第一天晴天)P(购物|第二天是晴天)

        =  0.4 * 0.5 * 0.6 * 0.4 

        = 0.048

第二天是下雨的最大概率值 :

P2(下雨) = P(散步|第一天是晴天)P(第二天雨天|第一天晴天)P(购物|第二天是雨天)

            = 0.4 * 0.5 * 0.4 * 0.3

            = 0.024

所以第二天是睛天去购物的概率最大

3.第三天,打扫。

第三天

同样,我们要求出第三天是晴天,下雨的最大概率。同样,要有最大值,第二天必须是晴天。

第三天是晴天的最大概率值 :

P3(晴天) = P2(晴天) * P(第三天晴天|第二天晴天) * P(打扫|第三天是晴天)

            = 0.048 * 0.6 * 0.1

            = 0.00288

第三天是雨天的最大概率值 :

P3(雨天) = P2(晴天) * P(第三天雨天|第二天晴天) * P(打扫|第三天是雨天)

            = 0.048 * 0.3 * 0.6

            = 0.00864

所以由结果可以看出,第三天是雨天去打扫的概率最大

所以最终的天气序列为:晴天-下雨-下雨

隐马尔克夫模型在分词中的应用

隐马尔可夫模型是一个五元组:

S:状态集合:即所有可能的状态s1,s2,…,sn所组成的集合。

O:观察序列:即实际存在的一个状态的有向序列,如状态o1,o2,…,on,注意状态是存在顺序的。

A:状态转移分布,即S中各元素中,两两之间转移的概率值。比如当前是s2,下一个状态是s9的转移概率为s2,9(小于1)。

B:每种状态出现的概率分布。

π:初始的状态分布

HMM模型有三个主要用途,没有例子可能比较难于理解,分词示例:

1.参数学习

模型没有建立前,有已经分好词的部分语料。利用现有语料训练模型,得到各参数的值。我们使用最简单的HMM(设S由四种状态构成:词头,词中、词尾、单字成词),可以这样做:

假如训练语料有两句话:

我 爱 你 程序员。

他们 两个 人 是 半斤八两。

a. O是观察序列,本例中,就是:“我、爱、你、程、序、员、他、们、两、个、人、是、半、斤、八、两”这16个字。

b. S由四种状态构成:词头(如“程”),词中(如“序”)、词尾(如“员”)、单字成词(如“爱”、“你”)
c. A即由一个状态转移到另一个状态的概率集合,本例共有8种状态
- 单字成词->单字成词,如a我单单=1“我”后面一定是单字成词
- 单字成词->词头,如a我单头=0“我”后面一定不是词头,而a你单头=1
- 词头->词中
- 词头->词尾
- 词中->词尾
- 词中->词中
- 词尾->词头
- 词尾->单字成词

d. B由各状态的概率分布构成,如b我单=1(“我”一定单字成词)。

e. π由初始状态的概率构成,此例中为π我=1/2(以“我”开头的概率为1/2),π他=1/2(以“他”开头的概率为1/2)。

2.评价问题

以上面一个问题的参数为基础,评估第一句话:我 爱 你 程序员。

“我”开头的概率为π我=1/2,“我”转移到“爱”的概率为a我单=1,“爱”到“你”的概率为a单单=1,“你”到“程”的概率为a单头=1,“你”到“序”的概率为a头中=1,“序”到“员”的概率为a中尾=1,而本例(因为字太少,每个字只出现一次)中所有的b都为1,所以该句的概率为:

Pv=π我b我单 a我单单 b爱单a爱单单b你单 a你单头 b程头a程头中b序中a序中尾*b员尾

注:至于数值越界等非原理问题这里就不详解了,请大家自己找资料。

3.分词问题

比如还以第一个问题的参数为基础,来解码还没有分词的句子:我爱人是程序员。

因为首字是“我”,所以是“他”的情况被排除。

π我=1/2,

“我”后面是单字的概率为1,a我单=1(即只能是单字),其它情况的概率为0

“爱”后面是单字的概率为1,a爱单=1,其它情况的概率为0

“人”后面是单字的概率为1,a人单=1,其它情况的概率为0

“是”后面是词头的概率为1,a是头=1,其它情况的概率为0

“程”后面是词中的概率为1,a程中=1,其它情况的概率为0

“序”后面是词尾的概率为1,a序尾=1,其它情况的概率为0

所有分词的可能性是很多的,需要采用动态规划的算法,这里就不详述了,只给出其中三种可能作为示例:

a. “我”为开头,“爱”是单字成词,“人”是单字成词,“是”是单字成词,“程”是词头,“序”是词中,“员”是词尾:

P1= π我b我单a我单单b爱单a爱单单b人单a人单单b是单a是单头b程头a程头中b序中a序中尾*b员尾

=1/2111111111111*1=1/2

b. “我”为开头,“爱”是词头,“人”是词尾,“是”是单字成词,“程”是词头,“序”是词中,“员”是词尾:

P1= π我b我单a我单头b爱头a爱头尾b人尾a人尾单b是单a是单头b程头a程头中b序中a序中尾*b员尾

=1/2100000111111*1=0

c. “我”为开头,“爱”是词头,“人”是词中,“是”是词尾,“程”是词头,“序”是词中,“员”是词尾:

P1= π我b我单a我单头b爱头a爱头尾b人中a人中尾b是尾a是尾头b程头a程头中b序中a序中尾*b员尾

=1/2100000001111*1=0

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容