点击下面卡片关注我呀,每天给你送来AI技术干货!

来自:丁香园大数据

前言

得益于BERT的加持,Encoder搭配CRF的结构在中文NER上通常都有不错的表现,而且BERT使用方便,可以迅速微调上线特定服务;在好的基准条件下,我们也能把精力放在更细节的问题中,本文并不以指标增长为目标,而是从先验知识融合与嵌套实体问题两方面讨论,希望可以从这两个方向的工作中获得解决其他问题的启发

融合词汇知识

Chinese NER Using Lattice LSTM

融合词汇知识的方法可能适用于NLP问题的每个子方向,也是近几年中文NER问题的大方向之一;因为中文分词的限制,加之有BERT的加成,如今基本默认基于字符比基于分词效果更好,这种情况下,引入词汇知识对模型学习实体边界和提升性能都有帮助,Lattice LSTM是这一方向的先行者

相比于char和word级的RNN,Lattice LSTM加入了针对词汇的cell,用以融合词汇信息;计算上比char-cell少一个output gate,此外完全一致,可以理解为在传统LSTM链路中插入了一组LSTMCell,具体可以对照原文公式10-15理解(下图公式11为LSTMCell,公式13为WordLSTMCell):

FLAT: Chinese NER Using Flat-Lattice Transformer

Lattice LSTM验证了融合词汇信息提升中文NER任务的可行性,就是有点慢,每句话要加入的词汇不一样,无法直接batch并行,此外Lattice LSTM没法套BERT,现成的BERT不能用太不甘心;于是就有了同时弥补这两点的FLAT,并且其融合词汇的实现方式也简单的多:如图,FLAT融合词汇的方式就是拼接,词汇直接拼在输入里,此外只需改造Postion Embedding,将原始的位置编码改为起止位置编码

不过Postion Embedding的改造还不止于此,为了让模型学习到词汇span的交互信息,这里还引入了相对位置编码:如图,长度为N的输入会产生4个N * N的相对位置矩阵,分别由:head-head,head-tail,tail-head,tail-tail产生

综上,基于Transformer的FLAT可batch并行,速度自然优于Lattice LSTM,同时又可以套用BERT,在常用中文NER数据集上都有非常出色的表现;FLAT的显存占用比较高,但用显存换来的推理时间减少肯定是值得的

Leverage Lexical Knowledge for Chinese Named Entity Recognition via Collaborative Graph Network

通过词汇增强模型识别边界的能力很重要,然而Lattice LSTM在这方面还存在信息损失,受限于构造方式,词汇表示只能加给最后一个字,这样有什么问题呢?以本文CGN中提到的"北京机场"为例,想要成功标出"北京机场"而非"北京",需要模型将"机"识别为"I-LOC",而非"O"或"B-LOC",然而Lattice LSTM中的词汇并不影响"机"的encoding;此外,Lattice LSTM的融合方式说明词汇只对实体本身有帮助,然而正确识别实体可能也需要临近词汇的帮助,例如下图的"离开"表明"希尔顿"是人名而非酒店

复杂的字词关系无法通过RNN结构表示,选择Graph更为灵活,本文通过融合三种图结构学习复杂关系,利用GAN提取特征,获得倍数于Lattice LSTM的速度提升

如图所示,在LSTM编码输入文本并传入词汇表示后,模型会经过三种策略的构图层:

  • Word-Character Containing graph(C-graph):负责学习自匹配特征和词汇边界信息

  • Word-Character Transition graph(T-graph):负责构造字词相互之间的上下文邻接关系

  • Word-Character Lattice graph(L-graph):负责捕捉自匹配特征和隐含的词汇邻接关系

图表示完成后,通过Fusion层的线性结构融合特征,再传给CRF做标签decoding即可;虽然流程上比FLAT复杂一些,但一方面其非batch并行版的速度更快(不知道算不算建图的时间),另外文中提供的各种词汇融合思路也值得学习借鉴,从词汇边界和覆盖本身考虑,上下文语义贡献的作用,已经图结构带来的额外特征或许可以作为特定任务的预训练过程拆解使用

嵌套实体问题

嵌套实体在标注应用场景下很少被顾及,一方面传统序列标注模型也只能选择一个,另外标注数据时我们就只根据语义选择其中一个;但嵌套实体本身是存在的,比如医疗场景下的疾病词常由身体部位和其他词构成,即便不作为NER任务本身看待,让模型能学习标识嵌套实体,对实际场景中的其他任务也大有益处

Pyramid: A Layered Model for Nested Named Entity Recognition

通过多层结构抽取嵌套实体是一种容易理解的模型,2007年就有工作通过堆叠传统NER层处理嵌套问题,不过之前的工作都无法处理嵌套实体重叠的情况,并且往往容易在错误的层级生成嵌套实体(即实体本身存在,但不该在当前层识别到,否则会影响后续层的识别,从而破坏整体模型效果);本文针对这两个问题提出的金字塔结构

金字塔结构的思想如图所示,最底层为最小的文本单元,每一层负责长度为L的实体的识别,通过CNN向上聚合,模型不会遗漏重叠实体span,同时由于L的限制,该结构不会在错误的层生成不对应的实体;作者还认为高层span的信息对底层也有帮助,所以还设计了逆向金字塔结构,具体实现如下

在经过LSTM编码后,自底向上的Decoding层为每一层预测对应标签,因为按长度区分,所以理论上只需要预测"B-",但这样模型就必须堆叠N层才能覆盖全部span,不然就无法预测长度超过l的实体,所以作者设计了补救措施,在最高层同时预测"B-"和"I-"

Pyramid表现了处理嵌套问题的重要方向,即构造和编码潜在实体span,下面的工作也都遵循这一点设计实现各种模型结构

A Unified MRC Framework for Named Entity Recognition

本文彻底放弃了序列标注模型,用阅读理解的方法处理嵌套实体,即预测起止位置和实体分类;由起止位置标识的实体当然允许覆盖,自然就解决了嵌套问题;熟悉MRC的同学很快就会发现,通常的MRC只有一个答案span,然而一句话中可能存在多个实体span,怎么表示多个实体?因此本文修改了MRC的结构,首先起止位置预测:

预测P_end也是同样的结构,这里类似序列标注,表示每个char为起止位置的概率分布,这样就产生了a个起始位置和b个终止位置,理论上存在 a * b 个实体span;而后还需要一个模块计算a * b个匹配中有多少个真的是实体,即:

到此便解决了预测起止位置识别实体的问题,下面需要对每个实体span分类;通常的做法都是设计分类器,区别仅在于传入分类器的表示,本文的分类则十分新颖,也十分MRC,即:给输入文本拼接一个指向特定实体的问题,在这个问题下找出的span都属于这一类

本文思路新颖,实现简单且可套用BERT等不同Encoder,在传统NER和Nested-NER数据集上都有sota或接近的水准;唯一的遗憾是不适合多实体类别的应用服务,因为针对K个类别都要单独设计问题,所以相当于在预测时把每个问题都问一遍,时间开销或显存开销扩大K倍是无法避免的

TPLinker: Single-stage Joint Extraction of Entities and Relations Through Token Pair Linking

本文是实体关系联合抽取的工作,虽然思路上基本遵循实体识别->关系分类的流程,但实现上于寻常工作有巨大差别;虽然并不是中文数据集上的工作,但在嵌套实体的处理思路上,本文与寻常工作也有巨大差别,很有借鉴意义;这里首先介绍对普通实体,头实体,尾实体的标识方法:

如图所示,既然存在嵌套实体,那么不妨假设任意两个char都可能构成实体,这样就形成左图的N * N矩阵,模型通过二分类即可标识出存在的实体;不过文本是单向的,所以实体的start一定在end前面,这样就有了右图,即矩阵包括主对角线的下三角矩阵可以忽略,这样矩阵flat后的长度就从N * N减少到 (N + 1) * N / 2;因为是实体关系联合抽取,所以分别用三种颜色标识,紫色标记普通实体,红色标记同一关系下的头实体,蓝色标记尾实体,代码实现上对应三种分类器;另外由于一对实体可能存在多种关系,所以需要为每种关系准备一个分类器,如下图

笔者认为TPlinker处理嵌套问题的思路与MRC颇有几分相似,矩阵中每个元素都是一个span,既然存在嵌套,我们就不得不假设任意两个char都可能构成实体;此外,虽然最终要在 (N + 1) * N / 2长的序列上预测实体,但显存占用之类的问题并没有那么明显,因为这个平方级的序列是在Encoder输出后拼成的,我们还可以通过设置一些约束进一步减少长度;不过要注意,这个长序列的预测可能非常稀疏(一句话里的实体很少,按长度平方后0占比更大)

Span-based Joint Entity and Relation Extraction with Transformer Pre-training

本文同样是实体关系联合抽取,处理嵌套问题的思路与TPlinker类似,穷举出全部的潜在实体,然后用分类器识别;如下图所示

与TPlinker类似,在输入文本经过BERT后,sequence_output被用来构造潜在实体,理论上所有的ngram都是潜在实体,所以这里需要拼出全部ngram再通过span分类器识别实体,过滤非实体;文中提到一个小trick,给span classifier传入的向量表示除了sequence_output[span]和[CLS]外,还包含一个width embeddings向量,因为某些长度的span不大可能的实体,希望模型可以学到这一点;那么对于TPlinker和spERT,我们也都可以通过长度约束减少span的个数,手工降低模型的计算开销;最后关系分类的做法很直观,融合各路语义向量表示,通过sigmoid生成对应K个关系的1维向量,每个维度通过阈值判定是否存在该类关系

总的来说,Pyramid、MRC、TPLinker、spERT处理嵌套问题的出发点基本一致,从传统的token级标注转变为对潜在实体span的标注;实现上各有特点,Pyramid设计了分层结构,TPlinker的矩阵构造非常灵性,不过平方级长度的序列太过稀疏;spERT虽然理论上也有平方级数量的span,但真实训练可以通过负采样降低训练压力;MRC做分类的想法很是独特,不过对于多类别场景可能计算压力过大,或许可以分离entity识别和分类,避免多次BERT计算的开销

总结

词汇知识融合可能是NLP任务的永恒话题,利用词汇知识增强NER模型的想法也非常自然,Lattice LSTM及其后续工作展开了一个很好的方向,引入词汇关联结构提升模型也许在其他任务上也有很大收益;嵌套实体问题在当前的实际应用场景也许重视度还不够,但问题本身切实存在,这方面的工作往往在潜在实体span的识别上有独特的创新点,通过拆解和重组传统的序列分类和标注模块,引入MRC机制等思路,为我们解决复杂NLP问题带来新的思路

参考文献:

[1]《Chinese NER Using Lattice LSTM》

[2]《FLAT: Chinese NER Using Flat-Lattice Transformer》

[3]《Leverage Lexical Knowledge for Chinese Named Entity Recognition via Collaborative Graph Network》

[4]《Pyramid: A Layered Model for Nested Named Entity Recognition》

[5]《A Unified MRC Framework for Named Entity Recognition》

[6]《TPLinker: Single-stage Joint Extraction of Entities and Relations Through Token Pair Linking》

[7]《Span-based Joint Entity and Relation Extraction with Transformer Pre-training》

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

点击上面卡片,关注我呀,每天推送AI技术干货~

整理不易,还望给个在看!

中文NER碎碎念—聊聊词汇增强与实体嵌套相关推荐

  1. Lex-BERT:超越FLAT的中文NER模型?

    作者:JayLou娄杰 链接:https://zhuanlan.zhihu.com/p/343231764 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 谈起中文N ...

  2. 中文NER任务实验小结:BERT-MRC的再优化

    ©作者 | 邱震宇 单位 | 华泰证券算法工程师 研究方向 | NLP方向 前言 熟悉我的读者,应该看过我之前写过的一篇关于中文 NER 任务实践的文章(邱震宇:中文 NER 任务实验小结报告--深入 ...

  3. FLAT:中文NER屠榜之作!

    文 | JayLou娄杰 编 | YY 近年来,引入词汇信息逐渐成为提升中文NER指标的重要手段.ACL2020中一篇来自复旦大学邱锡鹏老师团队的 FLAT: Chinese NER Using Fl ...

  4. 12月碎碎念-随便聊聊这一年

    总第185篇/张俊红 每月一篇的碎碎念又来了,这一篇从2019年写到了2020年.昨天发了一条关于「时间的朋友」的朋友圈,有人在下面评论说,等我发文呢.我这才想起来去年的这个时候有写了一篇关于「时间的 ...

  5. LEBERT:基于词汇增强的中文NER模型

    01 任务概述 命名实体识别(简称NER)是NLP中的经典任务,即给定一个输入文本,让模型识别出文本中的实体信息. 在中文NER任务中,可以分为 Character-based (字符粒度) 和 Wo ...

  6. 每月碎碎念 | 2019.08

    Hi,这里是新开辟的"碎碎念"的世界. 这个区域作为记录心情的地方,把每日的所思所想所感所悟记录在这里,当做一个写日记的地方,每个月底汇总成一篇文章,只给我的朋友看. 不知不觉一个 ...

  7. 王兴在这个被互联网遗忘的网站上,留下了一万多条碎碎念。

    这几天,美团一顿暴跌, 10 号跌了 7% , 11 号跌了 4.8% . 按理说股票有涨有跌还挺正常的. 但很好笑的是,微博上有些人吐槽,说这次大跌是因为美团创始人王兴在饭否发了一首诗导致的. 还真 ...

  8. 学术期刊会议相关碎碎念

    学术期刊会议相关碎碎念 目录 学术期刊会议相关碎碎念 1. 查看所投期刊页数要求 2. IEEE期刊或会议LaTeX模板 3. CMD清除DNS缓存 4. 英语语法相关 5. IEEE会议论文集封面与 ...

  9. 一个谷粉和3年的Google Reader重度使用者的碎碎念

    2013-03-14 上午看到Andy Rubin辞去Android业务主管职务.由Chrome及应用高级副总裁继任的新闻,还在想这会给Android带来什么,中午刷微博的时候就挨了当头一棒:Goog ...

  10. 【BUAA_CO_LAB】计组p2碎碎念

    计组p2碎碎念 // 上机后补充:本次上机的三道编程题分别是[删除一个数字中的某些位,输出最小的可能值(提供了C代码)].[分解自然数n为x1 + x2 + -的形式并按字典序输出(提供了C代码)]. ...

最新文章

  1. 递归与非递归转换(栈知识应用)
  2. 深度学习中的图像分割:方法和应用
  3. ThreadLocal究竟存不存在内存泄漏?
  4. url参数传递 java_URL中文参数传递问题
  5. 人群计数最全代码、数据、论文合集
  6. android studio 7200u,超惊艳的设计!微软正式将Surface Studio和Surface Laptop带进中国:设计师们都看哭了...
  7. XT910开通了GPRS却上不了网的原因--“数据漫游”功能关闭导致的
  8. inotify 文件系统监控
  9. 区块链学堂(3):Solidity
  10. java 图片导出_java导出含图片的word
  11. 挑个很吉利的日子,开通我的博客!
  12. “匿名句柄” 是一切皆文件背后功臣……
  13. 1-3:学习shell之Linux系统
  14. 手机APP的秘密,看的一清二楚!
  15. ashx一般处理程序
  16. BOE(京东方)供货荣耀60 Pro流光四曲屏
  17. python数据分析的发展前景_Python+BI分析5000条招聘数据,原来数据分析工作在这儿最好找...
  18. python finally语句里面出现异常_python try except语句出现异常
  19. PHP留言板之提交留言
  20. Excel-VBA基础(7):VBE开发环境的主要优化配置

热门文章

  1. 12月10日站立会议
  2. 01_11_Strtus2简单数据验证
  3. Javascript定时器的使用
  4. VB.NET中DataGridView控件
  5. jQuery 属性操作 - addClass() 和 removeClass() 方法
  6. linux上安装openssl的步骤
  7. API文档自动生成,Swagger的配置
  8. mysql中show status介绍一
  9. HNOI2017 滚粗记
  10. 在cell中自定义分割线的小技巧