作者:刘锁阵
单位:燕山大学
论文地址: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可以充分利用格子信息,并具有出色的并行化能力。
背景介绍
使用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