二、文本预处理

本文介绍了中文分词工具jieba和hanlp的使用,包括它们的精确模式、全模式、搜索引擎模式以及用户自定义词典功能。同时对比了hanlp基于深度学习的分词效果。此外,文章还涉及了命名实体识别和词性标注在NLP中的作用。
摘要由CSDN通过智能技术生成

什么是分词?

分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。我们知道,在英文的行文中,单词之间是以空格作为自然分界符的,而中文只是“字”、“句”和“段”能通过明显的分界符来简单化解,唯独“词”没有一个形式上的分界符,分词过程就是找到这样分界符的过程。

分词的作用

词作为语言语义理解的最小单元,是人类理解文本语言的基础,也是AI解决NLP领域高级任务,如自动问答,机器翻译,文本生成的重要基础环节。

学习流行的中文分词工具jieba

  • 支持多种分词模式:精确模式,全模式,搜索引擎模式
  • 支持中文繁体分词
  • 支持用户自定义词典

学习流行的中英文分词工具hanlp

基于TensorFlow 2.0进行的预训练模型,功能很强大。但是安装起来很繁琐。


一、认识文本预处理

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

文本预处理中包含以下主要环节:

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

二、jieba工具的使用

jieba是最好用的中文分词工具之一。无论是繁体字、简字体,使用jieba都是统一的分割方法

(一)精确模式

精确模式分词,试图将句子最精确地切开,适合文本分析。

import jieba

content = "工信处男干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"

# 将返回一个生成器对象

print('cut:', jieba.cut(content, cut_all=False))  # cut_all默认为False

cut: <generator object Tokenizer.cut at 0x0000016164D2AB30>

# 若需要直接返回列表内容,使用jieba.lcut即可

print('lcut', jieba.lcut(content, cut_all=False))

lcut ['工信处', '男', '干事', '每月', '经过', '下属', '科室', '都', '要', '亲口',
 '交代', '24', '口', '交换机', '等', '技术性', '器件', '的', '安装', '工作']

cut_all的默认参数就是False。

(二)全模式分词

全模式(即将参数cut_all=True)就是把句子中所有的可以成词的词语都扫描出来,速度非常快,但是不能消除歧义。

import jieba

content = "工信处男干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"

# 将返回一个生成器对象

print('cut:', jieba.cut(content, cut_all=True))  # cut_all默认为False

cut: <generator object Tokenizer.cut at 0x00000284B419ABA0>

# 若需要直接返回列表内容,使用jieba.lcut即可

print('lcut', jieba.lcut(content, cut_all=True))

lcut ['工信处', '处男', '干事', '每月', '月经', '经过', '下属', '科室', '都',
 '要', '亲口', '口交', '交代', '24', '口交', '交换', '交换机', '换机', '等',
 '技术', '技术性', '性器', '器件', '的', '安装', '安装工', '装工', '工作']

可见全模式下产生了大量的分词,如“处男”、“月经”等和语句语义并不相关的信息。

(三)搜索引擎模式分词

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

import jieba

content = "工信处男干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"

# 若需要直接返回列表内容,使用jieba.lcut_for_search即可

print('lcut', jieba.lcut_for_search(content))

lcut ['工信处', '男', '干事', '每月', '经过', '下属', '科室', '都', '要', 
'亲口', '交代', '24', '口', '交换', '换机', '交换机', '等', '技术', '技术性',
 '器件', '的', '安装', '工作']

可见,在输出中对一些长词语“男干事”、“交换机”等进行了二次分割。

(四)使用用户自定义词典

  • jieba自带词典,添加自定义词典后,jieba能够准确识别自定义词典中出现的词汇,提升整体的识别准确率。比如金融、法律等领域的专业词汇,使用自定义词典能更准确的识别分词。
  • 词典格式:每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒。
  • 词典样式如下,具体词性含义请参考《jieba词性对照表》,将该词典存为userdict.txt,方便之后加载使用。

例如,我们自定义一个下列词典:

云计算 5 n

李小福 2 nr

easy_install 3 eng

好用 300

韩玉赏鉴 3 nz

八一双鹿 3 nz

下面比较不使用和使用自定义词典的分词区别:

import jieba

content = "八一双鹿更名为八一南昌篮球队"

# 未使用自定义词典

print('lcut', jieba.lcut(content))

lcut ['八', '一双', '鹿', '更名', '为', '八一', '南昌', '篮球队']

# 导入自定义字典

jieba.load_userdict(r"./user_dict.txt")

print('lcut', jieba.lcut(content))

lcut ['八一双鹿', '更名', '为', '八一', '南昌', '篮球队']

可以看出使用了自定义字典后“八一双鹿”被正确的划分了。

三、流行的中英文分词工具hanlp

hanlp是中英文NLP处理工具包,基于TensorFlow2.0,使用的是深度学习技术进行的分词。

hanlp的安装,hanlp需要一个TensorFlow的环境,安装时经常会产生格式不兼容问题。需要下载很多依赖库。

#使用pip进行安装

pip install hanlp

(一)使用hanlp进行中文分词

import hanlp

content = "工信处男干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作"

# 加载CTB_CONVSEG预训练模型进行分词任务

tokenizer = hanlp.load('CTB6_CONVSEG')

print(tokenizer(content))

['工信处','男','干事','每','月','经过','下','属','科室','都','要','亲口','交代',...]

分词的效果直观看起来不如jieba好。像“每月”、“下属”这些词都划分的太细。

(二)使用hanlp进行英文分词

from hanlp.utils.lang.en.english_tokenizer import tokenize_english

# 进行英文分词,英文分词只需要使用规则即可(即使用空格划分)

tokenizer = tokenize_english

print(tokenizer('Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.'))

['Mr.', 'Hankcs', 'bought', 'hankcs.com', 'for', '1.5', 'thousand', 'dollars', '.']

英文分词相对来说比较简单,一般按照“空格”进行划分就可以。

四、命名实体识别

命名实体:通常我们将人名、地名、机构名等专有明细统称为命名实体,如:周杰伦,黑山县,孔子学院,24辊方钢矫直机。可以理解,命名实体(Named Entity Recognition,简称NER)就是识别出一段文本中可能存在的命名实体。

例如,“鲁迅,浙江绍兴人,五四新文化运动的重要参与者,代表作朝花夕拾”,其中鲁迅、浙江绍兴、五四新文化运动、朝花夕拾都是命名实体NER。

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

import hanlp

# 加载中文命名实体识别的预训练模型MSRA_NER_BERT_BASE_ZH

recognizer = hanlp.load(hanlp.pretrained.ner.MSRA_NER_BERT_BASE_ZH)

content = list("上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美国纽约现代艺术博物馆参观")

print(recognizer(content))

加载英文命名实体时,只需要把load中的模型替换为 hanlp.pretrained.ner.CONLL03_NER_BERT_BASE_UNCASED_EN即可。

五、词性标注

什么是词性标注:

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

例如,“我爱自然语言”,经过词性标注后,产生“我/rr,爱/v,自然语言/n,处理/vn”

其中rr:人称代词,v:动词,n:名词,vn:动名词。

词性标注的作用:词性标注也是以分词作为基础的,是对文本语言的另一个角度的理解。因此也是AI解决NLP领域高级任务的重要基础环节。

使用jieba进行词性标注:

import jieba.posseg as psed

content = "我的希望是希望和平"

print(psed.lcut(content))

[pair('我', 'r'), pair('的', 'uj'), pair('希望', 'v'), pair('是', 'v'),
 pair('希望', 'v'), pair('和平', 'nz')] 

使用hanlp进行词性标注

import hanlp

content = list("我的希望是希望和平")
 

# 加载中文的词性标注的预训练模型CTB5_POS_RNN_FASTTEXT_ZH

tagger = hanlp.load(hanlp.pretrained.pos.CTB5_POS_RNN_FASTTEXT_ZH)

# 英文的预训练模型为PTB_POS_RNN_FASTTEXT_EN

print(tagger(content))

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

并不傻的狍子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值