效果不降效率提升11.4倍,小米AI实验室提出针对中文命名实体识别的多孔词格编码器

2020 年 11 月 11 日

效果不降效率提升11.4倍,小米AI实验室提出针对中文命名实体识别的多孔词格编码器

针对中文命名实体识别(NER)中存在的分词信息缺失等问题,小米 AI 实验室 NLP 平台团队近期提出一种新颖的多孔词格模型 PLTE(PorousLatticeTransformerEncoder)。


多孔词格模型 PLTE 基于优化后的 Transformer 编码器,将分词信息有效地融入到字符级别的命名实体识别模型中,在保证识别效果的同时,识别效率可达到 Lattice-LSTM 命名实体识别模型的 11.4 倍。配合预训练模型,PLTE 效果更佳。


目前该工作已经被 COLING 2020 接收,论文链接https://arxiv.org/abs/1911.02733。本工作与中国科学院信息工程研究所柳厅文老师、西湖大学张岳老师合作完成。


背景


命名实体识别任务可以建模为序列标注问题,其中实体边界和类别标签被联合预测。不同于英文命名实体识别,中文没有明显的词边界,导致命名实体识别任务更加困难。一种直观的方法是先分词再进行词级别的序列标注,但这种方法会造成分词的错误传递;另一种是直接基于字符级别的序列标注,但这种方法忽略了词级别的信息;第三种折衷的方法是把词信息融入到基于字符级别的序列标注中,这种方法包括数据融合(例如分词和 NER 进行多任务学习)和结构融合(例如通过修改模型结构直接将词典融入到训练过程)。其中结构融合最具代表性的工作是 Lattice-LSTM[1]模型,该模型结构如下图所示:



模型精髓体现在:



即第 j 个字符的细胞状态表示为该字符的细胞状态与以该字符为结尾的词的细胞状态的加权和。该模型的不足之处体现在:


1、在 Lattice LSTM 中,第 j 个字只能获取以该字为结尾的词信息以及它之前时刻的字、词信息,但无法获取"Inside"词的信息;


2、DAG 网络结构导致速度过慢问题。


针对上述问题,我们提出了多孔词格 Transformer 编码器模型 PLTE,该模型简单有效地将词信息融入到了字符级命名实体识别结构中。


多孔词格编码器


在 Transformer 中,字、词的位置信息通过位置向量与字、词向量相加得到。因此,在 PLTE 的输入层,我们将词序列直接与字符序列拼接,避免了 DAG 结构。在进行自注意力计算时,为了解决词信息的引入和 NER 关注局部特征的特点,我们引入了 Lattice-Aware Self-Attention(LASA)与 Porous Multi-Head Attention(PMHA)两种关键技术。


词格自注意力(LASA)


在位置向量的计算过程中,由于词语位置被定义为词语开始字符的位置,导致模型忽略了相对位置信息,例如包含、相邻等相对位置。受到文献[2]中针对词格注意力相对位置处理的启发,我们定义了八种相对位置关系,融合到自注意力计算过程中。


多孔多头注意力(PMHA)


文献[3][4]中提到,自注意力机制应该对局部信息与远程信息进行区分,尤其在命名实体识别任务中,模型应更关心局部上下文信息对当前字、词的影响。因此在词格自注意力的基础上,我们引入了多孔结构。具体地说,我们引入一个中间节点 s,当前字、词仅对相邻字词及 s 进行注意力计算,且节点 s 会对输入序列中每个位置的字、词进行 attention 计算。在多孔结构下,当前字、词对于相邻字、词有两种信息传递方式:直接传递或者通过节点 s 传递;对于非相邻字、词只有一种信息传递方式,即通过节点 s 传递。由此,我们可以强化局部信息,弱化远程信息对当前字、词产生的噪音。


实验结果


我们在四个常用的中文数据集上验证我们方法的效果。我们与一些已有的 NER 常用模型、结构融合词信息模型进行对比,结果如表 1、表 2 所示:


表1 OntoNotes与Resume测试集结果


表2 MSRA与Weibo测试集结果


我们同时在词表词向量与预训练词向量两种模式下进行测试。在使用词表词向量时,当前模型超过了对比模型。在预训练词向量模式下,模型的优势更明显。论文中给出了这种现象的合理猜想:当前模型使用的是 Transformer 编码器,在模型结构上与 BERT 等预训练语言模型更加适配;同时当前模型结构简洁,更适合微调预训练词向量。


模型解码速度对比


我们在四个数据集上对比了模型的解码速度,结果如表 3 所示:


表3 模型解码速度对比


在实验中,我们设置 PLTE 的 batch 大小为 16。在词表词向量模式下,PLTE 模型解码速度可达到 Lattice LSTM 的 11.4 倍。即使使用预训练词向量,PLTE 的解码速度依然可以提升 7.11 倍。


总结


我们针对中文 NER 任务中词信息欠缺的问题以及 NER 任务局部性的特点,综合考虑速度与模型结果因素,提出了多孔词格编码器,在保证模型识别效果的同时,大幅提升了模型识别效率,同时可与 BERT 等预训练语言模型进行适配,有效推广了命名实体识别能力在公司业务中的应用落地。


参考文献


[1] Yue Zhang and Jie Yang. 2018. Chinese NER Using Lattice LSTM. InACL, pages 1554–1564.


[2] Fengshun Xiao, Jiangtong Li, Hai Zhao, Rui Wang, and Kehai Chen. 2019. Lattice-Based Transformer Encoder for Neural Machine Translation. InACL, pages 3090–3097.


[3] Baosong Yang, Zhaopeng Tu, Derek F. Wong, Fandong Meng, Lidia S. Chao, and Tong Zhang. 2018. Modeling Localness for Self-Attention Networks. InEMNLP, pages 4449–4458.


[4] Hang Yan, Bocao Deng, Xiaonan Li, Xipeng Qiu. 2019. TENER: Adapting Transformer Encoder for Named Entity Recognition. Preprint arXiv: 1911.04474.


2020 年 11 月 11 日 08:001123
用户头像
刘燕 InfoQ记者

发布了 470 篇内容, 共 146.9 次阅读, 收获喜欢 830 次。

关注

评论

发布
暂无评论
发现更多内容

架构师训练营第六周总结

陈靓-哲露

修炼我们的智慧之眼

J.Spring

认知提升

【计算机网络】网络层——路由器与路由选择协议

烫烫烫个喵啊

计算机网络 网络层

DolphinScheduler-1.3.0-dev功能体验

Eights

hadoop 大数据任务调度

架构师训练营第六周作业

Melo

百万级别数据Excel导出优化

Throwable

架构设计 springboot

云原生实践系列:概述

孤岛旭日

Serverless 微服务 Service Mesh 服务架构

架构师训练营第六周总结

hiqian

北京区块链规划重点发展海淀朝阳通州等区,加大对代币监管力度

CECBC区块链专委会

北京行动计划 四个高地 需求导向 为政务服务

玛雅密码社区不忘初心 共筑未来通证新经济

Geek_116789

数据分析之AB testing实战(附Python代码)

JackTian

Python 编程 程序员 数据分析 AB testing实战

Newbe.Claptrap 框架中为什么用 Claptrap 和 Minion 两个词?

newbe36524

Docker .net core netcore ASP.NET Core

SpringBoot2.x入门:应用打包与启动

Throwable

springboot

3W字干货深入分析基于Micrometer和Prometheus实现度量和监控的方案

Throwable

Java 监控 Grafana Prometheus springboot

SpringBoot 入门:02 - 实现 MVC

封不羁

Java spring springboot

十个提高产品经理工作效率的必备工具,果断收藏

马踏飞机747

大数据 设计 产品经理

list vs tupple

Leetao

Python 数据结构 Python基础知识

架构师训练营第六周作业

张明森

不会有人还不知道全文检索工具Lucene怎么用吧?文字长文教程

给你买橘子

Java 搜索引擎 lucene 程序员 开发工具

谈谈对分布式事务的一点理解和解决方案

Throwable

分布式 分布式事务 架构设计

看动画学算法之:排序-冒泡排序

程序那些事

算法 动画 排序算法 轻松学

基础篇:Object对象

csc

Java Java 25 周年

并行流ParallelStream中隐藏的陷阱

Throwable

Java

iOS - CollectionViewCell对应不同flow layout的实例

teoking

ios

如何搭建Hive 环境

Rayjun

大数据 hive

Java 线程的生老病死

武培轩

Java 线程 多线程 并发 线程状态

计算机的时钟(一):NTP协议

ElvinYang

基础篇:JAVA基本类型

csc

Java Java 25 周年

架构师训练营第六周作业

hiqian

“新基建”来了!云南三年投资3776亿!

CECBC区块链专委会

Vagrant 快速入门

FeiLong

vagrant

效果不降效率提升11.4倍,小米AI实验室提出针对中文命名实体识别的多孔词格编码器-InfoQ