图示:IT可达鸭、网络资料
随着大规模语料库的建立以及统计学与机器学习方法的研究深入,基于统计的中文分词算法逐渐成为主流分析手段。
主要思想是:将每n(n≥1)个相邻的字(可能存在重叠)视作一个待识别的词汇。若该待识别词汇在多种文本中频繁出现,那么它很有可能就是一个实际存在的词汇。
我们可以通过计算字与字相邻出现的频率来评估组成词的可靠性。统计语料中各个字的组合频率,当这一频率超过特定阈值时,便可认为该字的组合是一个词汇。
隐含马尔可夫模型(HMM)则将分词视为字在句子中的序列标注问题。其基本思路为:每个字在构造特定词语时占据确定的词位。设定每个字最多有四种构词位置,即B(词首)、M(词中)、E(词尾)和S(单独成词)。
举个例子来说明:
在HMM的应用之前,需满足三个基本假设。
假设一:有限历史性假设,采用二元模式,每个字仅与上一下一字有关联;
假设二:观测独立性假设,输出仅依赖于当前状态;
假设三:齐次性假设。
HMM的标注必须符合一系列规则,如BE、BME、BMME、BM...ME(中间M的个数大于等于0)、S等情况。
简单来说,HMM是一个通过观察序列来求解隐含序列的过程。
具体地说,就是最大化P(字序列|标签序列)的概率。
在求解HMM的过程中,需维护三个矩阵:1. 初始概率分布;2. 状态转移矩阵A(标签到标签的概率);3. 观察概率分布B(标签到观察变量的概率)。
根据第一个假设,若最终最优路径经过某一节点o(i),那么从初始节点到o(i-1)的路径也必然是最优路径,因为每个节点o(i)仅影响其前后两个节点的标签概率。可通过Viterbi算法来求解最大化P(字序列|标签序列)的问题。
在HMM模型中,Viterbi算法是最常用的求解方法。它是一种动态规划方法,其核心思想如图所示。为便于演示,我们使用1、2、3代替HMM中的BMES标注,用A、B、C代表字符。
基于假设一,每一列的节点只能与相邻列的节点相连,不能跨列连接,节点间有不同距离。
为找出start到end间的最短路径,我们从Start开始,自左至右逐列分析。
以B列为示例,经过B列各点的路径有多种可能。我们需计算各路径的总距离,找出其中最短路径,并删除其他不可能的路径。此过程需逐个分析B列的B1、B2、B3等点。
对于给定的可观察序列ABC,其标注结果为2、3、2。
HMM起初可能较难理解,但通过一些简单例子进行推理,便能较好地掌握HMM的过程。这里所讲述的内容综合了个人理解及网上示例,难免有不当之处,欢迎指正。
参考:如何通俗地讲解Viterbi算法(来自知乎)
持续关注"IT可达鸭",除了分享有趣的Python源码,还有NLP算法的介绍。感谢大家的阅读,祝大家工作生活愉快!