数据集与词性标注

数据集是NLP中的重要一环。

但是提到数据集,很多人的第一个想法可能是:“这玩意从网上下载就好了,不用管”。

真的不用管?最开始我也是这么认为的

于是我直奔CoNLL-2003去下载数据集。地址如下:https://www.clips.uantwerpen.be/conll2003/ner/

但是经过了解,该数据集的来源是新闻报纸之类的内容,与我要应用NLP的领域严重不符。

所以,除非你的NLP任务与网络上已经公布的、较多人实现的任务重合,否则数据集一般不能直接使用

也就是说,在完成你的NLP任务前,你需要自行构建一个数据集

但是怎么做呢?我们现在可以确认的一件事情是:数据集不可能手动构建的

拿CoNLL-2003的数据集进行分析,我们需要构建一个与其形式类似的数据集应该怎么做?

U.N.         NNP  I-NP  I-ORG
official NN I-NP O
Ekeus NNP I-NP I-PER
heads VBZ I-VP O
for IN I-PP O
Baghdad NNP I-NP I-LOC
. . O O

这是eng.traindata数据集的一部分,简单介绍一下构成

第一列是单词,显然是来自原始文本;

第二列是词性(pos)标签,就是名词、动词、专有名词等等一些表示某个词词性的标注

第三列是句法块标签,表示某词在该句子中的上下文成分

第四列是命名实体识别(NER)标签,关于什么是NER,请看

https://www.cnblogs.com/DAYceng/p/14923065.html/

由于句法分析(也就是第三列标签)需要训练单独的模型来实现,这里不做介绍

到这里,事情就变得有点眉目了

我们得到了两个关键词:POSNER

通过高强度互联网搜索发现NLTK正好有用于POS的模块(nltk.pos_tag)以及用于chunk的模块(ne_chunk

查看NLTK的文档得知,pos_tag()的输入是一个进行tokenize分词之后的句子

这里文档使用了word_tokenize模块进行分词,如果你觉得其分词结果不满意,你也可以直接用split分词

tokenized_sentences = corup_token.split(" ")

pos_res = nltk.pos_tag(tokenized_sentences) #标注句子

这样就得到了一个句子的POS 标签

下面进行NER标注,依然是使用NLTK,并且需要使用到上一步中POS的结果

注:chunk的结果是一个“树”(一种特殊的数据结构)

tree = ne_chunk(pos_res)   # 使用nltk的chunk工具获得chunk的树结构

使用tree2conlltags对树进行解析可以得到我们需要的结果

iob_tags_listtup = tree2conlltags(tree) # 解析树,获得chunktags的元组列表

至此,我们就得到了一个句子的pos和ner标签

打包成一个函数如下:

def postags(croup_token,output):
'''
使用nltk.pos_tag对分词之后的summary进行词性标注
:param output:
选择输出形式,
输出原始格式数据(0):[('buffer', 'NN'), ('overflow', 'NN'), ...,(...)]
输出词性标签(1):['NN', 'NN',...,'...']
输出chunking标签(2)
:param croup_token:经过'分词-去除特殊符号-小写'处理的sentences数据
:return:列表返回值
'''
ne_chunked_tags = []
pos_tags = []
pos_raw = [] tokenized_sentences = croup_token_token.split(" ") #nltk.word_tokenize(data)
# print(tokenized_sentences)
pos_res = nltk.pos_tag(tokenized_sentences)
pos_res_tup = pos_res[0] # 得到元组 tree = ne_chunk(pos_res) # 使用nltk的chunk工具获得chunk的树结构
# print(tree)
iob_tags_listtup = tree2conlltags(tree) # 解析树,获得chunktags的元组列表
# print(iob_tags_listtup)
# print(iob_tags_listtup)
for i in range(len(iob_tags_listtup)):
# print(iob_tags_listtup[i])
tmp_tup = iob_tags_listtup[i]
# print(tmp_tup[2])
pos_raw.append(tmp_tup)
pos_tags.append(tmp_tup[1])
ne_chunked_tags.append(tmp_tup[2])
# print(ne_chunked_tags) if output == 0:
return pos_raw
elif output == 1:
return pos_tags
elif output == 2:
return ne_chunked_tags

【NLP学习其四】如何构建自己用于训练的数据集?什么是词性标注?的更多相关文章

  1. 深度学习之TensorFlow构建神经网络层

    深度学习之TensorFlow构建神经网络层 基本法 深度神经网络是一个多层次的网络模型,包含了:输入层,隐藏层和输出层,其中隐藏层是最重要也是深度最多的,通过TensorFlow,python代码可 ...

  2. Caffe学习系列(四)之--训练自己的模型

    前言: 本文章记录了我将自己的数据集处理并训练的流程,帮助一些刚入门的学习者,也记录自己的成长,万事起于忽微,量变引起质变. 正文: 一.流程 1)准备数据集  2)数据转换为lmdb格式  3)计算 ...

  3. caffe︱深度学习参数调优杂记+caffe训练时的问题+dropout/batch Normalization

    一.深度学习中常用的调节参数 本节为笔者上课笔记(CDA深度学习实战课程第一期) 1.学习率 步长的选择:你走的距离长短,越短当然不会错过,但是耗时间.步长的选择比较麻烦.步长越小,越容易得到局部最优 ...

  4. 文本向量化及词袋模型 - NLP学习(3-1)

    分词(Tokenization) - NLP学习(1) N-grams模型.停顿词(stopwords)和标准化处理 - NLP学习(2)   之前我们都了解了如何对文本进行处理:(1)如用NLTK文 ...

  5. UFLDL深度学习笔记 (四)用于分类的深度网络

    UFLDL深度学习笔记 (四)用于分类的深度网络 1. 主要思路 本文要讨论的"UFLDL 建立分类用深度网络"基本原理基于前2节的softmax回归和 无监督特征学习,区别在于使 ...

  6. NLP学习(5)----attention/ self-attention/ seq2seq/ transformer

    目录: 1. 前提 2. attention (1)为什么使用attention (2)attention的定义以及四种相似度计算方式 (3)attention类型(scaled dot-produc ...

  7. nlp学习杂记

    什么是 token embedding? 输入一个word,在字典里查找得到它对应的下标就是token,然后用该数字下标去lookup表查找得到该词对应的词向量(词嵌入)就是embedding wor ...

  8. NLP学习(3)---Bert模型

    一.BERT模型: 前提:Seq2Seq模型 前提:transformer模型 bert实战教程1 使用BERT生成句向量,BERT做文本分类.文本相似度计算 bert中文分类实践 用bert做中文命 ...

  9. [笔记] 基于nvidia/cuda的深度学习基础镜像构建流程 V0.2

    之前的[笔记] 基于nvidia/cuda的深度学习基础镜像构建流程已经Out了,以这篇为准. 基于NVidia官方的nvidia/cuda image,构建适用于Deep Learning的基础im ...

随机推荐

  1. 《面试补习》- Java集合知识梳理

    一.ArrayList ArrayList 底层数据结构为 动态数组 ,所以我们可以将之称为数组队列. ArrayList 的依赖关系: public class ArrayList<E> ...

  2. python安装、卸载包的方法

    anaconda包管理器 conda命令[1] 环境管理 conda info -e # 查看当前已安装的环境 conda create -n py27 python=2.7 # 添加2.7版本的Py ...

  3. Redis的数据安全与性能保障

    1.持久化选项 Redis提供了2种不同的持久化方法来将数据存储到硬盘里面.一种方法叫快照(snapshotting),它可以将存在于某一时刻的所有数据都写入硬盘里.另一种方法叫只追加文件(appen ...

  4. 44、djanjo工程(介绍)

    44.1.什么时web框架: 1.框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用看框架可以 帮助你快速开发特定的形同,简单的说,就是你用别人搭建好的舞台来做 ...

  5. SpringBoot Cache 深入

    这上一篇文章中我们熟悉了SpringBoot Cache的基本使用,接下来我们看下它的执行流程 CacheAutoConfiguration 自动装配类 根据图中标注,看到它引用了CachingCon ...

  6. 企业管理CRM不只是客户录入系统

    企业在举办营销活动或者展会之后,将会收集到大量的客户信息,将这些信息有效地整理.完善.储存也是一个不小的工程.如果您的企业经常面遇到这样的情况,不妨使用Zoho CRM系统来帮您完成.但是,Zoho ...

  7. PV操作的概念

    PV操作:一种实现进程互斥与同步的有效方法,包含P操作与V操作. P操作:使 S=S-1 ,若 S>=0 ,则该进程继续执行,否则排入等待队列. V操作:使 S=S+1 ,若 S>0 ,唤 ...

  8. [心得]zookeeper

    1. 什么是zookeeper? 分布式协调服务 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管 ...

  9. Hadoop0.20.2中MapReduce读取gb2312文件出现乱码问题

    单位用的是Linux系统的字符编码是gb2312,所以生成的文件都是按照默认编码生成的.给我的文件也都是gb2312的,在hadoop中运行mapreduce出现乱码,在网上查资料说是因为hadoop ...

  10. 压力测试工具:apache bench(ab)

    作为php后端工程师,除了实现业务需求之外,需要考虑的就是自己写的服务,在大并发下是否能正常运行了,例如在我之前文章讲到的,在并发下,数据库查询可能会造成脏读幻读等情况,导致业务不正常. 但是,在一般 ...