马尔科夫链
研究随机过程中,在任何一个时刻t,对应的状态St是随机,所以可能关系为P(St|S1,S2,..,St−1);
而马尔科夫为了简化问题提出假设,随机过程中St只与前一个状态St−1有关,关系变为P(St|St−1);这个假设被称为马尔科夫假设,符合这个假设的随机过程称为马尔科夫过程/马尔科夫链;
隐含马尔科夫模型
此模型是上述马尔科夫链的一个扩展。
对于状态序列S1,S2,...,St转换概率是未知的。但是每个状态都会在每个时刻输出一个Ot,Ot只与St有关,称独立输出假设。
基于马尔科夫假设和独立输出假设,就是构成隐含马尔科夫模型。
个人理解
马尔科夫模型本质上算一个随机的状态机,类比有限自动状态机,基于马尔科夫假设和独立输出假设,其输出概率大大简化,P(Ot)=P(Ot|St)∗P(St|St−1);由此,把复杂的自然语言处理问题简化为状态运行图,直到输出为止。
后续
围绕此模型有三个基本的问题:
1.给定模型,如何计算某个特定的输出序列的概率。
对应的是Forward_Backword算法。
2.给定一个模型和某个特定的输出序列,然和找到最可能的输出序列。
维特比算法 – 针对篱笆网络–每个状态都是x1i的集合,对任意的x1i且都有到下一状态中每一个子状态x2j的路径的网络。
是一种·动态规划算法,用于寻找最有可能产生观测事件的维特比路径隐含序列
其算法主要有一下三点(1,2点在论证算法的正确性):
1.如果最优路径p通过一个点xij,那么s−>xij==>pij也是最优的,否则如果有更优的路径s−>xij==>pij1,那么之前的使用的pij的所谓全局最优路径就是矛盾的。
2.从S到E的路径中对于任意的i时刻(设有k个状态),对任意k个状态中其中之一xij都有一条从S−>xij的最优路径,那么全局最优路径必然包含这k条中的之一。
3.有以上论证,(设s(xij)是从S到xij的最优路径,d(iji+1)是从xij到x(i+1)k的路径集合)。
从状态i到状态i+1,s(xi+1j)=s(xij)+min(d(iji+1);
这里就是动态规划思想的体现,寻找公共子问题,避免不必要的计算。
3.给出足够量的观测数据,如何估计隐含马尔科夫模型的参数。
1.人工标注,给定输入数据,按照输出结果计算概率.P=#(Ot,St)/#Ot,#Ot标识Ot输出的次数。#Ot 表示出现多少次
2.无监督的训练方法,主要使用Baum_Welch算法。
1.构建初始输出模型,转移概率P和输出概率Q均匀分布时候,可以输出,任何输出,以此为初始模型M0;
2.因为给定的是输出O1,O2,O3...,Ot,对于输出Ot来说,可以倒退出经过哪些可能的经过状态,标记每个状态经历了多少次,到达了哪些状态,输出了哪些符号,由此再次推算状态转移函数,完成一次迭代。并且有P(O|M1)>P(O|M0);
3.继续2直到迭代不明显为止。
这个算法就是通过结果,推出可能走过的路径,然后计算次数来重定义转移函数的概率。