本系列中文十年回顾中讲了时至今日,中文分词中对效果影响最大的是未登录词的识别。今天要讲的就是基于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的三类问题:
- 似然度问题:参数(O,π,A,B)已知的情况下,求(π,A,B)下观测序列O出现的概率
- 解码问题:参数(O,π,A,B)已知的情况下,求解状态值序列S。(viterbi算法)
- 学习问题:参数(O)已知的情况下,求解(π,A,B)。(Baum-Welch算法)
中文分词属于解码问题, 就是对给定的观察序列,求解对应的最优状态的问题。
我们希望找到 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 的两个假设:
-
有限历史假设:si 只由si-1 决定
-
独立输出假设:第 i 时刻的接收信号 oi 只由状态 si 决定
基于上面的两个假设,解码问题可以推导如下:
Viterbi 算法
Viterbi算法:是一种动态规划算法。它用于寻找最有可能产生观测事件序列的维特比路径——隐含状态序列,特别是在马尔可夫信息源上下文和隐马尔可夫模型中。
定义在t时刻, 状态为i的所有单路径中最大的值为:
则在t+1时刻有:
则利用上面的两个公式就可以完成解码了。