1. 概述

在自然语言中,一个句子通常是由多个词组成、包含形容词、名词、动词等等。如下面的这个句子:Mary had a little lamb 。如何找出每个词对应的词性是问题的重点。这里将探讨如何使用隐马尔可夫模型进行词性标注。

隐马尔可夫模型还用于语音识别和语音生成、机器翻译、生物信息学基因识别和计算机视觉人类手势识别,等等。

2. HMM模型

2.1 定义

λ = ( A , B , π )

A:转移概率矩阵,B:状态概率矩阵,π:初始状态概率向量

2.2 三个基本问题

为了便于理解,引入下图:

上方的词性就是状态序列,下方的单词就是观测序列,A就是transition probabilities,B就是Emission probabilities

2.2.1 概率计算问题——Viterbi算法(DP)

其实就是一列一列地dp

根据发射概率表和转移概率表。从 <S> 到 N 的转移概率为 3/4 。 对应的 Jane 是 N 的概率为 2/9 。同样的 <S> 到 M 的转移概率为 1/4 ,Jane 是 N 的概率为 0 。<S> 到 V 的转移概率为 0 ,Jane 是 V 的概率为 0 。

因此生成节点的概率是 发射概率 转移概率。即 <S> 到 N 的转移概率和 Jane 是N的发射概率 : (3/4) (2/9) = 1/6 。同理计算 <S> 到 M 的转移概率和 Jane 是M的发射概率分别为 0 。

再转到下个单词 will ,有三个路径指向 N、即转移概率分别是 1/9、1/4 和 1。同时 will 是 N 的发射概率为 1/9 。如此再计算三个路径上概率值,保留最大的概率值。似乎 1/6 1/9 1/9 是最大值。

同样的方式计算M和V,并保留最大的概率值。重复的方式进行,知道句子末尾。如此可得到如下的结果,忽略0的路径

如何找到最佳路径,可从后往前追踪。即 <E> -> N -> V -> M -> M -> N -> <S> 这便是最佳路径。

定义: (Z是状态值,x是观测值)

2.2.2 学习问题

2.2.2.1 给定z和x——complete case

只需要通过统计即可算出所有的参数

参数A的计算

如下图的一些句子,可以看作是语料。每个句子做了标注。

之后将每列除以条目之和,获得这些数字。如此就计算出了相应的发射概率。注意单词可以重复出现,例如 will 即是名词又是情态动词。

参数B的计算

首先需要给每个句子添加一个开始和结束的标签。当然这些标签也可以作为词性。现在创建计数表,计算每个词性出现的次数。如下图的 3 ,表示名词N 后面出现的情态动词 M 的次数为 3 次。

为了计算概率,需要将每行中的条目除以行中条目的和。如下图情态动词动词M之后是名词N的概率为 1/4; M情态动词之后是动词V的概率为 3/4 。这个就是转移概率。

2.2.2.2 给定x——incomplete case

通过EM算法进行迭代式

算法流程:

2.2.3 预测问题

通过Forward/Backward Algorithm求P(Zk | x)

step1:计算z的期望

step2:通过期望更新B

参考:https://www.jianshu.com/p/4aa90d8faacf

Last modification:March 11th, 2021 at 02:18 am
如果觉得我的文章对你有用,请随意赞赏