隐马尔可夫(HMM)/感知机/条件随机场(CRF)----词性标注
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP
7. 词性标注
7.1 词性标注概述
什么是词性
在语言学上,词性(Par-Of-Speech, Pos )指的是单词的语法分类,也称为词类。同一个类别的词语具有相似的语法性质,所有词性的集合称为词性标注集。不同的语料库采用了不同的词性标注集,一般都含有形容词、动词、名词等常见词性。下图就是HanLP输出的一个含有词性的结构化句子。
我/r 的/u 希望/n 是/v 希望/v 张晚霞/nr 的/u 背影/n 被/p 晚霞/n 映/v 红/a
每个单词的后边跟的就是词性标签:
词性标签 词性 r 代词 u 动词 n 名词 v 动词 nr 人名 p 介词 a 形容词 词性的用处
词性的作用是提供词语的抽象表示,词的数量是无穷的,但词性的数量是有限的。词性支撑着许多高级应用,当下游应用遇到 OOV 时,可以通过 OOV 的词性猜测用法,比如上面的句子“林晚霞”就识别为人名进行处理,而不会拆开。
词性也可以直接用于抽取一些信息,比如抽取所有描述特定商品的形容词等。
词性标注
词性标注指的是为句子中每个单词预测一个词性标签的任务。它有以下两个难点:
汉语中一个单词多个词性的现象很常见,但在具体语境下一定是唯一词性。
OOV 是任何自然语言处理任务的难题。
词性标注模型
统计方法为这两个难点提供了解决方案,那就是我们熟悉的序列标注模型。只需将中文分词中的汉字替换为词语,{B,M,E,S} 替换为“名词、动词、形容词等”,序列标注模型马上就可以用来做词性标注。
词性标注既可以看作中文分词的后续任务,也可以与中文分词集成为同一个任务。其中就可以把分词语料库加上词性标签就可以了,这样同时进行多个任务的模型称为联合模型。由于综合考虑了多种监督信号,联合模型在几乎所有问题上都要优于独立模型。
然而工业界就没有那么理想,同时具有分词和词性标注的语料库非常少,需要大量的人力进行标注。
7.2 词性标注语料库与标注集
同中文分词一样,语言学界在标注规范上存在分歧,导致目前还没有一个被广泛接受的汉语词性划分标准。无论是词性划分的颗粒度,还是词性标签都不统一。一方面,各研究机构各持己见、派系林立,标注了大量互不兼容的语料库。另一方面,部分语料库受到严格版权控制,成为内部材料,得不到充分共享利用。
本节选取其中一些授权宽松, 容易获得的语料库作为案例。
以下示例我们选取 PKU 标注的《人民日报》语料库的标注集。
7.3 基于隐马尔可夫模型的词性标注
之前我们就介绍过隐马尔可夫模型,详细见: 4.隐马尔可夫模型与序列标注
隐马尔可夫模型词性标注代码见(程序会自动下载 PKU 语料库): hmm_pos.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch07/hmm_pos.py
运行代码后结果如下:
一阶隐马尔可夫模型:
r, u, n, v, v, v
他/r 的/u 希望/n 是/v 希望/v 上学/v
他/代词 的/助词 希望/名词 是/动词 希望/动词 上学/动词
李狗蛋/动词 的/动词 希望/动词 是/动词 希望/动词 上学/动词
二阶隐马尔可夫模型:
r, u, n, v, v, v
他/r 的/u 希望/n 是/v 希望/v 上学/v
他/代词 的/助词 希望/名词 是/动词 希望/动词 上学/动词
李狗蛋/动词 的/动词 希望/动词 是/动词 希望/动词 上学/动词
可见隐马尔可夫模型成功的辨别出“希望”的两种词性 n 和 v。但 OOV问题就出现了,无法把“李狗蛋”识别成人名,隐马尔可夫模型一步走错满盘皆输,其根本原因在于隐马尔可夫模型只能利用单词这一个状态特征,无法通过姓氏“李”来推测“李狗蛋”是人名。
7.4 基于感知机的词性标注
之前我们就介绍过感知机模型,详细见: 5.感知机分类与序列标注
按照中文分词时的经验,感知机能够利用丰富的上下文特征,是优于隐马尔可夫模型的选择,对于词性标注也是如此。
感知机模型词性标注代码见(程序会自动下载 PKU 语料库): perceptron_pos.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch07/perceptron_pos.py
运行会有些慢,结果如下:
李狗蛋/nr 的/u 希望/n 是/v 希望/v 上学/v
李狗蛋/人名 的/助词 希望/名词 是/动词 希望/动词 上学/动词
这次的运行结果完全正确,感知机成功的识别出 OOV “李狗蛋”的词性。
7.5 基于条件随机场的词性标注
之前我们就介绍过条件随机场模型,详细见: 6.条件随机场与序列标注
条件随机场模型词性标注代码见(程序会自动下载 PKU 语料库): crf_pos.py
https://github.com/NLP-LOVE/Introduction-NLP/tree/master/code/ch07/crf_pos.py
运行时间会比较长,结果如下:
李狗蛋/nr 的/u 希望/n 是/v 希望/v 上学/v
李狗蛋/人名 的/助词 希望/名词 是/动词 希望/动词 上学/动词
依然可以成功识别 OOV “李狗蛋”的词性。
7.6 词性标注评测
将 PKU 语料库按 9:1 分隔为训练集和测试集,分别用以上三种模型来训练,准确率如下:
算法 | 准确率 |
---|---|
一阶隐马尔可夫模型 | 44.99% |
二阶隐马尔可夫模型 | 40.53% |
结构化感知机 | 83.07% |
条件随机场 | 82.12% |
从上图可知,结构化感知机和条件随机场都要优于隐马尔可夫模型,判别式模型能够利用更多的特征来进行训练,从而提高更多的精度。
7.7 自定义词性
在工程上,许多用户希望将特定的一些词语打上自定义的标签,称为自定义词性。比如,电商领域的用户希望将一些手机品牌打上相应标签,以便后续分析。HanLP 提供了自定义词性功能。具体有两种实现。
朴素实现
可以使用HanLP挂载的方式实现:
from pyhanlp import * CustomDictionary.insert("苹果", "手机品牌 1")
CustomDictionary.insert("iPhone X", "手机型号 1")
analyzer = PerceptronLexicalAnalyzer()
analyzer.enableCustomDictionaryForcing(True)
print(analyzer.analyze("你们苹果iPhone X保修吗?"))
print(analyzer.analyze("多吃苹果有益健康"))
当然,此处以代码的方式插入自定义词语,在实际项目中也可以用词典文件的方式,运行效果如下:
你们/r 苹果/手机品牌 iPhone X/手机型号 保修/v 吗/y ?/w
多/ad 吃/v 苹果/手机品牌 有益健康/i
从结果来看,词典只是机械的匹配,将“吃苹果”也当成了手机品牌,犯了所有规则系统的通病,看来词典同样解决不了词性标注,词性标注还是应当交给统计方法。
标注语料
词性的确定需要根据上下文语境,这恰好是统计模型所擅长的。为了实现自定义词性,最佳实践是标注一份语料库,然后训练一个统计模型。
至于语料库规模,与所有机器学习问题一样,数据越多,模型越准。
7.8 GitHub
HanLP何晗--《自然语言处理入门》笔记:
https://github.com/NLP-LOVE/Introduction-NLP
项目持续更新中......
目录
章节 |
---|
第 1 章:新手上路 |
第 2 章:词典分词 |
第 3 章:二元语法与中文分词 |
第 4 章:隐马尔可夫模型与序列标注 |
第 5 章:感知机分类与序列标注 |
第 6 章:条件随机场与序列标注 |
第 7 章:词性标注 |
第 8 章:命名实体识别 |
第 9 章:信息抽取 |
第 10 章:文本聚类 |
第 11 章:文本分类 |
第 12 章:依存句法分析 |
第 13 章:深度学习与自然语言处理 |
隐马尔可夫(HMM)/感知机/条件随机场(CRF)----词性标注的更多相关文章
- HMM(隐马尔科夫模型)与分词、词性标注、命名实体识别
转载自 http://www.cnblogs.com/skyme/p/4651331.html HMM(隐马尔可夫模型)是用来描述隐含未知参数的统计模型,举一个经典的例子:一个东京的朋友每天根据天气{ ...
- 隐马尔可夫(HMM)、前/后向算法、Viterbi算法
HMM的模型 图1 如上图所示,白色那一行描述由一个隐藏的马尔科夫链生成不可观测的状态随机序列,蓝紫色那一行是各个状态生成可观测的随机序列 话说,上面也是个贝叶斯网络,而贝叶斯网络中有这么一种,如下 ...
- 深入理解隐马尔可夫(HMM)模型
1.安装依赖包hmmlearn 直接pip install hmmlearn可能会报错(安装这个模块需要使用C环境编译) 可以尝试用 conda install -c omnia hmmlearn安装 ...
- [转] 隐马尔可夫(HMM)、前/后向算法、Viterbi算法 再次总结
最近工作需要优化LSTM-CRF经典模型中的维特比解码部分,发现对维特比一直是个模糊概念,没有get到本质,搜了一圈,发现一篇好文,mark 博主不让转载,mark个地址吧: https://blog ...
- 隐马尔科夫模型 HMM(Hidden Markov Model)
本科阶段学了三四遍的HMM,机器学习课,自然语言处理课,中文信息处理课:如今学研究生的自然语言处理,又碰见了这个老熟人: 虽多次碰到,但总觉得一知半解,对其了解不够全面,借着这次的机会,我想要直接搞定 ...
- 机器学习(九)隐马尔可夫模型HMM
1.隐马尔可夫HMM模型 一个隐马尔可夫模型可以表示为\[\lambda=\{A,B,\pi\}\]具体就不说了,比较基本. 2.HMM模型的三个基本问题 1.概率计算问题:给定\(\lambda\) ...
- Python实现HMM(隐马尔可夫模型)
1. 前言 隐马尔科夫HMM模型是一类重要的机器学习方法,其主要用于序列数据的分析,广泛应用于语音识别.文本翻译.序列预测.中文分词等多个领域.虽然近年来,由于RNN等深度学习方法的发展,HMM模型逐 ...
- 详解隐马尔可夫模型(HMM)中的维特比算法
笔记转载于GitHub项目:https://github.com/NLP-LOVE/Introduction-NLP 4. 隐马尔可夫模型与序列标注 第3章的n元语法模型从词语接续的流畅度出发,为全切 ...
- 一文搞懂HMM(隐马尔可夫模型)
什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序,意味着具有确定和有 ...
随机推荐
- Antd将Table导出为Excel
Antd将Table导出为Excel 在最近的项目中,需要把表格中的数据导出给财务进行统计,网上很多一键导出的按钮都没用.经过东拼西凑,最终搞定了导出,自己封装了组件. import { File } ...
- 基于Antd框架的通信与交互
基于Antd框架的通信与交互 1.与用户交互 对于input输入框,在于用户交互的过程中,用户在输入任何东西时,都会引起该组件的onChange事件(如果写有这个方法的话). <FormItem ...
- mysql索引最佳实践
索引最佳实践使用的表CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(24) NOT ...
- linux下安装OpenCV-2.4
OpenCV(Open Source Computer Vision Library),是一个跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. OpenCV由一系列 C 函数和少量 ...
- 【Java基础总结】总结
总想着把学习的过程全都记录下来 以便某一时刻回头的时候,还能看见走过的路 对于基础来说,即使不回头看,也知道这条路是什么样子的 记录不记录,都无所谓 况且我不是专业的记录者,不记录比记录好 实在想不起 ...
- 【重要】Pro Git 第二版 简体中文
不管是入门还是精通git,下面这本书都是必读,同时它也是官方推荐书籍. Pro Git 第二版 简体中文 我自己还收集了一份网页版的progit,但可能不是progit第二版. 下载地址 ...
- .NET 在云原生时代的蜕变,让我在云时代脱颖而出
.NET 生态系统是一个不断变化的生态圈,我相信它正在朝着一个伟大的方向发展.有了开源和跨平台这两个关键优先事项,我们就可以放心了.云原生对应用运行时的不同需求,说明一个.NET Core 在云原生时 ...
- 重拾c++第三天(6):分支语句与逻辑运算符
1.逻辑运算符 && || ! 2.关系运算符优先级高于逻辑运算符 3.cctype库中好用的判断 4. ?:符号用法: 状态1?结果1:结果2 5.switch用法: switch ...
- vPlayer 模块Demo
本文出自APICloud官方论坛 vPlayer iOS封装了AVPlayer视频播放功能(支持音频播放).iOS 平台上支持的视频文件格式有:WMV,AVI,MKV,RMVB,RM,XVID,MP4 ...
- cogs 2. 旅行计划 dijkstra+打印路径小技巧
2. 旅行计划 ★★ 输入文件:djs.in 输出文件:djs.out 简单对比时间限制:3 s 内存限制:128 MB [题目描述] 过暑假了,阿杜准备出行旅游,他已经查到了某些城市 ...