自然语言处理 文本预处理(上)(分词、词性标注、命名实体识别等) 您所在的位置:网站首页 形成的自然语言处理 自然语言处理 文本预处理(上)(分词、词性标注、命名实体识别等)

自然语言处理 文本预处理(上)(分词、词性标注、命名实体识别等)

2024-07-15 08:35| 来源: 网络整理| 查看: 265

文章目录 一、认识文本预处理1 文本预处理及其作用2. 文本预处理中包含的主要环节3. 概览 二、文本处理的基本方法1. 分词1.1 什么是分词1.2 分词的作用1.3 流行中文分词工具jieba(1)jieba的特性:(2)jieba的安装(3)jieba的使用 1.4 流行中英文分词工具hanlp:(1)hanlp的安装:(2)使用hanlp进行中文分词:(3)使用hanlp进行英文分词: 2. 命名实体识别2.1 什么是命名实体识别2.2 命名实体识别的作用2.3 使用hanlp进行中文命名实体识别2.4 使用hanlp进行英文命名实体识别: 3. 词性标注3.1 什么是词性标注3.2 词性标注的作用3.3 使用jieba进行中文词性标注3.4 使用hanlp进行中文词性标注:3.5 使用hanlp进行英文词性标注:

一、认识文本预处理

在这里插入图片描述

1 文本预处理及其作用

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

2. 文本预处理中包含的主要环节 文本处理的基本方法文本张量表示方法文本语料的数据分析文本特征处理数据增强方法 3. 概览

文本处理的基本方法

分词词性标注命名实体识别

文本张量表示方法

one-hot编码Word2vecWord Embedding

文本语料的数据分析

标签数量分布句子长度分布词频统计与关键词词云

文本特征处理

添加n-gram特征文本长度规范

数据增强方法

回译数据增强法

重要说明: 在实际生产应用中, 我们最常使用的两种语言是中文和英文, 因此, 文本预处理部分的内容都将针对这两种语言进行讲解.

二、文本处理的基本方法 1. 分词 1.1 什么是分词

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

举个栗子:

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

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

1.3 流行中文分词工具jieba

愿景: “结巴”中文分词, 做最好的 Python 中文分词组件.

(1)jieba的特性: 支持多种分词模式精确模式全模式搜索引擎模式支持中文繁体分词支持用户自定义词典 (2)jieba的安装 pip install jieba (3)jieba的使用 精确模式分词: 试图将句子最精确地切开,适合文本分析. >>> import jieba >>> content = "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作" >>> jieba.cut(content, cut_all=False) # cut_all默认为False # 将返回一个生成器对象 # 若需直接返回列表内容, 使用jieba.lcut即可 >>> jieba.lcut(content, cut_all=False) ['工信处', '女干事', '每月', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24', '口', '交换机', '等', '技术性', '器件', '的', '安装', '工作'] 全模式分词: 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能消除 歧义. >>> import jieba >>> content = "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作" >>> jieba.cut(content, cut_all=True) # cut_all默认为False # 将返回一个生成器对象 # 若需直接返回列表内容, 使用jieba.lcut即可 >>> jieba.lcut(content, cut_all=True) ['工信处', '处女', '女干事', '干事', '每月', '月经', '经过', '下属', '科室', '都', '要', '亲口', '口交', '交代', '24', '口交', '交换', '交换机', '换机', '等', '技术', '技术性', '性器', '器件', '的', '安装', '安装工', '装工', '工作'] 搜索引擎模式分词: 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词. >>> import jieba >>> content = "工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作" >>> jieba.cut_for_search(content) # 将返回一个生成器对象 # 若需直接返回列表内容, 使用jieba.lcut_for_search即可 >>> jieba.lcut_for_search(content) ['工信处', '干事', '女干事', '每月', '经过', '下属', '科室', '都', '要', '亲口', '交代', '24', '口', '交换', '换机', '交换机', '等', '技术', '技术性', '器件', '的', '安装', '工作'] # 对'女干事', '交换机'等较长词汇都进行了再次分词. 中文繁体分词: 针对中国香港, 台湾地区的繁体文本进行分词. >>> import jieba >>> content = "煩惱即是菩提,我暫且不提" >>> jieba.lcut(content) ['煩惱', '即', '是', '菩提', ',', '我', '暫且', '不', '提'] 使用用户自定义词典: 添加自定义词典后, jieba能够准确识别词典中出现的词汇,提升整体的识别准确率.词典格式: 每一行分三部分:词语、词频(可省略)、词性(可省略),用空格隔开,顺序不可颠倒.

词典样式如下, 具体词性含义请参照附录: jieba词性对照表, 将该词典存为userdict.txt, 方便之后加载使用.

云计算 5 n 李小福 2 nr easy_install 3 eng 好用 300 韩玉赏鉴 3 nz 八一双鹿 3 nz >>> import jieba >>> jieba.lcut("八一双鹿更名为八一南昌篮球队!") # 没有使用用户自定义词典前的结果: >>> ['八', '一双', '鹿', '更名', '为', '八一', '南昌', '篮球队', '!'] >>> jieba.load_userdict("./userdict.txt") # 使用了用户自定义词典后的结果: ['八一双鹿', '更名', '为', '八一', '南昌', '篮球队', '!'] 1.4 流行中英文分词工具hanlp:

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

(1)hanlp的安装: # 使用pip进行安装 pip install hanlp (2)使用hanlp进行中文分词: >>> import hanlp # 加载CTB_CONVSEG预训练模型进行分词任务 >>> tokenizer = hanlp.load('CTB6_CONVSEG') >>> tokenizer("工信处女干事每月经过下属科室都要亲口交代24口交换机等技术性器件的安装工作") ['工信处', '女', '干事', '每', '月', '经过', '下', '属', '科室', '都', '要', '亲口', '交代', '24口', '交换机', '等', '技术性', '器件', '的', '安装', '工作'] (3)使用hanlp进行英文分词: # 进行英文分词, 英文分词只需要使用规则即可 >>> tokenizer = hanlp.utils.rules.tokenize_english >>> tokenizer('Mr. Hankcs bought hankcs.com for 1.5 thousand dollars.') ['Mr.', 'Hankcs', 'bought', 'hankcs.com', 'for', '1.5', 'thousand', 'dollars', '.'] 2. 命名实体识别 2.1 什么是命名实体识别 命名实体: 通常我们将人名, 地名, 机构名等专有名词统称命名实体. 如: 周杰伦, 黑山县, 孔子学院, 24辊方钢矫直机.顾名思义, 命名实体识别(Named Entity Recognition,简称NER)就是识别出一段文本中可能存在的命名实体.

举个栗子:

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

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

2.3 使用hanlp进行中文命名实体识别 >>> import hanlp # 加载中文命名实体识别的预训练模型MSRA_NER_BERT_BASE_ZH >>> recognizer = hanlp.load(hanlp.pretrained.ner.MSRA_NER_BERT_BASE_ZH) # 这里注意它的输入是对句子进行字符分割的列表, 因此在句子前加入了list() # >>> list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美 国纽约现代艺术博物馆参观。') # ['上', '海', '华', '安', '工', '业', '(', '集', '团', ')', '公', '司', '董', '事', '长', '谭', '旭', '光', '和', '秘', '书', '张', '晚', '霞', '来', '到', '美', '国', '纽', '约', '现', '代', '艺', '术', '博', '物', '馆', '参', '观', '。'] >>> recognizer(list('上海华安工业(集团)公司董事长谭旭光和秘书张晚霞来到美国纽约现代艺术博物馆参观。')) [('上海华安工业(集团)公司', 'NT', 0, 12), ('谭旭光', 'NR', 15, 18), ('张晚霞', 'NR', 21, 24), ('美国', 'NS', 26, 28), ('纽约现代艺术博物馆', 'NS', 28, 37)] # 返回结果是一个装有n个元组的列表, 每个元组代表一个命名实体, 元组中的每一项分别代表具体的命名实体, 如: '上海华安工业(集团)公司'; 命名实体的类型, 如: 'NT'-机构名; 命名实体的开始索引和结束索引, 如: 0, 12. 2.4 使用hanlp进行英文命名实体识别: >>> import hanlp # 加载英文命名实体识别的预训练模型CONLL03_NER_BERT_BASE_UNCASED_EN >>> recognizer = hanlp.load(hanlp.pretrained.ner.CONLL03_NER_BERT_BASE_UNCASED_EN)) # 这里注意它的输入是对句子进行分词后的结果, 是列表形式. >>> recognizer(["President", "Obama", "is", "speaking", "at", "the", "White", "House"]) [('Obama', 'PER', 1, 2), ('White House', 'LOC', 6, 8)] # 返回结果是一个装有n个元组的列表, 每个元组代表一个命名实体, 元组中的每一项分别代>表具体的命名实体, 如: 'Obama', 如: 'PER'-人名; 命名实体的开始索引和结束索引, 如: 1, 2. 3. 词性标注 3.1 什么是词性标注 词性: 语言中对词的一种分类方法,以语法特征为主要依据、兼顾词汇意义对词进行划分的结果, 常见的词性有14种, 如: 名词, 动词, 形容词等.顾名思义, 词性标注(Part-Of-Speech tagging, 简称POS)就是标注出一段文本中每个词汇的词性.

举个栗子:

我爱自然语言处理 ==> 我/rr, 爱/v, 自然语言/n, 处理/vn rr: 人称代词 v: 动词 n: 名词 vn: 动名词 3.2 词性标注的作用

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

3.3 使用jieba进行中文词性标注 >>> import jieba.posseg as pseg >>> pseg.lcut("我爱北京天安门") [pair('我', 'r'), pair('爱', 'v'), pair('北京', 'ns'), pair('天安门', 'ns')] # 结果返回一个装有pair元组的列表, 每个pair元组中分别是词汇及其对应的词性, 具体词性含义请参照[附录: jieba词性对照表]() 3.4 使用hanlp进行中文词性标注: >>> import hanlp # 加载中文命名实体识别的预训练模型CTB5_POS_RNN_FASTTEXT_ZH >>> tagger = hanlp.load(hanlp.pretrained.pos.CTB5_POS_RNN_FASTTEXT_ZH) # 输入是分词结果列表 >>> tagger(['我', '的', '希望', '是', '希望', '和平']) # 结果返回对应的词性 ['PN', 'DEG', 'NN', 'VC', 'VV', 'NN'] 3.5 使用hanlp进行英文词性标注: >>> import hanlp # 加载英文命名实体识别的预训练模型PTB_POS_RNN_FASTTEXT_EN >>> tagger = hanlp.load(hanlp.pretrained.pos.PTB_POS_RNN_FASTTEXT_EN) # 输入是分词结果列表 >>> tagger(['I', 'banked', '2', 'dollars', 'in', 'a', 'bank', '.']) ['PRP', 'VBD', 'CD', 'NNS', 'IN', 'DT', 'NN', '.']


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有