中文分词算法之HMM算法

2017-05-27  本文已影响0人  galois_xiong

本系列中文十年回顾中讲了时至今日,中文分词中对效果影响最大的是未登录词的识别。今天要讲的就是基于HMM算法的中文分词,可以用来发掘为登录词。

从中文分词角度理解HMM

中文分词,就是给一个汉语句子作为输入,以“BEMS”组成的序列串作为输出,然后再进行切词,进而得到输入句子的划分。其中,B代表该字是词语中的起始字,M代表是词语中的中间字,E代表是词语中的结束字,S则代表是单字成词。
下面是一个用字符标注方法进行识别的一个例子

  小明硕士毕业于中国科学院计算所
  BEBEBMEBEBMEBES
  BE/BE/BME/BE/BME/BE/S
  小明/硕士/毕业于/中国/科学院/计算/所

上面的例子就是一个给定观察序列,得到状态序列,在HMM中就是一个解码过程。

HMM简介

定义: HMM (隐马尔可夫模型) 是关于时序的概率模型, 描述由一个隐藏的马尔可夫链随机生成不可观察的状态序列,再有状态序列生成一个观测序列的过程。
HMM有以下5个要素:
观测序列-O:小明硕士毕业于中国科学院计算所
状态序列-S:BEBEBMEBEBMEBES
初始状态概率向量-π:句子的第一个字属于{B,E,M,S}这四种状态的概率


初始状态

状态转移概率矩阵-A:如果前一个字位置是B,那么后一个字位置为BEMS的概率各是多少


状态转移矩阵

观测概率矩阵-B:在状态B的条件下,观察值为耀的概率,取对数后是-10.460


观测概率矩阵

备注:示例数值是对概率值取对数之后的结果,为了将概率相乘的计算变成对数相加,其中-3.14e+100作为负无穷,也就是对应的概率值是0

三类问题
当通过五元组中某些已知条件来求未知时,就得到HMM的三类问题:

中文分词属于解码问题, 就是对给定的观察序列,求解对应的最优状态的问题。
我们希望找到 s_1,s_2,s_3,... 使 P (s_1,s_2,s_3,...|o_1,o_2,o_3....) 达到最大。
意思是,当我们观测到信号 o_1,o_2,o_3,... 时,我们要根据这组信号推测出发送的句子 s_1,s_2,s_3,....,显然,我们应该在所有可能的句子中找最有可能性的一个。
HMM 的两个假设:

Viterbi 算法

Viterbi算法:是一种动态规划算法。它用于寻找最有可能产生观测事件序列的维特比路径——隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中。
定义在t时刻, 状态为i的所有单路径中最大的值为:



则在t+1时刻有:



则利用上面的两个公式就可以完成解码了。

Reference:

http://blog.csdn.net/u014365862/article/details/54891582

上一篇下一篇

猜你喜欢

热点阅读