基于隐马尔可夫模型的有监督词性标注
转载自:http://blog.csdn.net/xum2008/article/details/38309605
词性标注(Part-of-Speech tagging 或 POS tagging)是指对于句子中的每个词都指派一个合适的词性,也就是要确定每个词是名词、动词、形容词或其他词性的过程,又称词类标注或者简称标注。词性标注是自然语言处理中的一项基础任务,在语音识别、信息检索及自然语言处理的许多领域都发挥着重要的作用。
词性标注本质上是一个分类问题,对于句子中的每一个单词W,找到一个合适的词类类别T,也就是词性标记,不过词性标注考虑的是整体标记的好坏,既整个句子的序列标记问题。对于分类问题,有很多现成的数学模型和框架可以套用,譬如HMM、最大熵模型、条件随机场、SVM等等,在本博客中我们介绍基于隐马尔可夫模型(HMM)的词性标注。
1 隐马尔可夫模型(HMM)
隐马尔科夫模型(HMM)是什么?说白了,就是一个数学模型,用一堆数学符号和参数表示而已,包括隐藏状态集合、观察状态集合、初始概率向量, 状态转移矩阵A,混淆矩阵B。
此外,我们还需要一个不同天气发生的先验概率,也即地牢外面常年统计获得的三种天气发生概率,通常称为 。假定(sun,cloud,rain)发生的先验概率为:
现在我们已经有HMM的两个参数,还缺一个关于观测状态的参数。在地牢中,诗人可以观测的量只有苔藓的状态,为简化起见,假设苔藓的变化只有四种状态:非常潮湿(Soggy)、潮湿(Damp)、干燥(Dryish)和非常干燥(Dry)。这些可观测的状态都和隐藏的天气相关,如图三所示。每一个隐藏的天气状态都可能会产生苔藓的四种状态,又只是概率不同而已。为了描述这个概率,需要引入一个混淆矩阵(confuse matrix),又叫发射矩阵。用来描述不同天气状态下产生苔藓不同状态的概率,如图四所示。
图三 隐藏天气状态和观测状态之间的关系
混淆矩阵描述了HMM的第三个参数,通常称为B。假定有M个可观测状态,则混淆矩阵是N*M的矩阵,并且每一行的概率为1,表示在某个天气状态下,苔藓肯定属于(Soggy,Damp,Dryish,Dry)中的一种状态。
图四 HMM的混淆矩阵
整个HMM就是由上述三元组构成,可以用HMM表示。知道了这三个参数,我们就可以完全了解整个HMM。HMM可以用来解决三个问题:
- 给定一个模型,如何计算某个特定的观测序列的概率;
- 给定一个模型和某个特定的观测序列,如何找到最可能产生这个输出的隐藏状态序列;
- 给定足够的观测数据,如何估计HMM的三个参数。
在语音识别领域,主要关注第一和第三个问题,在词性标注中主要关注第二和第三个问题。解决第一个问题的用途是:在有多个HMM的情况下,选择使概率最大的HMM。在语音识别领域,需要对每个词构建一个HMM模型,就将语音识别成概率最大的HMM对应的词。解决第二个问题的用途是可以知道观测序列最有可能的隐藏状态序列,词性标注就是解决这个问题。第三个问题对所有应用HMM的人来说都非常重要,但是也最难,也即训练模型参数。HMM的三个参数并不是凭空想出来的,而是训出来的。
第一个问题可以通过前向算法快速解决,第二个问题需要利用Viterbi算法解决,第三个问题则有两种方法解决:有监督或者无监督。有监督的参数训练通过标注训练集统计获得相关参数,难度较低;无监督的参数训练则通过鲍姆-韦尔奇算法迭代训练获得,难度很大。在此我们介绍有监督的词性标注,也即HMM参数的训练通过统计语料库获得。
2 词性标注
2.1 中文分词
2.2 HMM参数训练
统计上述信息的关键是解析语料库,解析通过下面三句正则表达式完成:
- // 获取预料语料库中的一个个不同的词组(以空格分开),词组后附有相应的词性
- text = content.toString().split("\\s{1,}");
- // 去除词性标注,只保存词组
- phrase = content.toString().split("(/[a-z]*\\s{0,})");//"/"后面跟着一个或者多个字母然后是多个空格
- // 获取语料库中从前往后的所有词组的词性
- characters = content.toString().split("[0-9|-]*/|\\s{1,}[^a-z]*"); //开头的日期或者空格+非字母作为分隔符
注释已经详细解释了正则表达式的含义,在此不再赘述。获得上述信息之后,我们就可以很容易地统计相关信息,进而利用频率算概率。词性先验概率的计算没有任何难度。隐藏状态转移矩阵按照公式:
2.3 再次分词
再次分词的算法很简单。既然我们已经统计了HMM中出现过的所有可观测状态M,则将分词的结果在所有的状态中查找即可。找不到的分词分成两部分作为新的分词。
2.4 Viterbi算法
终于要说到大名鼎鼎的Viterbi算法了,但是从难度上来说,它远不如模型的参数训练麻烦,所以其实它很简单。为了更数学化的描述该算法,我们先声明几个符号:
在介绍Viterbi算法在计算隐藏状态序列的优越性之前,我们先考虑穷举算法。还是考虑一开始的诗人天气预测问题。假设诗人连续三天观测到苔藓的状态为(dry,damp,soggy),现在要求最可能的天气状态。最简单但是最笨的方法是将三天的所有天气组合罗列出来,然后求每一种组合的概率,选择概率最大的组合即可,如图七所示。
图七 观测序列的所有可能隐藏序列组合
按照上面穷举算法,最可能的状态序列求法如下:
假定有T个可观测状态,给定一个隐藏状态序列,计算复杂度为O(2T),所以总的复杂度为O(2TNT)。显然这个复杂度为指数级,无法应用到实际中,基于动态规划的Viterbi算法应运而生。
既然要求最可能的隐藏状态序列,则其必然满足该序列发生的可能性最大,同时子序列也满足最优子结构:x0,x1,…,xt发生的概率也必须最大,否则可以替换成概率更大的序列,从而产生更好的序列,这与前提矛盾。DP算法有两个关键点:递归方程和初始化。假定我们现在已经求得了最可能发生的前t个隐藏状态,在求t+1个状态时,我们需要从第t个状态中选择最优的一个状态。由于在时刻t,共有N个可以选择的隐藏状态,所以t+1时刻的计算就是从这N个状态中选择一个使t+1状态概率最大的。初始化主要是依赖于先验概率。由此可得Viterbi算法的步骤:
- 令,i=0,1,…,N-1;
对t=1,2,…,T-1,i=0,1,…,N-1,计算:
在时刻T-1会得到以N个不同状态结尾的概率,选择概率最大的状态:
计算最大概率不是目的,目的是要找到使概率最大的隐藏序列,这就需要保存每一步计算过程中选择的最优状态,然后回溯即可。
Viterbi算法的计算可以通过图八说明。黄色的一列是需要初始化的列,红色方格的计算依赖绿色的列,最后结果是蓝色列中的最大值。计算完成之后,再通过回溯找到最优的隐藏状态序列。
图八Viterbi算法的矩阵计算过程
有了Viterbi算法,我们就可以快速获得最优的隐藏序列,由于图八中的矩阵总共有N*T个元素,每个元素的计算复杂度为O(N),所以总的复杂度为O(TN2)。在实际的实现过程中,我们最好将隐藏状态和观测状态交换一下位置,也即对上述矩阵进行转置,这是因为如果按照图八的方式,每一列元素实际上是不相邻的,这会导致非常严重的cache缺失,从而会使计算性能下降,图示只是为了描述方便才这样画的。
3 总结
4 参考资料
基于隐马尔可夫模型的有监督词性标注相关推荐
- python地图匹配_基于隐马尔科夫模型(HMM)的地图匹配(Map-Matching)算法
1. 摘要 本篇博客简单介绍下用隐马尔科夫模型(Hidden Markov Model, HMM)来解决地图匹配(Map-Matching)问题.转载请注明网址. 2. Map-Matching(MM ...
- 基于隐马尔科夫模型文本相似度问题研究
文本相似度是表示两个或者多个文本之间匹配程度的一个度量参数,相似度数值大,说明文本相似度高:反之文件相似程度就低.文本相似度的精确计算问题是进行信息处理的关键. 在如今信息技术飞速发展的互联网时代,文 ...
- 20200918:【广发金融工程】2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究
参考链接:https://www.sohu.com/a/252454782_465470 [广发金融工程]2018年重磅专题系列之九:基于隐马尔科夫模型的选股策略研究 2018-09-07 11:26 ...
- m基于隐马尔科夫模型(HMM)的手机用户行为预测(MMUB)算法matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 隐马尔可夫模型(Hidden Markov Model,HMM)是一种统计模型,广泛应用在语音识别, ...
- 基于隐马尔科夫模型的道路匹配
随着导航定位.移动互联网等技术的快速发展,手机.车载定位装置等设备都可以进行地理空间数据采集.这些不同类型的地理空间数据往往能反映出某种规律.以时空轨迹为例,这些新形式的泛在地理空间数据,能够反映个体 ...
- 中文分词与马尔科夫模型之二:隐马尔科夫模型与维特比
转载自:http://blog.sina.com.cn/s/blog_68ffc7a40100uebv.html 前面一篇博客讲到了中文分词的机械分词算法,这种算法实现相对比较简单,但是分词效果还是有 ...
- 使用隐马尔科夫模型实现分词
文章目录 算法概述 算法实现 参考结论 参考资料 参考链接 算法概述 分词算法常用的方法是基于统计的机器学习算法.可以使用 隐马尔科夫模型(HMM) 来实现分词. 隐马尔科夫模型的基本思想是假设一个序 ...
- 隐马尔可夫模型(HMM)****
1.cikit-learn 0.17之后就不再支持隐马尔可夫模型,而是将其独立拎出来作为单独的包.其中: hmmlearn:无监督隐马尔可夫模型 seqlearn :监督隐马尔可夫模型 2.一些通用的 ...
- 验证基于逻辑回归的隐马尔可夫模型的心音信号切分算法(literature study)
这篇文章展示的是基于逻辑回归的隐马尔可夫模型(Logistic regression based hidden semi-Markovmodel (HSMM))心音信号切分方法. 参考文章可以到文末查 ...
最新文章
- 【学亮IT手记】jQuery DOM插入操作
- 《Unit Testing》2.1 经典学派如何做测试隔离
- ctf php 读取flag,BugkuCTF flag.php(反序列化)
- 实现用户注册功能---文件保存信息,如果用户名存在就死循环继续
- [APEC中小企业峰会2009上]对话:经济适用男 vs 超级豪华男
- Tomcat加载类机制 - 我们到底能走多远系列(14)
- 如何让git小乌龟工具TortoiseGit记住你的账号密码
- ICML22:NAFS: A SIMPLE YET TOUGH-TO-BEAT BASELINE FOR GRAPH REPRESENTATION LEARNING(ICLR22转投)
- 异速联客户端未获取到服务器信息,异速联客户端登陆服务器地址
- 智能小车制作过程全纪录:一、硬件平台
- 《软件工程》第6章体系结构设计
- LATEX编译出现Undefined control sequence.
- lack名词形式_lack用法
- 经典重写alert方法
- vs2019如何关闭自动更新
- python爬虫m3u8#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:8 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:5.0000
- matlab后退和前进的快捷键,MATLAB 常用操作命令和快捷键
- 多区域 DNS 服务,子域授权,缓存 DNS及Split 分离解析的原理和实现
- python简单游戏程序-python基础练习之几个简单的游戏
- 收集的一些名人经典语录