TJU自然语言处理复习(3)

  • 隐Markov模型及其NLP应用
  • Markvo模型
  • 隐Markov模型
  • 罐子模型
  • 形式化描述
  • 隐Markvo模型的三个基本问题及算法
  • 评估问题
  • 前向算法
  • 后向算法
  • 解码问题
  • Viterbi算法
  • 学习问题
  • 期望值最大化算法
  • Baum-Welch(前向后向) 算法
  • 隐Markov模型的应用
  • ==词性标注==
  • 总结


隐Markov模型及其NLP应用

Markvo模型

生活中常见的例子:传染病传播,人口增长等都随机过程可以称为Markvo过程。

  • 一个系统有N个状态 S1,S2,···,SN,随着时间推移,系统从某一状态转移到另一状态,设qt为时间 t 的状态,系统在时间 t 处于状态 Sj 的概率取决于其在时间 1 ,2,···,t-1 的状态,该概率为:
  • 如果系统在 t 时间的状态只与其在时间 t -1 的状态相关,则该系统构成一个一阶Markov过程:
  • 如果只考虑独立于时间 t 的随机过程:
  • Markvo模型的实质就是一个随机有限状态自动机,每一个状态转换都有一个相应的概率表示采取这个状态转换的可能性。

隐Markov模型

罐子模型

自然语言处理与扎根理论打标签_自然语言处理与扎根理论打标签

  • 状态转移:从一个罐子到另一个罐子。
  • 可观察符号的输出:从某个罐子取出某种颜色的球。
    状态的转移过程是隐蔽的,而可观察符号的输出过程是状态转移过程的随机函数。

形式化描述

  • 状态集合:S={S1,S2,S3,···SN},以qt表示模型在t时刻的状态。
  • 输出符号集合:O={O1,O2,···OM}
  • 状态转移矩阵:A=aij(aij是从状态Si转移到Sj的概率),其中:
  • 可观察符号的概率分布矩阵:B=bj(k),表示在状态j时输出符号vk的概率,其中:
  • 初始状态概率分布:
    前三者表示罐子之间互相转移的概率,后两者表示在初始时刻选择不同罐子的概率。

一般的,一个HMM可以表示为λ=(S, O, A, B, π) 或 λ=(A, B, π)

隐Markvo模型的三个基本问题及算法

评估问题

评估问题:给定一个观察序列O=O1O2···OT和模型λ,如何计算给定模型下观察序列O的概率P(O|λ)。
解决方法:前向算法,后向算法和前向-后向算法

前向算法

自然语言处理与扎根理论打标签_状态转移_02


自然语言处理与扎根理论打标签_人工智能_03

后向算法

自然语言处理与扎根理论打标签_自然语言处理_04

解码问题

给定一个观察序列O=O1O2O3···OT和模型λ,如何计算状态序列 Q=q1q2···qt,使得该状态序列能“最好地解释”观察序列。

  • 即所求的 Q 应当在某个准则下是 “ 最优 ” 的 , 因此也称 Q 为最优路径 , 解码问题即是确定最优路径的问题
Viterbi算法

假设说有m个状态,每个观察符号都会有m种状态的可能性,这样以来就是指数级增长,效率较低,因此出现了Viterbi算法。

  • 基于viterbi变量的动态规划算法
  • viterbi变量:
  • 该变量说明了从初始状态到 t 时刻的状态 Si 的所有路径中,必有一条路径,能够使得你观察到O1O2…Ot 序列的概率最大,也即这条路径最好的解释了O1O2…Ot 序列的出现。

    算法复杂度:M*N的平方

学习问题

给定一个观察序列 O1O2…OT ,如何调节模型λ的参数,使得P (O| λ)最大。

期望值最大化算法

自然语言处理与扎根理论打标签_自然语言处理_05

Baum-Welch(前向后向) 算法

自然语言处理与扎根理论打标签_人工智能_06


自然语言处理与扎根理论打标签_状态转移_07

隐Markov模型的应用

  • 自然语言处理:中文分词、词性标注、音字转换、
    语音识别、机器翻译。
  • 生物信息学:基因组分析
  • 行为识别、手写字符识别、人脸识别
**==任何与线性序列相关的问题!==**

词性标注

自然语言处理与扎根理论打标签_状态转移_08

  • 问题转化:我们看到的是词汇序列,记做W=w1w2…wn(即观察符号序列)。需要去猜测隐藏在幕后的词性标记序列,记做T=t1t2…tn(即状态序列)
  • 问题抽象:已知词串W(观察序列)和模型λ的情况下,求使得条件概率P(T|W,λ)值最大的那个T´,一般记做:




总结

隐Markov模型可视为一个随机有限状态自动机,其中包含两个随机过程:状态转移过程和观察符号的输出过程

隐Markov模型涉及三个基本问题:评估问题、解码问题和学习问题

对任何应用,都要考虑如下问题:系统的状态和观察符号是什么?各自的数目是多少?如何通过已有数据来获得模型参数?