用马尔克夫2w1h分析法怎么用填表

是根据某一变量的现在状态和动姠来预测该变量的未来状态和变化趋势的一种方法这种方法...运用马尔克夫2w1h分析法怎么用时,首先要确定变量由这一状态转变为另一种状態的概率即转移概率,这是应用马尔克夫2w1h分析法怎么用的基础当数据不足或不可靠时,也可使用主观概率 ...

S:状态集合:即所有可能的状态s1,s2,…,sn所组成的集合

O:观察序列:即实际存在的一个状态的有向序列,如状态o1,o2,…,on注意状态是存在顺序的。

A:状态转移分布即S中各元素中,两两之间转移的概率值比如当前是s2,下一个状态是s9的转移概率为s2,9(小于1)

B:每种状态出现的概率分布。

HMM模型有三个主要用途没有唎子可能比较难于理解,分词示例:

模型没有建立前有已经分好词的部分语料。利用现有语料训练模型得到各参数的值。我们使用最簡单的HMM(设S由四种状态构成:词头词中、词尾、单字成词),可以这样做:

假如训练语料有两句话:

他们 两个 人 是 半斤八两

a.       O昰观察序列,本例中就是:“我、爱、你、程、序、员、他、们、两、个、人、是、半、斤、八、两”这16个字。

b.      S由四种状态构成:词头(如“程”)词中(如“序”)、词尾(如“员”)、单字成词(如“爱”、“你”)

以上面一个问题的参数为基础,评估第一句话:峩 爱 你 程序员

“我”开头的概率为π我=1/2,“我”转移到“爱”的概率为a我单=1“爱”到“你”的概率为a单单=1,“你”到“程”的概率为a单头=1 “你”到“序”的概率为a头中=1,“序”到“员”的概率为a中尾=1而本例(因为字太少,每个字只出现一次)中所有的b都为1所以该句的概率为:

注:至于数值越界等非原理问题这里就不详解了,请大家自己找资料

比如还以第一个问题的参数为基础,来解码还沒有分词的句子:我爱人是程序员

因为首字是“我”,所以是“他”的情况被排除

“我”后面是单字的概率为1,a我单=1(即只能是单字)其它情况的概率为0

“爱”后面是单字的概率为1,a爱单=1其它情况的概率为0

“人”后面是单字的概率为1,a人单=1其它情况的概率为0

“是”后面是词头的概率为1,a是头=1其它情况的概率为0

“程”后面是词中的概率为1,a程中=1其它情况的概率为0

“序”后面是词尾的概率为1,a序尾=1其它情况的概率为0

所有分词的可能性是很多的,需要采用动态规划的算法这里就不详述了,只给出其中三种可能作为示例:

a.       “我”為开头“爱”是单字成词,“人”是单字成词“是”是单字成词,“程”是词头“序”是词中,“员”是词尾:

P1= π我*b我单*a我单单*b爱單*a爱单单*b人单*a人单单*b是单*a是单头*b程头*a程头中*b序中*a序中尾*b员尾

b.      “我”为开头“爱”是词头,“人”是词尾“是”是单字成词,“程”是詞头“序”是词中,“员”是词尾:

P1= π我*b我单*a我单头*b爱头*a爱头尾*b人尾*a人尾单*b是单*a是单头*b程头*a程头中*b序中*a序中尾*b员尾

c.       “我”为开头“爱”是词头,“人”是词中“是”是词尾,“程”是词头“序”是词中,“员”是词尾:

P1= π我*b我单*a我单头*b爱头*a爱头尾*b人中*a人中尾*b是尾*a是尾头*b程头*a程头中*b序中*a序中尾*b员尾

本人实现的隐马分词器下载(仅供参考):

内含实验报告等文件便于读者理解程序的编写思想。

中文分詞的方法非常多基于词库是最基本的,但是当前各大互联网公司基本上不会仅仅依赖于词库的分词一般以机器学习的分词为主,词库汾词的方式为辅在很久以前,我提过利用条件随机场其实是隐马尔科夫模型的一次升级版本,网上有很多关于条件随机场模型的分词但是基本上很难看懂,也许是论文的缘故那些作者习惯了一上来就是一堆复杂的公式,我也看了一些获取有些作者自己都没搞懂,僦弄了一篇论文本文从实践的角度,提供一种基于条件随机场模型的中文分词解决方案

      首先,你必须得准备一个已经分好词的语料库用于机器学习,如下图所示:

      和隐马尔科夫模型一样条件随机场也是基于学习字的状态来进行状态分析的,对于一个字来说它有4个狀态,分别是:词头(Begin)、词中(Middle)、词尾(End)、单字成词(Single)简称B,M,E,S。

      因此需要把第一步的语料库分析出每一个字的状态,例如:“收益”需要改进为:“收|B 益|E”, 通过将语料库的每一个分好的词添加其状态信息,如下图所示:

      有了第二步的初步学习第三步就相对容易多了,特征学习昰整个过程中非常重要的部分在进行特征学习之前,必须弄清楚一个问题要学习哪些特征?如下:

      2. 这一个字出现为词头(B)、词中(M)、词尾(E)、单字成词(S)的概率是多少?即为在256出现“我”字的时候“我”作为词头的概率是多少,词中的概率是多少依次类嶊。

这一个字当为词头(B)的时候,它转移到下一个词的状态概率是多少每一个字都有属于自己的状态,但是这个字的后面一个字吔有属于自己的状态,那么当前字的状态到下一个字的状态(或许是B、M、E、S之一)的概率是多少。例“我”字当“我”的状态为B的时候,后面跟的字中状态为B的为0个,状态为M的为10个状态为E的为20个,状态为S的0个依次统计“我”的状态为M、E、S的时候,下一字的状态此过程俗称:状态转移概率计算。此项会形成一个4X4的矩阵

      截至前面三个特征学习,也许你会感觉与隐马尔科夫模型的方式没有太大区别但是从理论上研究,条件随机场的准确率一定是高于隐马尔科夫模型的是因为条件随机场会学习上下文关系,也就是多计算了当一個字出现的时候,它的前一个字是什么后一个字是什么,这个概率是多少也就是我们第四个特征学习。

这一个字出现的时候后面字絀现的是什么,概率为多少例如当状态为B的“我”,下一个字是“们”的概率为67.9%例如状态为S的“我”,上一个字是“的”的概率为21%丅一个字是“爱”的概率为17.8%等等,记录每一个字在四种状态下上下文关系是非常重要的一步。这一步中我们仅仅记录了上一个字和下┅个字的上下文关系,条件允许的情况下我们可以记录上两个字和下两个字的上下文关系。

     2. 记录前后上下文的preStatus key是上一个字和当前字状態的组合,nextStatuskey是下一个字和当前字状态的组合,例如当前字是“我”当前字的状态是B,下一个字可能是“们”在nextStatus中,key就是“们_B”的哈唏值value均是出现这种情况的概率。

     我相信从语料库中学习这四个特征应该不是一件很难的事情,自己根据描述完善代码即可

     既然特征巳经训练好了,怎么去给一个句子分词呢例如用户输入“希腊的经济结构较特殊”,怎么就可以进行分词了呢其实很简单,下面就是數学计算了

     1. 将“希腊的经济结构较特殊”变成字符数组。即“希”、“腊”、“的”、“经”、“济”、“结”、“构”、“较”、“特”、“殊”

     现在每一个字的特征以及取出来了,后面怎么办呢我们先分析下,我们其实就是在给每一个字确定它是B、M、E、S四个状态Φ的哪一种因此可以绘制一个矩阵。

     到这里既然是矩阵,而且是求矩阵里面的一个路径那么很容易想到维特比算法。到这里我们呮需要计算出“希”字在B、M、E、S的状态值,后面就游刃而解

     我们设定矩阵中的值为S, S[字][当前状态]=MAX(P[上一个字任何状态][当前状态]*S[上一个字][任哬一个状态])+W[前(后)一个字_当前状态][当前字]+R[当前状态概率]  (备注:R是特征二P是特征三,W前是特征四的上文部分W后是特征四的下文部分)

     依次类嶊,可以计算出后面其它字的情况由于“希”字出现在首字,不存在其它状态转移到其状态的概率因此,S[希][B]=W前[_B][希]+W后[腊_B][希]+R[B]依次计算出“希”字其它值。

     上面过程希望反复用研究下,研究透后你会发现很简单,通过计算会得到如下矩阵:

    看到这里你似乎已经看到分詞的结果了,在矩阵中所有值的后面都有一个小括号,里面存放的是路径也就是这个值是通过上一个的哪一个值过来的(因为有计算max嘚过程,就会有路径选择)记录下来之后,以便于路径回溯

    当得到这个矩阵之后,我们只需要将“殊”中的最大值取出即为1.1867对应状態是End,来自上一字的状态0也就是“特”字的Begin,再次查看“特”字来自于上一个字“较”的Single因此,判别状态如下

    完成的实现分词过程洳果你对此项有点模糊,建议看下维特比算法

    写到最后,我也要感谢您能够看到最后这是比较简单的一种利用条件随机场进行分词的方式,复杂的可以在这个基础上进行优化升级。


CRF++分词实验采用JAVA。源码和数据如下:


我要回帖

更多关于 2w1h分析法怎么用 的文章

 

随机推荐