NLP 《隐式马尔科夫链》

一:模型介绍和学习
隐式马尔科夫模型,是对马尔科夫链的扩展,是一个双重的随机过程,它包含一个隐藏链层S = {S1, S2, S3, ⋯ , SN}和一个可观测的链层W = {W1, W2, W3, ⋯ , WM},不可见的概率层到可见的概率曾也有一定的转移概率B,那个隐藏层的链层就是隐式马尔科夫的“隐”字来源。
在这里插入图片描述

HMM模型如上所示:
模型表示为:λ = (S,W,A,,B,π)

1:Start是初始状态,最初的状态。
2:红色线是初始状态到隐藏层各个状态S的转移向量π。
3:S是隐藏层的状态S = {S1, S2, S3, ⋯ , SN},隐藏状态总数是N。
4:黑色线是隐藏层之间各个状态的状态转移矩阵A,是NN维度的。
5:W是可观测层的各种输出W = {W1, W2, W3, ⋯ , WM},它的数量和隐藏状态S的数量没有联系,为了区分,我用可见状态总数用M表示。
6:蓝色线是各个隐藏层状态到可见状态的转移矩阵B,是N
M维度的。

现在,假设存在某个隐藏状态序列Q=q1, q2, q3, ⋯, qT (隐藏),Q的每一时刻qt属于集合S。
以及某个观察序列O=o1, o2, o3, ⋯, oT (可见),T是序列的长度,O的每一时刻ot属于可见状态集合W。

相对于之前的马尔科夫链,隐马尔科夫模型有以下的不同之处:
观察状态与隐藏状态之间存在概率关系,转移矩阵B。
多一个假设条件,输出独立性,可见状态仅仅与当前隐藏状态有关,可见状态之间没有关联,用公式说明就是:
在这里插入图片描述

上面的模型都是折叠起来的,现在展开看看。
在这里插入图片描述

在某个隐藏状态序列Q=q1, q2, q3, ⋯, qT (隐藏),以及某个观察序列O=o1, o2, o3, ⋯, oT (可见),看到这里,是不是非常像那个RNN的样子,内部有转移隐藏状态,每一次隐藏状态转移下,都会对外输出某个可见状态。

二:HMM三个经典问题:
问题1:Evalution,给定模型,和观测序列,计算概率。可以用于防止欺骗。
解决办法:前向计算

问题2:Recognition:给定观测序列,和模型,怎么反推出最可能的相应的隐藏状态序列。比如语音识别问题。
解决办法:维特比算法

问题3:Training:给定很多观测序列,如何调整训练出这些模型参数,这个也许就是最难的问题了。
解决算法:鲍姆-韦尔奇算法

下面我将详细讲解HMM的三个景点问题的核心内容:
对于前两个问题,我想举个例子来简单说明,例子是天气和女朋友的生活行为活动,这样可能更加直观:
模型表示为:λ = (S,W,A,,B,π)
天气S = {Sunny,Rainy, Windy},分别用S1, S2, S3表示。
活动W = {Running,Shopping,Clearning},分别用W1,W2,W3表示。
在这里插入图片描述

A的每一行或者每一列代表S1, S2, S3。
B的每一行代表一个隐藏状态S1, S2, S3,每列代表一个观测状态W1,W2,W3。
π表示从初始状态start到各个隐藏状态S1, S2, S3的概率。

好了,我们举了个例子,定义了个实例模型。

问题1.1:给定这么一个模型λ,求在三天天气分别是,Sunny,Rainy, Windy状态下,女朋友去做了分别是Running,Shopping,Clearning的概率。
画一个图如下,q0代表start状态,q1~q3分别是Sunny,Rainy, Windy,o1~o3分别代表是Running,Shopping,Clearning。
在这里插入图片描述

P(o1=running, o2=shopping, o3=cleaning|q1=Sunny, q2=Rainy, q3=Windy)
= P(start->Sunnny) * P(Sunnny->running) * P(Sunnny->Rainy) * P(Rainy ->shopping) * P(Rainy ->Windy) * P(Windy ->cleaning)

= 0.4 * 0.6 * 0.10.5 * 0.10.7

问题1.2: 给定这么一个模型λ,求三天内女朋友去做了分别是Running,Shopping,Clearning的概率。
这时候就需要按照上述的式子,列举出所有的天气的排列组合,按照1.1的解法去求解。这就是Evalution问题。

问题2:Recognition问题。给定这么一个模型λ,已知三天内女朋友去做了分别是Running,Shopping,Clearning,求出这三天天气的最大可能是什么?

解法一:暴力求解,已知问题1.2,我们可以求出所有可能天气组合情况下输出某个观测状态W组合序列的概率,从中挑选一个最大值的天气组合就行了,但是在实际使用中,如果存在N个状态,T个序列,那么计算量将会是指数级的增长,这是很不可取的。

解法二:维特比算法,就是一个动态规划的算法,用空间换区时间,这个算法提出来后,语音识别的问题就解决了,所以有必要好好学习的。此算法被广泛应用于CDMA和GSM数字蜂窝网络、拨号调制解调器、卫星、深空通信和802.11无线网络中解卷积码。现今也被常常用于语音识别、关键字识别、计算语言学和生物信息学中。

这个算法也不难,只要画出了图,就是求最大可能性的路径。为了避免整数溢出,可以直接将概率转换为log对数取相反数。这样就是求网络中的最短路径问题。
在这里插入图片描述

这个网络穷举了所有可能的隐藏状态转换路径,每到一个状态都会输出一个可观测状态o,给定某个序列W的观测序列,每一个状态点都是乘上概率P(ot=Wi | qt=Si)的。输出网络的最短路径。

问题三:如何训练模型,我不多讲了,记住那个算法叫做鲍姆-韦尔奇算法,也用到了EM的知识,篇幅有限,我就不展开了,有兴趣的同学自行学习。

三:HMM的用途

1:词性标注:
不论是英文还是汉语,词语都会有词性的,名词,代词,动词,形容词。可以将词性作为隐藏层,每个隐藏层都会喷射出相对应的词汇,比如,形容词喷射出(好的,坏的,美丽的,巨大的。。。),动词喷射出(删除,玩,吃,喝。。。。),给一个预料库,对其进行训练,得到这么一个模型后,给出一句话,就能反推出这句话最可能的词性组合。

2:拼音输入法:
汉语拼音我们再熟悉不过了,当我们敲键盘使用拼音的时候,输入法软件会自动的列举出所有可能的汉子和词语,而且根据用户习惯已经学习到,最有可能的单词和汉字会有限出现在最前面,很明显汉字或者词语是隐藏层,拼音是我们能看到的表层,输入法软件需要通过拼音得到最有可能的隐藏层汉字。

3:语音识别:
这个是很常用的功能,当我们理解一个人说的话,我们只能听到语音,语音背后所蕴含的就是语言文本信息,语音识别就是通过可观测的语音得到背后文本信息。

4:异常概率检测:
比如正常的概率情况下,会出现怎么样的表现,但是一旦出现异常的表现,是不是内在的状态出问题了。

等等。

猜你喜欢

转载自blog.csdn.net/qq_29367075/article/details/109100978