第3章 词性标注(pos、N-gram、NER等标注器)
第3章 词性标注
1.什么是词性标注?
词性(POS)主要指比如名词,形容词,动词等等。虽然目前最先进的词性标注算法在预测给定单词的词性上已经有了较高的精确度(约97%)。
首先,我们需要学习一些现成的POS标注器。
主要的词性有哪些呢?
标签 | 相关说明 |
---|---|
NNP | 专用名词的单数形式 |
NNPS | 专用名词的复数形式 |
PDT | 前置限定词 |
POS | 所有格结束符 |
PRP | 人称代词 |
PRP$ | 所有格代词 |
RB | 副词 |
RBR | 相对副词 |
RBS | 最高级副词 |
RP | 小品词 |
SYM | 符号(数学符号或特殊符号) |
TO | To |
UH | 叹词 |
VB | 动词的基本形式 |
VBD | 动词的过去式 |
VBG | 动词的动名词用法 |
VBN | 动词的过去分词 |
WP | Wh-代词 |
WP$ | 所有格wh-代词 |
WRB | Wh-副词 |
# | 井号符 |
$ | 美元符 |
. | 句号 |
, | 逗号 |
: | 分号,分隔符 |
( | 左括号 |
) | 右括号 |
" | 直双引号 |
‘ | 左单引号 |
“ | 左双引号 |
’ | 右单引号 |
” | 右双引号 |
2.利用pos标注器
简单代码:
import nltk
from nltk import word_tokenize
s="I was watching TV."
print(nltk.pos_tag(word_tokenize(s)))
结果显示:
D:\IR_lab\venv\Scripts\python.exe D:/IR_lab/learn.py[('I', 'PRP'), ('was', 'VBD'), ('watching', 'VBG'), ('TV', 'NN'), ('.', '.')]Process finished with exit code 0
其中
PRP----人称代词
VBD—动词的过去式
VBG—动词的动名词用法
NN—专用名词
筛选词性
比如筛选出名次:
#导入库
import nltk
from nltk import word_tokenize
s="I was watching TV."
#对字符串s标注
tagged=nltk.pos_tag(word_tokenize(s))
#输出所有词性里边的名词
all_noun=[word for word ,pos in tagged if pos in ['NN','mnp']]
print(all_noun)
结果:
D:\IR_lab\venv\Scripts\python.exe D:/IR_lab/learn.py ['TV']Process finished with exit code 0
注意:不能在词性标注之前删除停用词,否则语义不通
虽然Pos标注器能够区分不同词性,但其正确率并不高
3.顺序标注器
N-gram标注器是一种顺序标注器,会在其所在的上下文环境中标注出前n个单词,并预测给定词项的Pos标签。
import nltk
from nltk.corpus import brown
#一元模型标注,只考虑条件概率
from nltk.tag import UnigramTagger
from nltk.tag import DefaultTagger
#会考虑给定单词和该单词前一个单词
from nltk.tag import BigramTagger
#与前面两个都有关
from nltk.tag import TrigramTagger
#brown训练集
brown_tagged_sents = brown.tagged_sents(categories='news')
default_tagger = nltk.DefaultTagger('NN')
#训练集
train_data=brown_tagged_sents[:int(len(brown_tagged_sents)*0.9)]
test_data=brown_tagged_sents[int(len(brown_tagged_sents)*0.9):]
#backoff是指当不能进行正确的标签预测时会咨询backoff
#一元模型
unigram_tagger=UnigramTagger(train_data,backoff=default_tagger)
print(unigram_tagger.evaluate(test_data))
#二元模型
bigram_tagger=BigramTagger(train_data,backoff=unigram_tagger)
print(bigram_tagger.evaluate(test_data))
#三元模型
trigram_tagger=TrigramTagger(train_data,backoff=bigram_tagger)
print(trigram_tagger.evaluate(test_data))
结果:
D:\IR_lab\venv\Scripts\python.exe D:/IR_lab/learn.py
0.8361407355726104
0.8452108043456593
0.843317053722715
4.正则表达式标注器
比如任何以ness结尾的词很可能是名次。NLTK的RegexpTagger参数会为我们提供基于POS模式的标注。
代码如下:
#导入训练集
from nltk.corpus import brown
#NLTK正则标注器
from nltk.tag.sequential import RegexpTagger
#对词性进行标注
brown_tagged_sents = brown.tagged_sents(categories='news')
#测试集
test_data = brown_tagged_sents[int(len(brown_tagged_sents) * 0.9):]
regexp_tagger=RegexpTagger([
( r'^-?[0-9]+(.[0-9]+)?$', 'CD'),
( r'(The|the|A|a|An|an)$', 'AT'),
( r'.*able$', 'JJ'),
( r'.*ness$', 'NN'), #以Ness结尾大多是名词
( r'.*ly$', 'RB'), #以ly结尾大多是副词
( r'.*s$', 'NNS'), #以s结尾的大多是复数名词
(r'.*ing$', 'VBG'), #以ing结尾的大多是动名词
(r'.*ed$', 'VBD'), #以ed结尾的大多数是动词过去式
(r'.*', 'NN')
])
print(regexp_tagger.evaluate(test_data))
结果如下:
D:\IR_lab\venv\Scripts\python.exe D:/IR_lab/learn.py
0.31306687929831556
正确率大约有30%
5.命名实体识别(NER)
NER主要由实体名、位置和组织等。NLTK库提供了ne_chunk方法。需要先对语句进行标识化处理,然后再进行语块分解和词性标注的处理顺序,之后进行命名实体标注。
简单看一看
import nltk
from nltk import word_tokenize
from nltk import ne_chunk
sent="Mark is studying at Stanford University in California"
print(ne_chunk(nltk.pos_tag(word_tokenize(sent)),binary=False))
结果如下:
D:\IR_lab\venv\Scripts\python.exe D:/IR_lab/learn.py
(S(PERSON Mark/NNP)is/VBZstudying/VBGat/IN(ORGANIZATION Stanford/NNP University/NNP)in/IN(GPE California/NNP))
no_chunk能够识别相关人名,地点和组织。
本章小结:
主要学习的是关于词性标注。主要方法有利用POS标注器、N-gram标注还有正则表达式标注
也虚席了NER标注器。
第3章 词性标注(pos、N-gram、NER等标注器)相关推荐
- 从头开始训练一个 NER 标注器
文章目录 从头开始训练一个 NER 标注器 一.自定义模型 1.导入所需要的包与模块 2.导入训练样本 二.训练模型 1.对现有的模型进行优化 2.创建内置管道组件 3.添加train data的标签 ...
- 【NLP】NER数据标注中的标签一致性验证
最近看到一篇论文,是探讨关于NER数据标注中标签一致性问题的. 数据标注在建立基准和确保使用正确的信息来学习NER模型方面起着至关重要的作用.要想获得准确的标签,不仅需要时间还需要专业知识.然而标签错 ...
- 词性标注POS tagging
什么是词性标注,Part-of-speech tagging 比如下面一段标注过词性的文字文字,用空格分开后,/前面的是英文单词,后面表示它的词性. Confidence/NN in/IN the/D ...
- lisp 线性标注自动避让_《数据标注工程》第一章学习笔记及作业:数据标注概述...
第一章:数据标注概述 一.数据标注的起源与发展 1.人工智能行业的发展 AI的概念:意指让机器具有像人一般的智能行为(1956年,达特茅斯会议,由约翰·麦卡锡提出) AI的发展:60多年来,浮浮沉沉. ...
- python网络爬虫的项目背景_第四章 Python即时网络爬虫项目: 内容提取器的定义
1. 项目背景 在python即时网络爬虫项目启动说明中我们讨论一个数字:程序员浪费在调测内容提取规则上的时间,从而我们发起了这个项目,把程序员从繁琐的调测规则中解放出来,投入到更高端的数据处理工作中 ...
- python 闭包_一篇文章读懂Python的闭包与装饰器!
什么是装饰器? 装饰器(Decorator)相对简单,咱们先介绍它:"装饰器的功能是将被装饰的函数当作参数传递给与装饰器对应的函数(名称相同的函数),并返回包装后的被装饰的函数", ...
- 第二十二章 opengl之高级OpenGL(几何着色器)
OpenGL 使用几何着色器 用点造物体 爆破物体 法向量可视化 在顶点和片段着色器之间有一个可选的几何着色器(Geometry Shader), 几何着色器的输入是一个图元(如点或三角形)的一组顶点 ...
- 一篇文章搞懂STL中的空间配置器allocator(原创,多图,易懂)
Table of Contents 0.引入 1.标准的空间配置器allocator 2.更为高效的空间配置器alloc 2.1----对象的构造与析构 2.1.1 对象的构造:::construct ...
- C++编程思想 第1卷 第9章 内联函数 内联函数 访问器和修改器
一些人进一步访问函数的概念分为访问器 accessor,用于从一个对象读状态 信息和 修改器 mutator 用于修改状态信息. 而且,可以用重载函数为访问器 和修改器提供相同函数名,调用函数的方式决 ...
- NLP学习(六)-词性标注问题
nltk词性标注词性对照 1.词性标注器 #词性标注器 text = word_tokenize("今天 的 天气 是 真的 好 苹果") print(pos_tag(text)) ...
最新文章
- 回归 好坏 机器学习_机器学习下的多元回归
- 职场女人的心理问题提醒
- python与数据思维基础笔记_Python小课笔记--Python基础:数据和函数(二)
- python模型训练效果没有优化_LSTM模型训练效果好,但测试结果较差,不能看出拟合过度...
- 装linux时可用空间只有1929k,求Linux命令习题
- 【WebRTC---入门篇】(二十)WebRTC核心之SDP详解
- 视频光端机常见问题解决方法
- Spring Cloud文档阅读笔记-初识Spring Cloud(对Spring Cloud初步了解)
- Automapper 3.2.1以下方法或属性之间的调用不明确
- C# Socket之TCPUDP
- xss绕过尖括号和双括号_【Web安全入门】三个技巧教你玩转XSS漏洞
- 11 空间平面方程 : 参数方程、向量式方程、行列式方程、三点式方程、点法式方程、一般方程
- 用python把图片换成蓝底_用python 将蓝底照片转化为白底照片
- 关于结构化,半结构化,非结构化数据的理解
- tf-toturial
- HTML简单练习——个人名片
- 为什么计算机专业毕业生还要参加IT培训?
- 微机原理与计算机接口技术试卷,微机原理及接口技术期末试卷含答案 好
- 高中教资信息技术Flash动画软件分享
- adams如何保存_ADAMS后处理