博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
论文笔记 | FLAT: Chinese NER Using Flat-Lattice Transformer
阅读量:4290 次
发布时间:2019-05-27

本文共 2895 字,大约阅读时间需要 9 分钟。


作者:刘锁阵

单位:燕山大学


论文地址:https://arxiv.org/pdf/2004.11795.pdf

代码地址:https://github.com/LeeSureman/Flat-Lattice-Transformer


文章目录

Character-word lattice结构对于解决中文NER问题是有效的,然而由于格子结构是复杂的和动态的,大多数现在的基于格子的模型很难完全利用GPU的并行计算能力,并且通常有着比较低的推断速度

在本篇paper中,作者提出了FLAT:Flat-Lattice Transformer for Chinese NER,将格子结构转换为由位置区间组成的平坦结构。 每个区间对应一个字符或潜在单词及其在原始格中的位置。通过使用Transformer和特定的位置编码方案,Flat可以充分利用格子信息,并具有出色的并行化能力

背景介绍

Figure 1

使用Lattice的两种方式:

  • 一种是设计一个模型与格子输入兼容,例如Lattice LSTM和LR-CNN。在Lattice LSTM中,如Figure 1(b)所示,采用了一个额外的单词单元对潜在单词进行编码,并使用注意机制在每个位置融合变量节点。LR-CNN使用CNN来在不同的窗口编码可能的单词。然而,RNN和CNN都很难构建长距离依赖模型。由于动态的lattice 结构,这些方法不能完全利用GPU的并行计算能力。
  • 另一种方法是将格子转换为图,并使用GNN来进行编码,例如LGN和CGN。

在本篇论文中,作者提出了Flat Lattice Tranformer。

  • Transformer采用了全连接的注意力机制来对文本序列中的长距离信息进行建模,为了记录位置信息,引入了文本序列中每个token的位置表示。
  • 并针对lattice结构设计了一个位置编码方案。

模型设计

在这里插入图片描述

将格子转换为平坦结构

在根据词典从文本中得到格子之后,将其展平。如Figure 1(c)所示,Flat-Lattice被定义为区间的集合,一个区间对应一个token,一个head和一个tail。

对于区间的相关位置编码

对于在格子中的两个区间 x i x_i xi x j x_j xj,他们有三种关系:

  • 交叉(相交)
  • 包含
  • 分离

使用dense vector来对他们的关系进行建模。因为区间包含头部和尾部信息,所以不仅可以使用它表示两个token的关系,而且还能够表示一些更详细的信息,例如一个字符和一个单词之间的距离。

假定 h e a d [ i ] head[i] head[i] t a i l [ i ] tail[i] tail[i]表示区间 x i x_i xi的头部和尾部位置。显然,可以得到4种相关距离:

  • d i j h h = h e a d [ i ] − h e a d [ j ] d_{ij}^{hh} = head[i] - head[j] dijhh=head[i]head[j]
  • d i j h t = h e a d [ i ] − t a i l [ j ] d_{ij}^{ht} = head[i]-tail[j] dijht=head[i]tail[j]
  • d i j t h = t a i l [ i ] − h e a d [ j ] d_{ij}^{th} = tail[i] - head[j] dijth=tail[i]head[j]
  • d i j t t = t a i l [ i ] − t a i l [ j ] d_{ij}^{tt} = tail[i] - tail[j] dijtt=tail[i]tail[j]

相关位置编码:

R i j = R e L U ( W r ( P d i j h h ⊕ P d i j t h ⊕ P d i j h t ⊕ P d i j t t ) ) R_{ij} = ReLU(W_r(P_{d_{ij}^{hh}}\oplus P_{d_{ij}^{th}}\oplus P_{d_{ij}^{ht}}\oplus P_{d_{ij}^{tt}})) Rij=ReLU(Wr(PdijhhPdijthPdijhtPdijtt))

计算 p d p_d pd(Vaswani et al. (2017))

P d 2 k = s i n ( d / 1000 0 2 k / d m o d e l ) P_d^{2k} = sin(d/10000^{2k/d_{model}}) Pd2k=sin(d/100002k/dmodel)
P d 2 k + 1 = c o s ( d / 1000 0 2 k / d m o d e l ) P_d^{2k+1} = cos(d/10000^{2k/d_{model}}) Pd2k+1=cos(d/100002k/dmodel)

然后通过一个注意力机制的变体(Dai et al., 2019))来使用相关位置编码:

A i , j ∗ = W q T E x i T E x j W k , E + W q T E x i T R i j W k , R + u T E x j W k , E + v T R i , j W k , R A_{i,j}^{*} = W_q^T E_{x_i}^T E_{x_j} W_{k,E} + W_q^T E_{x_i}^T R_{ij}W_{k,R} + u^T E_{x_j}W_{k,E} + v^T R_{i,j}W_{k,R} Ai,j=WqTExiTExjWk,E+WqTExiTRijWk,R+uTExjWk,E+vTRi,jWk,R

接下来的计算与vanilla Transformer相同。

在FLAT之后,只将字符表示传入输出层,再之后是CRF。

实验结果和分析

作者使用了四个中文数据集来用于评估模型:

  1. Onenotes 4.0(Weischedel and Consortium, 2013)
  2. MSRA (Levow, 2006)
  3. Resume(Zhang and Yang, 2018)
  4. Weibo (Peng and Dredze, 2015; He and Sun, 2016)

数据集展示:

在这里插入图片描述
结果对比:
Table 2
注意力机制优于Lattice-LSTM的两个原因:

  • 所有的字符能够直接与它匹配的单词交互
  • 长距离依赖能够被完全建模

计算效率对比:

在这里插入图片描述
与BERT的兼容:
在这里插入图片描述
可以看到,对于大数据集例如onenotes和MSRA,FLAT+BERT能够相比BERT有不错的提升。对于小数据集Resume和Weibo,提升效果比较小。

结论

在本篇论文中,作者引入了一个flat-lattice Transformer来结合中文NER的词典信息。

模型的核心是将lattice结构转换为区间集合,并引入了特定位置编码。

实验结果表明FLAT模型在效果和性能上都明显优于其它基于词典的模型。

转载地址:http://tqmgi.baihongyu.com/

你可能感兴趣的文章
为什么要用枚举实现单例模式(避免反射、序列化问题)
查看>>
微服务架构下的分布式限流方案思考
查看>>
全网最详细的一篇SpringCloud总结
查看>>
消息中间件中的有序消息,其实是排队但是不能插队
查看>>
不知道分布式事务,还想进互联网大厂
查看>>
mysql为什么使用B+树作为索引的结构
查看>>
mysql索引总结(1)-mysql 索引类型以及创建(文章写的不错!!!)
查看>>
聊聊CAS - 面试官最喜欢问的并发编程专题
查看>>
Spring Boot 中使用一个注解轻松将 List 转换为 Excel 下载
查看>>
高并发环境下,先操作数据库还是先操作缓存?
查看>>
MySQL Explain详解
查看>>
一直搞不清楚什么是读写分离,主从复制的原理,今天总算搞懂了
查看>>
消息队列 mq 必会面试题
查看>>
线程池的工作原理是啥?能手写一个线程池吗?
查看>>
一口气说出 6种 延时队列的实现方案,大厂offer稳稳的
查看>>
原来redis这么简单,跟着文章操作一遍你就会了
查看>>
Redis两种持久化机制RDB和AOF详解(面试常问,工作常用)
查看>>
事务隔离级别中的可重复读能防幻读吗?
查看>>
老伙计,关于JDK并发包,这些不为人知的秘密你知道多少?
查看>>
图片的左右切换
查看>>