本篇文章3735字,读完约9分钟

雷锋。(公开号码:雷锋。据:刘鹏,这篇文章的作者,原文载于作者的个人博客,和雷锋。com已被授权。

什么问题可以通过嗯解决?现实生活中有这样一种随机现象。在了解现状的情况下,未来的情况只与现在有关,而与遥远的过去没有直接关系。

例如,天气预报,如果我们知道“晴天、阴天和雨天”之间的过渡概率,那么如果今天是晴天,我们就可以推断出明天将是各种天气的概率,然后就可以从明天的天气来计算后天的天气。这种问题可以用马尔可夫模型来描述。

马尔可夫

此外,如果我们不知道今天的天气,我们只知道未来三天藻类的干湿状态。因为藻类的状态与天气有关,我们想通过藻类来猜测这三天的真实天气,这次我们用隐马尔可夫模型来描述它。

hmm模型的本质是从观测到的参数中获取隐藏的参数信息,前后特征之间会产生部分相关影响。

从如何进行中文分词的角度来看,我们知道隐马尔可夫模型是根据可观察状态的序列找到最可能的隐藏状态序列的

中文分词是指将一个中文句子作为输入,以“bems”组成的序列串作为输出,然后进行分词,得到输入句子的切分。其中,B代表开始词,M代表中间词,E代表结束词,S代表单个词。

例如,给出一个句子

肖明拥有中国科学院计算技术研究所硕士学位

边界元法的顺序如下

bebebmebebmebes

因为一个句子的结尾只能是e或s,所以删掉一个单词的方法是

be/be/bme/be/bme/be/s

那么,汉语句子的分词方法如下

小明/硕士/毕业于/中国/科学院/计算研究所。

这是一个hmm问题,因为你想要的是每个单词的位置,但是你看到的只是这些汉字。通过汉字来推断每个词在词中的位置是必要的,每个词属于什么状态也与它前面的词有关。

此时,我们需要根据可观测的状态序列找到最可能的隐藏状态序列。

五元组,三种问题,两个假设的五元组

通过以上例子,我们可以知道hmm有以下五个要素。

观测序列-0:中国科学院计算技术研究所肖明硕士

状态序列-s:bebebmebmees

初始状态概率向量-π:一个句子的第一个词属于四种状态的概率{b,e,m,s}

状态转移概率矩阵-a:如果前一个单词位置是b,那么下一个单词位置是bems的概率是多少

观测概率矩阵-b:在状态b条件下,取对数后,观测值为亮的概率为-10.460

注:示例值是取概率值对数的结果。为了将概率乘法的计算变为对数加法,将-3.14e+100视为负无穷大,即相应的概率值为0。

三种问题

当未知被五元组中的一些已知条件所解决时,得到三类隐马尔可夫模型问题:

●似然问题:当参数(o,π,a,b)已知时,计算观测序列o在(π,a,b)下的概率。(向前-向后算法)

●译码问题:当参数(o,π,a,b)已知时,求解状态值序列S..(维特比算法)

●学习问题:当参数(o)已知时,求解(π,a,b)。(鲍姆-韦尔奇算法)

中文分词的例子属于第二个问题,即解码问题。

我们希望找到S1,S2,S3,...并使p(S1,S2,S3,...|o_1,o_2,o_3,...)达到最大值。

意思是,当我们观察语音信号o_1,o_2,o_3,...,我们应该推断发送的句子S1,S2,S3,...显然,我们应该在所有可能的句子中找出最可能的一个。

两个假设

使用贝叶斯公式可以获得:

这里,需要两个假设来进一步简化上述公式

有限历史假设:si仅由si-1决定

独立输出假设:第I次接收信号oi仅由发射信号si决定

有了上述假设,我们可以使用维特比算法来寻找最大目标概率。

根据动态规划原理,最优路径具有以下特征:如果最优路径从节点I { t }到端点I { t },那么这两点之间所有可能的部分路径都必须是最优的。

根据这一原理,我们只需要从时间t=1开始递归地计算状态为I的每条部分路径在时间t处的最大概率,直到我们得到状态为I的每条路径在时间t=t处的最大概率p,同时也得到最优路径的终点I _ {t}。之后,为了找出每个节点的最优路径,从端点I _ {t}开始,节点I _ {t-1}...,I _ {1},然后最优路径I = I _ {1}...,即维特比算法。

给一颗栗子:

需要观察序列o =(红、白、红),状态序列s。

需要定义两个变量:

低权重[3] [3],第3行是状态数(1、2、3),第3列是观察值数(红、白、红)。也就是说,在时间t,状态为I的所有单个路径的概率都是最大的。

路径[3] [3],这意味着在时间t,在状态I的所有单个路径中,具有最高概率的路径的第(t-1)个节点是什么。例如,如果路径[0][2]=1,这意味着当权重[0][2]达到最大值时,前一时刻的状态是1。

1.初始化

在状态1、2和3的条件下观察到t = 1时,红色的概率计算如下:

此时,路径的第一列都是0。

2.递归

当t = 2为白色时,如果此时在1的条件下观察到,首先计算此时哪个状态最有可能从之前的状态转换过来,取这个最大值,乘以在1的条件下观察到白色的概率,同时记录路径矩阵:如下图所示,权重[0][1]=0.028,来自之前时间的状态3,所以,

3.结束

当t = 3时,最大概率p = 0.0147,相应最佳路径的终点为i3 = 3。

4.回溯

从最佳路径的终点3开始,向前寻找前一时刻的最佳点:

在t = 2时,因为I _ 3 = 3,状态3的最大概率p = 0.0147来自状态3,所以I _ 2 = 3。

当t = 1时,I _ 1 = 3,因为I _ 2 = 3,状态3的最大概率p = 0.042来自状态3。

最后,最优路径是I = (I _ {1},I _ {2},I _ {3}) = (3,3,3)

利用viterbi算法解决中文分词问题根据上述hmm和viterbi算法,构造一个五元组并利用该算法解决中文分词问题。

初始状态:π

transrobmatrix:a

emitprobmatrix:b

维特比解

在此算法之后,获得两个矩阵权重和路径:

二维数组权重[4][15],其中4是状态数(0:b,1:e,2:m,3:s),15是输入句子中的字数。例如,在权重[0][2]代表状态B的情况下,出现“说”字的可能性。

二维数组路径[4][15],其中4是状态数(0:b,1:e,2:m,3:s),15是输入句子中的字数。例如,路径[0][2]表示权重[0][2]最大化时前一个单词的状态,路径[0][2] = 1表示权重[0][2]最大化时前一个单词(即,明)的状态为E。记录前一个词的状态的目的是在用维特比算法计算出整个权重[4][15]后,通过从右向左回溯输入句子来找出相应的状态序列。

一篇文章教你用隐马尔科夫模型实现中文分词

首先初始化权重,

使用initstatus和emitprobmatrix初始化二维权重数组。

从发射矩阵可以得出结论

因此,权重[i][0]的值可以初始化如下:

请注意,上面的公式是通过相加而不是相乘来计算的,因为之前已经取了对数。

然后遍历找到每一项重量的最大值,并记录相应的路径

//遍历句子,下标I从1开始,因为0的初始化刚刚结束。

for(size _ t I = 1;我{

//遍历可能的状态

对于(size _ t j = 0;j {

重量[j][i] =最小双倍;

路径[j][I]=-1;

//遍历前一个单词的可能状态

对于(size _ t k = 0;k {

双tmp =重量[k][I-1]+_ trans rob[k][j]+_ emit prob[j][句子[I]];

如果(tmp >重量[j][i]) //找出最大重量[j][i]值

{

重量[j][i] = tmp。

路径[j][I]= k;

{}

{}

{}

{}

以这种方式遍历,权重[4][15]和路径[4][15]都被计算出来。

确定边界条件和路径回溯

边界条件如下:

对于每个句子,最后一个词的状态只能是E或S,不能是M或b

因此,在这个例子中,我们只需要比较重量[1(e)][14]和重量[3(s)][14]的大小。

在本例中:

重量[1][14]=-102.492;

重量[3][14]=-101.632;

因此,s > e,即路径回溯的起点是路径[3][14]。

回去拿序列

sebembebembebeb .

然后颠倒顺序

bebebmebebmebes

然后切词得到

be/be/bme/be/bme/be/s

最后,我找到了分词的方法

小明/硕士/毕业于/中国/科学院/计算研究所。

hmm的其他应用不仅用于中文分词,而且如果S被句子代替,O被语音信号代替,这就变成了一个语音识别问题,如果S被中文代替,O被英文代替,这就变成了一个翻译问题,如果S被单词代替,O被图像代替,除了词性标注之外,这就变成了一个单词识别问题,等等。

对于上述每个问题,只要我们知道五元组中的三个参数矩阵,我们就可以使用维特比算法得到结果。

雷锋。com相关文章:

深入自然语言处理-看看中文分词如何影响你的生活|努力创建一个开放的课堂

深度学习将改变自然语言处理中的中文分词

雷锋文章版权所有。严禁擅自转载。详情请参考转载说明。

来源:搜狐微门户

标题:一篇文章教你用隐马尔科夫模型实现中文分词

地址:http://www.shwmhw.com/shxw/60212.html