点击上方,选择星标,每天给你送干货!
来自:CS的陋室
上周推荐了一篇NER的论文,这周算是把这篇综述看完了,感觉自己的收获挺大的(老是感觉自己看过写过,但是又没找到),给大家介绍一下。
A Survey on Deep Learning for Named Entity Recognition.
这篇综述让我感受到比较完整的NER世界观是啥样的,问题定义、问题拆解、常用方法及其评价、模型评估、拓展等,由于是综述,全面性满满,具体的方法可以在参考文献里面找,212篇文献可谓是诚意满满。
1 introduction
命名实体识别的中的核心,命名实体(Named Entity)概念的出现其实并不久远,1996年。时至今日,处理NER问题的主要有四种:
基于规则的方法。
无监督学习方法。
基于特征的机器学习方法。
深度学习方法。
我们其实可以看到,得益于机器学习方法,NER问题被更好的解决。
2 background
本章主要是讨论了NER的一些背景问题,NER的问题定义(尤其是NE的定义)、数据集和工具、模型评估、传统方法之类的。
NER问题定义
首先是问题定义,主要是命名实体的定义,我直接用文章的原句吧:
A named entity is a word or a phrase that clearly identies one item from a set of other items that have similar attributes.
那么NER,其实就是去识别这个命名实体。
NER的模型评估
作者把评估方法分为了两块,精准匹配和软匹配(我翻译的,英文是relaxed-match)。
精确匹配有两个层面,一个是每个位点的预测准确情况(BIO或者BIEMO的情况),这个比较常见。
而软匹配上,其实由于他的复杂性和基于问题的特异性,没有被广泛使用。
传统NER方法
所谓的“传统”方法,作者认为是除了DL之外的方法都算吧。
基于规则的方法会依赖问题的背景,其实也有一些输出,作者角度看,如果资源足够时,其实就能够有很好的效果(这个和我的实践来看是一致的),高准确低召回低可迁移性是它的特点。
无监督方法
无监督方法也有一些,说白了就是聚类,利用的是关键词汇、种子词汇去进行扩增,从而完成无监督学习的任务,需要根据问题进行策略的调整,可迁移性较低。
基于特征的机器学习方法
常用的机器学习方法其实就是那些,隐马尔科夫、决策树、最大熵、支持向量机和条件随机场。
至于特征上,也给了大家一些提示,词性、句子成分、大小写等,另外还可以引入一些外部的知识信息,例如维基百科的地点词等。
3 NER中的深度学习技术
我们都知道,在nlp领域下,论准招等各种效果,深度学习具有很高的地位,因此作者也花了非常大的笔墨来讨论深度学习,首先就谈了深度学习的特点:
非线性处理。
自动化信息抽取,不用花费精力寻找和维护特征。
直接端到端训练。
对于解决NER的深度学习方法,作者把整体架构划分为三个等级:
分布式文本表示
上下文编码
tag解码
分布式文本表示
分布式文本表示,说白了就是word2vector、glove之类的预训练方法。具体定义不赘述了哈哈哈。
word级别,其实就比较常见word2vector、glove、fasttet、senna等,当然也有一些简单预训练语言模型,例如结合CNN之类的。
而char级别(中文就是字级别)对未登录词的识别能力很高,其构建的主要方式主要有CNN-based和RNN-based。
当然,还有一些混合方法,会加入一些外部信息(词典信息、词汇相似度信息),这些方法对效果提升有用,但是可迁移性下降了。另外,作者把bert的方法也归于此处,主要原因是他在预训练的时候使用了大量外部语料信息。
上下文编码架构
上下文编码是文本表示之后的操作,作者分为了4种情况,CNN、RNNs、递归神经网络和transformer,另外还单独提到了神经网络语言模型。
CNN和RNNs的情况其实比较常规了,不做太多解释,文章中其实更多的也是论文的解释。
递归神经网络(Recurrent Neural Networks)其实我也只是听过,自己没有深入地了解,后续会排期学习。简单的用作者的话评价:
Recursive Neural Networks are non-linear adaptive mod- els that are able to learn deep structured information, by traversing a given structure in topological order.
也就是构建了一种特定的拓扑结构来表达内部的信息,这种信息大都和句子的语法结构相关。
神经语言模型是nlp里面最为基础的内容,NLP几次前进的里程碑都和神经语言模型的大跨步有关,word2vector、elmo、bert。
想提一个有意思的思路,他借助语言模型和NER多任务的模型来进行训练,这种方式能让模型学到更加针对领域的语言模型,同时也能满足NER的需求,作者的解释放这里:
Peters et al. [19] proposed TagLM, a language model augmented sequence tagger. This tagger considers both pre-trained word embeddings and bidirectional language model embeddings for every token in the input sequence for sequence labeling task. Figure 12 shows the architecture of LM-LSTM-CRF model [121], [122]. The language model and sequence tagging model share the same character-level layer in a multi-task learning manner. The vectors from character- level embeddings, pre-trained word embeddings, and lan- guage model representations, are concatenated and fed into the word-level LSTMs. Experimental results demonstrate that multi-task learning is an effective approach to guide the language model to learn task-specific knowledge.
transformer可以说是距离我们最近的一次里程碑跨越的代表了,一次技术的突破需要时间落到更多任务的实践中,NER也不例外,目前在transformer应用于NER的研究上,已经有不少人进行尝试,而且从效果来看,具有下面这些特点:
上下文和位置信息的表征。
微调方法为模型的通用性提供了保证,同时对特定问题也能进行特异性训练。
tag解码器
有关tag解码器,其实就有点像机器学习方法了,上游做好特征工程,然后下游接解码器预测每个位置的分类,常用的方法有:
MLP+softmax,简单,但是上下文信息捕获能力很差。
CRF,NER上比较重要的基本方法。、
RNN,训练速度比CRF稍快,但是个人感觉效果不如CRF强。
pointer networks。RNN的一种升级版,用来提取其中的chunk,内部其实有两个神经网络,一个用于分词,一个用于标记。
summary
作者花了很多的力气去对比各个模型的效果,经过作者的总结,有如下信息:
文本表示效果对预测结果影响很大。
噪音数据对效果影响较大。
外部信息,包括预训练语言模型,效果虽好,作者特别指出了里面的问题:
外部信息依赖计算性能和标注性能。
大部分情况不利于可迁移能力。
从效果来看transformer比lstm系列效果更好,可以成为lstm的替换方法。
rnn系列的缺点在于贪婪法,首先强烈依赖于上一步的结果,同时对速度有影响。
后续作者对任务下的方法进行总结,给出一些方法选择的建议:
For end users, what architecture to choose is data and domain task dependent. If data is abundant, training models with RNNs from scratch and fine-tuning contextualized language models could be considered. If data is scarce, adopting transfer strategies might be a better choice. For newswires domain, there are many pre-trained off-the-shelf models available. For specific domains (e.g., medical and social media), fine-tuning general-purpose contextualized language models with domain-specific data is often an effective way.
可惜的是作者这里只考虑了准招效果,而没有考虑参数量、复杂度、内存等其他因素,不过就准招而言,确实有借鉴意义。
深度学习在NER中的应用
这章更多的是谈一些使用深度学习解决NER的思路,这块涉及自己的盲点很多,但是这些东西都很值得学习,此处先列出,后续慢慢学习。
深度多任务学习。
深度迁移学习。
深度主动学习。
深度强化学习。
深度对抗学习。
Attention机制。
NER的挑战和未来方向
看到类似的句子,说明综述到尾声了,总结了过去,肯定要展望未来,在挑战上,作者提出了两个关键点:
数据标注问题,NER相比文本分类,其实更加需要数据,这个一直是一个老大难的问题,如何获取更多更准的标注样本,是一个技术活。
非正式语言环境。在非正式的语境下,其实语法结构并不是那么完整(例如微博、朋友圈、用户query到等),这对准确性和鲁棒性要求就很高了。
而在方向上,有如下思路可供参考:
细粒度的NER和边界问题。NER有时候也被叫做提槽,槽位的精准在现在问题下,其实多在于对边缘的准确划分。
实体链接。即对NER问题有了更高级的需求,要求理解实体之间的关系,这个对知识图谱的构建非常重要。
资源匮乏下NER的训练。
NER的可延展性,由于NER大都依赖rnn这种递归式,贪婪式的模型,所以耗时普遍较长,长句子的识别时间尤其可怕,因此这个问题需要被关注。
迁移学习。说白了就是看看能不能白嫖或者是少花钱的方式完成一个ner任务。
NER下可用的深度学习工具。
这篇综述其实谈到了很多NER我之前没有关注的点,几个重点我划一下,后续我也会持续去看:
上下游编码结构和tagger两个模块的模型拓展。
多任务、主动学习这两块有较大的挖掘空间。
另外我认为作者还有几个方向没有谈到但是大家应该关注:
nlp下的数据增强问题,可以从ner角度开始拓展,主要因为ner的标注数据具有的信息,比比他简单的文本分类问题的数据多,也比比他复杂的机器翻译、对话系统的数据信息更结构化,因此用ner进行数据增强具有很大价值。
蒸馏。我们都知道上述模型耗时长、体积大,蒸馏是解决该问题的一个重要方法,但是相比CV领域,nlp领域的蒸馏还有很大潜力。
说个正事哈
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方“深度学习自然语言处理”,进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。
方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。
记得备注呦
推荐两个专辑给大家: