【云驻共创】华为云AI实战营:NLP
前言:
AI正在改变我们的生活,正在改变我们身边的各行各业,但是这条通往智能世界的路并不平坦,其中一个巨大鸿沟就是AI人才的稀缺。在中国庞大的IT从业群体,AI开发者缺口达百万级。
AI将成为全民普及性的技能,所以今天华为云EI为大家带来《2020华为云AI实战营》免费课程,大幅降低AI学习门槛,帮助庞大的软件开发者群体快速掌握AI技能,把AI用起来。
课程主要内容包括图像分类、物体检测、图像分割、人脸识别、OCR、视频分析、自然语言处理和语音识别这八大热门AI领域的基础知识、经典数据集和经典算法的介绍,每章课程都是实战案例,模型训练、测试、评估全流程覆盖,配合代码讲解和课后作业,帮助您掌握八大热门AI领域的模型开发能力。
2020年华为云AI实战营 第七章 NLP
自然语言处理领域常见任务
神经网络语言模型发展
语料
jieba中文分词组件:1.分词 2.关键词提取 3.词性标注
概述:
自然语言处理,顾名思义即自然语言处理的技术,通常用缩写NLP指代。各类产品经理日常的工作中,会遇到大量自然语言处理的应用场景。
动手实践
点击鼠标右键,在新标签页中打开此链接https:/nbviewer.jupyter.orgl,打开新的网页再依次右键复制下面的实践案例地址、粘贴到新打开网页的搜索框中,按回车进行访问
- 自然语言处理介绍实践案例地址:
1.1 自然语言处理
自然语言处理(NLP, Natural Language Processing),作为 AI 领域中最重要的分支之一,与语言文字这一承载人类文明的重要载体紧密相连,研究语言能力和语言应用的模型,建立计算机(算法)框架来实现这样的语言模型,并完善、评测、最终用于设计各种实用系统。
下面列出一些自然语言处理领域常见任务,并按照任务类型分成五大类:
- 词法分析:对自然语言进行词汇层面的分析,是NLP基础性工作
-
- 分词:对没有明显边界的文本进行切分,得到词序列
- 词性标注:确定文本中每个词的词性。词性包括动词、名词、代词等
- 新词发现:找出文本中具有新形势、新意义或是新用法的词
- 形态分析:分析单词的形态组成,包括词干、词根、词缀等
- 拼写校正:找出拼写错误的词并进行纠正
- 句子分析:对自然语言进行句子层面的分析,包括句法分析和其他句子级别的分析任务
- 组块分析:标出句子中的短语块,例如名词短语,动词短语等
- 成分句法分析:分析句子的成分,给出一棵树由终结符和非终结符构成的句法树
- 依存句法分析:分析句子中词与词之间的依存关系,给一棵由词语依存关系构成的依存句法树
- 语种识别:给定一段文本,确定该文本属于哪个语种
- 句子边界检测:给没有明显句子边界的文本加边界
- 语义分析:对给定文本进行分析和理解,形成能够表达语义的形式化表示或分布式表示
- 词义消歧:对有歧义的词,确定其准确的词义
- 语义角色标注:标注句子中的语义角色类标,语义角色,语义角色包括施事、受事、影响等
- 框架语义分析:根据框架语义学的观点,对句子进行语义分析
- 词汇/句子/段落的向量化表示:研究词汇、句子、段落的向量化方法,向量的性质和应用
- 信息抽取:从无结构文本中抽取结构化的信息
- 命名实体识别:从文本中识别出命名实体
- 实体消歧:确定实体指代对象
- 术语抽取:从文本中确定术语
- 关系抽取:确定文本中两个实体之间的关系类型
- 事件抽取:从无结构的文本中抽取结构化事件
- 情感分析:对文本的主观性情绪进行提取
- 意图识别:对用户给定的对话内容进行分析,识别用户意图
- 顶层任务:直接面向普通用户,提供自然语言处理产品服务的系统级任务,会用到多个层面的自然语言处理技术
- 机器翻译:通过计算机自动化的把一种语言翻译成另外一种语言
- 文本摘要:对较长文本进行内容梗概的提取
- 问答系统:针对用户提出的问题,系统给出相应的答案
- 对话系统:能够与用户进行聊天对话,从对话中捕获用户的意图,并分析执行
- 阅读理解:机器阅读完一篇文章后,给定一些文章相关问题,机器能够回答
- 自动文章分类:给定一篇文章,对文章的质量进行打分或分类
神经网络语言模型发展
语言模型
NLP里面做预训练一般的选择是用语言模型任务来做。
语言模型就是用来计算一个句子的概率的模型,也就是判断一句话是否是人说出来的自然句子的概率。
语言模型包括文法语言模型和统计语言模型,我们一般使用统计语言模型。常见的统计语言模型有N元文法模型(N-gram Model)。
语言模型可以捕捉到词的上下文信息。
词向量(word embedding)
词向量是为了解决自然语言处理领域的文字信息表示问题。在图像领域,使用图片的像素构成的矩阵展平成 vector 作为神经网络的输入;在语音领域,用音频频谱序列向量构成的矩阵作为神经网络的输入;在自然语言处理领域,将每个词映射成一个向量编码,作为神经网络的输入。
词向量的核心问题是上下文与目标词之间的关系建模。比较热门的使用语言模型做 Word Embedding 的工具有 Word2Vec 和 Glove。
ELMO
由于Word Embedding无法解决多义词问题,Word Embedding本质是一个静态的方式,不会根据上下文的改变而变化。所以引出ELMO(Embedding from Language Models),ELMO提供了一种简洁优雅的解决方案。
ELMO的本质思想是:事先用语言模型学好一个单词的 Word Embedding,此时多义词无法区分,在实际使用 Word Embedding 的时候,单词已经具备了特定的上下文,这个时候可以根据上下文单词的语义去调整单词的 Word Embedding 表示,这样经过调整后的 Word Embedding 更能表达在这个上下文中的具体含义。所以 ELMO 本身是个根据当前上下文对 Word Embedding 动态调整的思路。
ELMO 采用了典型的两阶段过程,第一个阶段是利用语言模型进行预训练;第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的 Word Embedding 作为新特征补充到下游任务中。
GPT
GPT(Generative Pre-Training),其含义是指的生成式的预训练。
与 ELMO 类似,GPT也采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过 Fine-tuning 的模式解决下游任务。
GPT 的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型,单向的含义是指:只使用单词的上文来进行预测,而抛开了下文。因此也限制了其在更多应用场景的效果,比如阅读理解这种任务,在做任务的时候是可以允许同时看到上文和下文一起做决策的。
NNLM
NNLM(神经网络语言模型),通过为每个单词学习一个分布式表征来实现在连续空间上的建模。
第一个 NNLM——前馈神经网络语言模型(FFNNLM)由 Bengio 等人于 2003 年提出,其性能要优于 N 元语言模型。随后,Mikolov 等人于 2010 年提出了 RNN 语言模型(RNNLM)。从那时起,NNLM 逐渐成为了主流的语言模型,并得到了迅速发展。
2012 年,Sundermeyer 等人提出了长短期记忆循环神经网络语言模型(LSTM-RNNLM)用于解决学习长期依赖的问题。为了降低训练、评估以及 PPL 的开销,人们提出了各种各样的改进方案,例如分层的 Softmax、缓存模型等。近年来,为了改进 NNLM,人们引入了注意力机制(Attention),取得了显著的性能提升。
Transformer
Transformer 是个叠加的自注意力机制(Self Attention)构成的深度网络,是目前NLP里最强的特征提取器。Transformer 的结构由 encoder(编码)和 decoder(解码)组成。Transformer 详见论文《Attention is all you need》。
语料
人工智能的核心在于数据支持。对AI有一些接触之后,我们可以知道,无论模型性能再高,都离不开大量数据作为基础。
在自然语言处理领域,数据就是语料,语料的集合被称为语料库(Corpus)。语料的获取方式有以下几种:
- 业务提供的已有语料
- 国内外标准开放数据集
- 通过爬虫抓取网络数据(合法情况下)
在获取语料的基础上,另一个重要的步骤是语料的预处理。语料的质量直接影响模型的训练性能,噪声很大、与任务无关的语料需要进过一系列预处理工作才可以被使用。在一个完整的中文自然语言处理工程应用中,语料预处理大概会占到50%-70%的工作量。
常用的语料预处理方式包括:去除不规则符号及格式,人工去重、对齐、删除和标注等,或者规则提取内容、正则表达式匹配、根据词性和命名实体提取、编写脚本或者代码批处理等。
语料的预处理,即数据清洗,是一项工作量大且重复性高的工作,在本教学任务中不进行展开说明。
分词
分词任务是中文自然语言处理的基础性工作。汉语是以字位单位,不像西方语言,词与词之间没有空格之类的标志指示词的边界。词是最小的能够独立活动的有意义的语言成分,因此分词的好坏直接对后续文本处理任务起到关键作用。
中文分词方法:
基于字典、词库匹配的分词方法(基于规则)
基于字符串匹配分词,机械分词算法。将待分的字符串与一个充分大的机器词典中的词条进行匹配。分为正向匹配和逆向匹配;最大长度匹配和最小长度匹配;单纯分词和分词与标注过程相结合的一体化方法。所以常用的有:正向最大匹配,逆向最大匹配,最少切分法。
基于词频度统计的分词方法(基于统计)
相邻的字同时出现的次数越多,越有可能构成一个词语,对语料中的字组频度进行统计,基于词的频度统计的分词方法是一种全切分方法。
基于知识理解的分词方法
该方法主要基于句法、语法分析,并结合语义分析,通过对上下文内容所提供信息的分析对词进行定界。由于汉语语言知识的笼统、复杂性,难以将各种语言信息组织成机器可直接读取的形式。因此目前基于知识的分词系统还处在试验阶段。
jieba 分词结合了基于规则和基于统计这两类方法。
首先基于前缀词典进行词图扫描,前缀词典是指词典中的词按照前缀包含的顺序排列,例如词典中出现了“广”,之后以“广”开头的词都会出现在这一部分,例如“广东”,进而会出现“广东省”,从而形成一种层级包含结构。
如果将词看作节点,词和词之间的分词符看作边,那么一种分词方案则对应着从第一个字到最后一个字的一条分词路径。
因此,基于前缀词典可以快速构建包含全部可能分词结果的有向无环图,这个图中包含多条分词路径,有向是指全部的路径都始于第一个字、止于最后一个字,无环是指节点之间不构成闭环。
基于标注语料,使用动态规划的方法可以找出最大概率路径,并将其作为最终的分词结果。对于未登录词,jieba 使用了基于汉字成词的 HMM(隐马尔可夫模型)模型,采用了 Viterbi(维特比)算法进行推导。
jieba 分词支持三种分词模式:
- 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
- 精确模式:试图将句子最精确地切开,适合文本分析;
- 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
TF-IDF 算法
TF-IDF(Term Frequency-Inverse Document Frequency, 词频-逆文件频率)是一种统计方法,用以评估一个词语对于一个文件集或一个语料库中的一份文件的重要程度,其原理为:一个词语在一篇文章中出现次数越多,同时在所有文档中出现次数越少,越能够代表该文章。
计算公式为:TF-IDF = TF·IDF
其中:
- TF(term frequency):词频,某一个给定的词语在该文件中出现的次数,计算公式:
- IDF(inverse document frequency):逆文件频率,如果包含词条的文件越少,则说明词条具有很好的类别区分能力,计算公式:
通过 jieba.analyse.extract_tags 方法可以基于 TF-IDF 算法进行关键词提取,
其中topK为返回几个 TF/IDF 权重最大的关键词,默认值为 20 ;withWeight为是否需要返回关键词权重值。
TextRank 算法
TextRank是另一种关键词提取算法,其基本思想来源于PageRank算法,通过把文本分割成若干组成单元(单词、句子)并建立图模型,利用投票机制对文本中的重要成分进行排序,仅利用单篇文档本身的信息即可实现关键词提取、文摘。
TextRank原理详细内容参见论文《TextRank: Bringing Order into Texts》
通过jieba.analyse.textrank方法可以使用基于TextRank算法的关键词提取
1.2 BERT模型完成中文命名实体识别
命名实体识别(Named Entity Recognition,简称NER)是信息提取、问答系统、句法分析、机器翻译等应用领域的重要基础工具,在自然语言处理技术走向实用化的过程中占有重要地位。一般来说,命名实体识别的任务就是识别出待处理文本中三大类(实体类、时间类和数字类)、七小类(人名、机构名、地名、时间、日期、货币和百分比)命名实体。
NER评价指标
NER本质上包含两个子任务:边界检测和类型识别,一般认为一个实体识别正确,需要该实体的边界与类型都正确。
自然语言处理实战——命名实体识别
BERT模型(Bidirectional Encoder Representations from Transformers)是2018年10月谷歌推出的,它在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类,并且还在11种不同NLP测试中创出最佳成绩,包括将GLUE基准推至80.4%(绝对改进率7.6%),MultiNLI准确度达到86.7%(绝对改进率5.6%)等。BERT模型被认为是NLP新时代的开始,自此NLP领域终于找到了一种方法,可以像计算机视觉那样进行迁移学习,任何需要构建语言处理模型的人都可以将这个强大的预训练模型作为现成的组件使用,从而节省了从头开始训练模型所需的时间、精力、知识和资源。具体地来说,BERT可以用于以下自然语言处理任务中:
- 问答系统
- 命名实体识别
- 文档聚类
- 邮件过滤和分类
- 情感分析
BERT模型被认为是NLP领域的极大突破,刷新了11个NLP任务的当前最优结果。其使用庞大的开源语料库在64块TPU上训练4天,TPU的速度约是GPU Tesla V100的8倍(Tesla V100,32G,单价8万)。其对GPT语言模型做了进一步的改进,通过左、右两侧上下文来预测当前词和通过当前句子预测下一个句子,预训练的BERT表征可以仅用一个额外的输出层进行微调,在不对任务特定架构做出大量修改条件下,就可以为很多任务创建当前最优模型。
token embeddings:词向量,将各个词转换成固定维度的向量。在BERT中为768维。输入文本要先进行tokenization处理。中文为字向量。position embeddings:位置向量,表示位置信息,代表词顺序的重要特征。segment embeddings:文本向量,用来区别两种句子,只有两种向量表示。position embeddings:位置向量,表示位置信息,代表词顺序的重要特征。segment embeddings:文本向量,用来区别两种句子,只有两种向量表示。
由于BERT强大的普适性,对于不同的下游任务,BERT都可以通过改造输入输出来处理。
数据集:《人民日报1998年中文标注语料库》
以1998年人民日报语料为对象,由北京大学计算语言学研究所和富士通研究开发中心有限公司共同制作的标注语料库。该语料库对600多万字节的中文文章进行了分词及词性标注,其被作为原始数据应用于大量的研究和论文中。
数据集格式如上图,每行的第一个是字,第二个是它的标签,字与标签之间使用空格分隔,两句话之间空一行。
动手实践
点击鼠标右键,在新标签页中打开此链接https://nbviewer.jupyter.orgl,打开新的网页再依次右键复制下面的实践案例地址、粘贴到新打开网页的搜索框中,按回车进行访问。
BERT模型完成中文命名实体识别实践案例地址:
https://github.com/huaweicloud/ModelArts-Lab/blob/master/notebook/DL_nlp_bert_ner/nlp_ner.ipynb
注:本文整理自华为云社区内容共创活动之华为云AI实战营:NLP
查看活动详情:https://bbs.huaweicloud.com/blogs/308924
- 点赞
- 收藏
- 关注作者
评论(0)