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

更新时间:2023-07-11 04:06:42 阅读: 评论:0

【NLP学习其四】如何构建⾃⼰⽤于训练的数据集?什么是词性标注?数据集与词性标注
数据集是NLP中的重要⼀环。
但是提到数据集,很多⼈的第⼀个想法可能是:“这玩意从⽹上下载就好了,不⽤管”。
青春快乐真的不⽤管?最开始我也是这么认为的
于是我直奔CoNLL-2003去下载数据集。地址如下:
但是经过了解,该数据集的来源是新闻报纸之类的内容,与我要应⽤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
这是aindata数据集的⼀部分,简单介绍⼀下构成
第⼀列是单词,显然是来⾃原始⽂本;
第⼆列是词性(pos)标签,就是名词、动词、专有名词等等⼀些表⽰某个词词性的标注
第三列是句法块标签,表⽰某词在该句⼦中的上下⽂成分
第四列是命名实体识别(NER)标签,关于什么是NER,请看
由于句法分析(也就是第三列标签)需要训练单独的模型来实现,这⾥不做介绍
到这⾥,事情就变得有点眉⽬了
我们只需要将第⼀列替换为⾃⼰需要的⽂本,并且获得该⽂本对应的POS和NER标签作为第⼆、三列即可
这⾥有两个关键词:POS和NER
通过⾼强度互联⽹搜索发现NLTK正好有⽤于POS的模块(nltk.pos_tag)以及⽤于chunk的模块(ne_chunk)
查看NLTK的⽂档得知,pos_tag()的输⼊是⼀个进⾏tokenize分词之后的句⼦
这⾥⽂档使⽤了word_tokenize模块进⾏分词,如果你觉得其分词结果不满意,你也可以直接⽤split分词
羡慕的英文
tokenized_ntences = corup_token.split(" ")
pos_res = nltk.pos_tag(tokenized_ntences) #标注句⼦
这样就得到了⼀个句⼦的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:经过'分词-去除特殊符号-⼩写'处理的ntences数据
:return:列表返回值
'''
ne_chunked_tags = []
pos_tags = []
pos_raw = []
tokenized_ntences = croup_token_token.split(" ") #nltk.word_tokenize(data)
# print(tokenized_ntences)
pos_res = nltk.pos_tag(tokenized_ntences)
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
黄鱼面的做法

本文发布于:2023-07-11 04:06:42,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1076573.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:数据   需要   标签   词性   获得
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图