马尔科夫链
研究随机过程中,在任何一个时刻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直到迭代不明显为止。
这个算法就是通过结果,推出可能走过的路径,然后计算次数来重定义转移函数的概率。