查看原文
其他

NLP集大成之命名实体识别

The following article is from NLP杂货铺 Author 错乱空时

公众号关注 “ML_NLP
设为 “星标”,重磅干货,第一时间送达!


论文标题:A Survey on Deep Learning for Named Entity Recognition
论文链接:https://arxiv.org/pdf/1812.09449.pdf

论文介绍了NER研究的背景、传统方法、当前的现状、挑战和未来的研究方向,并根据输入、文本编码结构与标签解码结构三个过程,对NER相关的深度学习模型进行分类。因为能力与时间有限,分享文章中不可避免有些错误,因为微信公众号不能修改文章,所以会在知乎上同步最新内容。

集大成系列会分享各个领域(方面)的综述论文(建议大家看原论文),分享内容主要来自于原论文,会有些整理与删减,以及个人理解与应用等等,其中涉及到的算法复现都会开源在:https://github.com/wellinxu/nlp_store ,更多内容关注知乎专栏(或微信公众号):NLP杂货铺。

  • 介绍
    • NER资源:数据与工具
    • NER评价指标
    • 传统NER识别方法
    • 基于深度学习的NER
  • 分布式输入
    • 词粒度的表示
    • 字符粒度的表示
    • 混合表示
  • 文本编码器
    • 卷积神经网络CNN
    • 循环神经网络RNN
    • 递归神经网络
    • 神经语言模型
    • Transformer类结构
  • 标签解码器
    • MLP+softmax层
    • 条件随机场CRF
    • 循环神经网络RNN
    • 指针网路
  • 深度学习NER模型总结
  • NER的深度学习方法
  • 挑战与未来方向
    • 挑战
    • 未来方向

介绍

命名实体识别(NER)在各种自然语言处理任务中都起到重要作用,包括文本理解、信息抽取、自动文本摘要、问答、翻译、知识库建立等等。

NER资源:数据与工具

下面两张图分别显示了NER相关的标注数据集和处理工具。从图上可看出,在2005年之前,数据集主要是对新闻做的标注,且实体类别数量较少,适用于粗粒度的NER任务;在这之后,各种来源的数据变多了,且实体类别也多了很多。

NER评价指标

NER本质上包含两个子任务:边界检测和类型识别,一般认为一个实体识别正确,需要该实体的边界与类型都正确。

精确匹配评估

精确匹配评估的常用指标:

其中表示识别出的实体且是正确实体的数量,表示识别出的实体却是不存在实体的数量,表示是正确的实体却没被识别出的数量。
当然,除此之外,像macro-f1、micro-f1也会用来作评估。

宽松匹配评估

宽松匹配降低了匹配正确的要求,常见的有:

  1. 类别正确:一个实体被正确识别到类别,而边界与正确边界有重叠即可。
  2. 边界正确:一个实体被正确识别到边界,而不管类别是什么。

传统NER识别方法

  1. 基于规则的方法
    该方法主要依赖人工特征,可以基于特定领域或者特定语法规则来设计规则。当词汇详尽时,基于规则的系统工作得很好。由于特定领域的规则和不完整的词典,这类系统往往具有较高的精度和较低的召回率,无法转移到其他领域。
  2. 基于无监督学习的方法
    典型的是基于文本相似来聚类的NER提取系统,其主要思想是,词汇、词语模式以及在大语料上计算的统计特性可以用来推断命名实体的出现。
  3. 基于特征的监督学习方法
    这时NER被转化为一个多分类问题或者序列标注问题,通过精心设计的特征,在标注语料上进行训练,从而在未知文本上识别出类似的模式实体。

基于深度学习的NER

深度学习处理NER的优点:

  1. 受益于深度学习的非线性转换,可以从数据中学到更复杂的特征。
  2. 避免大量的人工特征的构建。
  3. 可以设计为端到端的结构。

本文的划分NER模型的方法:
如下图所示,本文从输入、编码、解码三个方面来划分NER模型。

分布式输入

词粒度的表示

像word2vec、fasttext、glove或者SENNA等算法可以通过大规模的无监督语料学习词粒度的表示,作为NER模型的输入,在训练过程中既可以固定不变也可以微调。已有研究表明,像这样预训练的词向量,在NER任务上起到了很大的作用。

字符粒度的表示

除了仅考虑词向量作为输入之外,一些研究也融合了字符粒度的表示作为模型的输入。字符级别的表示,相对于词向量,能够提取出子词的特征,比如前缀后缀等,也能够缓解oov的问题。如下图所示,最常用的两种提取结构分别基于CNN与RNN模型。

混合表示

除了词粒度和字符粒度的表示之外,一些研究还融合了一些额外信息,比如地点信息、词汇相似度、视觉信息等等。像FLAT、BERT、XLNET等模型也被本文划分为混合表示,因为输入的时候还包含有位置等信息。

文本编码器

卷积神经网络CNN

CNN可以方便的获取局部特征,通过pad操作,可以让CNN的输出层与输入层具有相同的序列长度,从而可以使用CNN来进行序列相关的特征抽取。但是浅层的CNN只能获取局部特征,要获取全局特征或者更大的感受野,则需要比较深的CNN层,这会增加计算量也会提高过拟合的风险,所以有学者提出了膨胀CNN的模型。膨胀CNN在选择元素进行卷积的时候,会膨胀被选元素之间的距离,原始CNN则是选择紧挨着的元素。如下图所示,分别是膨胀系数为1/2/4,滤波宽度都是3的3层膨胀CNN。
为了更适应NER任务,有人继续在膨胀CNN的基础上提出了迭代膨胀CNN(ID-CNN),进一步缓解了CNN层太深而过拟合的风险。其主要思想是,在n层膨胀CNN之后,使用相同的参数,再继续循环几次n层膨胀CNN。

循环神经网络RNN

循环神经网络(或其变体LSTM/GRU等),在对序列数据建模上已经取得了很好的成绩,尤其是双向RNN模型,更能同时获取当前位置之前与之后的信息。如下图所示,是典型的基于RNN模型的特征抽取结构。

递归神经网络

递归神经网络是非线性自适应模型,能够通过给定的拓扑结构进行遍历,学习到深度结构化信息。命名实体跟语言结构、名词短语都高度相关,但通常的处理方法都没有考虑句子的短语结构。所以有人使用递归神经网络来处理短句结构信息,如下图所示,显示了如何递归计算每个节点的特征,其中也包含了两个方向,一个是自下而上的方向,计算了每个节点子树的语义特征,另一个是自上而下的方向,则计算了节点的语言结构特征。

神经语言模型

语言模型是描述序列生成的一系列模型,前向语言模型会根据前面的序列计算下一个元素的分布,后向语言模型则是相反,根据后面的序列计算前一个元素的分布。(目前常见的语言模型主要是基于RNN模型,或者其他结构,个人认为论文中独立作为一个分类跟其他类别不搭,该类别下的模型更像语言模型与NER一起的多任务模型,或者基于语言模型进行预训练之后来处理NER任务。)
有学者提出了语言模型与NER一起组成的多任务学习模型,如下图所示,在每一个位置,都会预测当前的label以及前后的token是什么,从而可以学到更丰富的文本特征。
除此之外,还有基于预训练好的语言模型来处理NER任务,比如ELMo模型等等。

Transformer类结构

Transformer以self-attention和全连接层为基础进行堆叠,构造编码器与解码器,该结构在很多任务上都可以用更短的训练时间获得更高的精度。如下图所示,基于Transformer的一些模型,如GPT、BERT等等,都是现在大规模无标签的语料上进行训练,然后在特定的有标签的数据上进行微调,往往能够到达很好的效果。除此之外还有很多其他的变体,如GPT2/GPT3/XLNET/ALBERT/RoBERTa/ELECTRA/ERNIE/MacBERT等等。

标签解码器

标签解码器是NER模型的最后一个阶段。它接受上下文相关的表示作为输入,并基于输入产生相关的序列标签。如下图所示,常用的标签解码结构有如下4种:MLP+softmax层,条件随机场(CRFs),循环神经网络,指针网络。

MLP+softmax层

NER通常被认为是一个序列标记问题,而使用多层感知器+Softmax层作为标签解码器层,则将序列标注任务转化为一个多分类问题。每个单词的标签都是根据上下文相关的表示独立预测的,而不考虑它的邻居标签结果。

条件随机场CRF

条件随机场是一个以观测序列为全局条件的随机场。CRF已被广泛应用于基于特征的监督学习方法。许多基于深度学习的NER模型使用CRF层作为标签解码器,并取得了很好的精度。

循环神经网络RNN

RNN解码是个贪婪的过程,先计算出第一个位置的标签,然后后面每一个位置的标签都是基于前面的状态计算出标签,在标签数量比较多的时候,可以比CRF更加快速。

指针网路

指针网络是将序列标注问题转化为两个子问题:先分块再分类。指针网络会贪婪地从头开始找下一个块结束的位置(开始的位置很显然,第一个块的开始位置是起始点,后面的开始位置都是前面一块的结束位置的后继位置)如上图d所示,在起始块"<s>"后一块的结束块位置是"Jordan",这样就得到块"Michael Jeffrey Jordan",然后将这个块进行分类确定类别,之后再继续找下一个块的结束位置,找到"was",这样就得到一个新的块"was",再将这个块进行分类,然后这样循环下去直到序列结束。指针网络主要就起到确定块起始位置的作用。

深度学习NER模型总结

如下图所示,总结了最近关于NER相关的模型,可以看出BiLSTM-CRF是最常用的模型架构,预训练模型(BERT等)的出现进一步提高了整体的精度。
本文从输入、文本编码器到标签解码器进行了讨论。对输入而言,有些研究认为添加额外的特征可以提高整体模型的效果,而有学者认为额外特征会增加人工成本且会损害深度模型系统的通用性。
对文本编码器而言,Transformer结构在大规模预训练的前提下效果要好于LSTM等模型,但如果不进行预训练或者训练数据较少则不能取得很好的效果,另一方面,当序列长度小于表示维度的时候,Transformer的速度比Lstm的速度更快。
对于标签解码器而言,RNN或者指针网络都是贪婪策略,从而不能并行运算影响速度;CRF是最通用的解码器,能够有效地捕捉到标签之间的依赖关系,但如果标签数量太大,则CRF的计算成本会比较高,除此之外,当使用BERT等预训练模型的时候,CRF的效果也不一定比softmax的效果更好。

NER的深度学习方法

  1. 深度多任务学习
    多任务学习是一种将一组相关的任务一起学习的方法。考虑到不同任务之间的关系,多任务学习算法比单独学习每个任务的算法获得更好的学习效果。
  2. 深度迁移学习
    迁移学习的目的是利用从源领域学习到的知识在目标领域上执行机器学习任务。
  3. 深度主动学习
    主动学习的关键思想是,如果让算法自主选择学习的数据,则可以在较少的训练数据的情况下表现得更好。
  4. 深度强化学习
    强化学习(RL)是受行为主义心理学启发的一种机器学习算法,它关注的是agent如何在环境中采取行动,从而能最大化累积奖励。其理念是,agent将通过与环境互动并因执行行为而获得奖励来学习环境。具体的,环境被建模为一个随机有限状态机,具有输入(来自agent的动作)和输出(给agent的观察和奖励)。它由三个关键部分组成:(i)状态转换函数,(ii)观察(即输出)函数,(iii)奖励函数。agent也被建模为一个随机有限状态机,具有输入(来自环境的观察/奖励)和输出(对环境的行动)。它由两部分组成:(i)状态转换函数,(ii)策略/输出函数。agent的最终目标是通过尝试最大化累积奖励来学习一个好的状态更新函数和策略。
  5. 深度对抗学习
    对抗学习是在对抗样本上进行训练的过程,其目的是让模型对攻击更鲁棒并提高整体正确性。
  6. 神经注意力机制
    注意机制在很大程度上是基于人类的视觉注意机制,神经注意力机制允许神经网络有能力关注其输入的子集。通过注意机制的运用,NER模型能够捕获信息输入中的最有效信息。

挑战与未来方向

挑战

  1. 数据标注
  2. 非正式文本
  3. 未知实体

未来方向

  1. 细粒度NER和边界检测
  2. 实体链接
  3. NER深度模型的可扩展性
  4. 深度迁移学习
  5. 基于DL的简单使用的NER工具包


下载1:四件套

在机器学习算法与自然语言处理公众号后台回复“四件套”,

即可获取学习TensorFlow,Pytorch,机器学习,深度学习四件套!


下载2:仓库地址共享

在机器学习算法与自然语言处理公众号后台回复“代码”

即可获取195篇NAACL+295篇ACL2019有代码开源的论文。开源地址如下:https://github.com/yizhen20133868/NLP-Conferences-Code


重磅!机器学习算法与自然语言处理交流群已正式成立

群内有大量资源,欢迎大家进群学习!


额外赠送福利资源!深度学习与神经网络,pytorch官方中文教程,利用Python进行数据分析,机器学习学习笔记,pandas官方文档中文版,effective java(中文版)等20项福利资源

获取方式:进入群后点开群公告即可领取下载链接

注意:请大家添加时修改备注为 [学校/公司 + 姓名 + 方向]

例如 —— 哈工大+张三+对话系统。

号主,微商请自觉绕道。谢谢!


推荐阅读:

工业界求解NER问题的12条黄金法则

三步搞定机器学习核心:矩阵求导

神经网络中的蒸馏技术,从Softmax开始说起

继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存