700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 文本预处理的基本方法(分词 词性标注 命名实体识别)

文本预处理的基本方法(分词 词性标注 命名实体识别)

时间:2022-09-26 04:53:35

相关推荐

文本预处理的基本方法(分词 词性标注 命名实体识别)

文本预处理及其作用

文本语料在输送给模型前一般需要一系列的预处理工作, 才能符合模型输入的要求, 如: 将文本转化成模型需要的张量, 规范张量的尺寸等, 而且科学的文本预处理环节还将有效指导模型超参数的选择, 提升模型的评估指标.

文本预处理中包含的主要环节

文本处理的基本方法(分词、词性标注、命名实体识别)文本张量表示方法(one-hot编码、Word2vec、Word Embedding)文本语料的数据分析(标签数量分布、句子长度分布、词频统计与关键词词云)文本特征处理(添加n-gram特征、文本长度规范)数据增强方法(回译数据增强法)

什么是分词

分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是字、句和段能通过明显的分界符来简单划界,唯独词没有一个形式上的分界符, 分词过程就是找到这样分界符的过程.分词的作用: 词作为语言语义理解的最小单元, 是人类理解文本语言的基础. 因此也是AI解决NLP领域高阶任务, 如自动问答, 机器翻译, 文本生成的重要基础环节.流行中文分词工具jieba: 愿景: “结巴”中文分词, 做最好的 Python 中文分词组件.jieba的特性: 支持多种分词模式 精确模式全模式搜索引擎模式支持中文繁体分词支持用户自定义词典jieba的使用:精确模式分词: 试图将句子最精确地切开,适合文本分析.

import jiebatext = '工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作 'ret = jieba.cut(text, cut_all=False) # cut_all默认为False# 将返回一个生成器对象print(ret)print(list(ret))# 若需直接返回列表内容, 使用jieba.lcut()ret2 = jieba.lcut(text, cut_all=False)print(ret2)

全模式分词: 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能消除歧义.

import jiebatext = '工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作 'ret = jieba.cut(text, cut_all=True) # cut_all默认为False# 将返回一个生成器对象print(ret)print(list(ret))# 若需直接返回列表内容, 使用jieba.lcut()ret2 = jieba.lcut(text, cut_all=True)print(ret2)

搜索引擎模式分词: 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词.

import jiebatext = '工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作 'ret = jieba.cut_for_search(text)# 将返回一个生成器对象print(ret)print(list(ret))# 若需直接返回列表内容, 使用jieba.lcut_for_search()ret2 = jieba.lcut_for_search(text)print(ret2)

中文繁体分词: 针对中国香港, 台湾地区的繁体文本进行分词.

import jiebatext = '煩惱即是菩提,我暫且不提 'ret = jieba.lcut(text)print(ret)

使用用户自定义词典: 添加自定义词典后, jieba能够准确识别词典中出现的词汇,提升整体的识别准确率. 词典格式: 每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒.词典样式如下, 将该词典存为userdict.txt, 方便之后加载使用.

韩玉赏鉴 3 nz八一双鹿 3 nz

import jiebatext = '八一双鹿更名为八一南昌篮球队!'# 没有使用用户自定义词典前的结果:ret = jieba.lcut(text)print(ret)jieba.load_userdict('./userdict.txt')# 使用了用户自定义词典后的结果:ret = jieba.lcut(text)print(ret)

流行中英文分词工具hanlp: 中英文NLP处理工具包, 基于tensorflow2.0, 使用在学术界和行业中推广最先进的深度学习技术.hanlp的安装:

# 使用pip进行安装pip install hanlp

为了避免不必要的各种报错,直接安装最全的hanlp版本,命令如下

pip install hanlp[full]

这个过程中可能会更新你的tensorflow到更新的版本和hanlp匹配

使用hanlp进行中文分词:

import hanlptext = '工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作'# 加载CTB_CONVSEG预训练模型进行分词任务tokenizer = hanlp.load('CTB6_CONVSEG')ret = tokenizer(text)print(ret)

使用hanlp进行英文分词:

# 进行英文分词, 英文分词只需要使用规则即可tokenizer = hanlp.utils.rules.tokenize_englishret = tokenizer('I love you very much!')print(ret)

什么是命名实体识别

命名实体: 通常我们将人名, 地名, 机构名等专有名词统称命名实体. 如: 周杰伦, 黑山县, 孔子学院, 24辊方钢矫直机.顾名思义, 命名实体识别(Named Entity Recognition,简称NER)就是识别出一段文本中可能存在的命名实体.举个栗子:

鲁迅, 浙江绍兴人, 五四新文化运动的重要参与者, 代表作朝花夕拾. ==> 鲁迅(人名) / 浙江绍兴(地名)人 / 五四新文化运动(专有名词) / 重要参与者 / 代表作 / 朝花夕拾(专有名词)

命名实体识别的作用: 同词汇一样, 命名实体也是人类理解文本的基础单元, 因此也是AI解决NLP领域高阶任务的重要基础环节.使用hanlp进行中文命名实体识别:

import hanlp# 加载中文命名实体识别的预训练模型MSRA_NER_BERT_BASE_ZHrecognizer = hanlp.load(hanlp.pretrained.ner.MSRA_NER_BERT_BASE_ZH)# 这里注意它的输入是对句子进行字符分割的列表, 因此在句子前加入了list()# list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美 国纽约现代艺术博物馆参观。')# ['上', '海', '华', '安', '工', '业', '(', '集', '团', ')', '公', '司', '董', '事', '长', '谭', '旭', '光', '和', '秘', '书', '张', '晚', '霞', '来', '到', '美', '国', '纽', '约', '现', '代', '艺', '术', '博', '物', '馆', '参', '观', '。']ret = recognizer(list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美国纽约现代艺术博物馆参观。'))print(ret) # [('上海华安工业(集团)公司', 'NT', 0, 12), ('谭旭光', 'NR', 15, 18), ('张晚霞', 'NR', 21, 24), ('美国', 'NS', 26, 28), ('纽约现代艺术博物馆', 'NS', 28, 37)]# 返回结果是一个装有n个元组的列表, 每个元组代表一个命名实体, 元组中的每一项分别代表具体的命名实体, 如: '上海华安工业(集团)公司'; 命名实体的类型, 如: 'NT'-机构名; 命名实体的开始索引和结束索引, 如: 0, 12.

使用hanlp进行英文命名实体识别:

import hanlp# 加载英文命名实体识别的预训练模型CONLL03_NER_BERT_BASE_UNCASED_ENrecognizer = hanlp.load(hanlp.pretrained.ner.CONLL03_NER_BERT_BASE_UNCASED_EN)# 这里注意它的输入是对句子进行分词后的结果, 是列表形式.ret = recognizer(["President", "Obama", "is", "speaking", "at", "the", "White", "House"])print(ret)# [('Obama', 'PER', 1, 2), ('White House', 'LOC', 6, 8)]# 返回结果是一个装有n个元组的列表, 每个元组代表一个命名实体, 元组中的每一项分别代>表具体的命名实体, 如: 'Obama', 如: 'PER'-人名; 命名实体的开始索引和结束索引, 如: 1, 2.

什么是词性标注

词性: 语言中对词的一种分类方法,以语法特征为主要依据、兼顾词汇意义对词进行划分的结果, 常见的词性有14种, 如: 名词, 动词, 形容词等.顾名思义, 词性标注(Part-Of-Speech tagging, 简称POS)就是标注出一段文本中每个词汇的词性.举个栗子:

我爱自然语言处理==>我/rr, 爱/v, 自然语言/n, 处理/vnrr: 人称代词v: 动词n: 名词vn: 动名词

词性标注的作用: 词性标注以分词为基础, 是对文本语言的另一个角度的理解, 因此也常常成为AI解决NLP领域高阶任务的重要基础环节.使用jieba进行中文词性标注:

import jieba.posseg as psegret = pseg.lcut('我爱北京天安门')print(ret)

使用hanlp进行中文词性标注:

import hanlp# 加载中文命名实体识别的预训练模型CTB5_POS_RNN_FASTTEXT_ZHtagger = hanlp.load(hanlp.pretrained.pos.CTB5_POS_RNN_FASTTEXT_ZH)# 输入是分词结果列表ret = tagger(['我', '的', '希望', '是', '希望', '和平'])# 返回对应的词性print(ret) # ['PN', 'DEG', 'NN', 'VC', 'VV', 'NN']

使用hanlp进行英文词性标注:

import hanlp# 加载英文命名实体识别的预训练模型PTB_POS_RNN_FASTTEXT_ENtagger = hanlp.load(hanlp.pretrained.pos.PTB_POS_RNN_FASTTEXT_EN)# 输入是分词结果列表ret = tagger(['I', 'banked', '2', 'dollars', 'in', 'a', 'bank', '.'])# 返回对应的词性print(ret) # ['PRP', 'VBD', 'CD', 'NNS', 'IN', 'DT', 'NN', '.']

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。