这一章我们主要关注transformer在序列标注任务上的应用,作为2017年后最热的模型结构之一,在序列标注任务上原生transformer的表现并不尽如人意,效果比bilstm还要差不少,这背后有哪些原因? 解决这些问题后在NER任务上transformer的效果如何?完整代码详见ChineseNER

Transformer水土不服的原因

Hang(2019)在TENER的论文中给出了两点原因

1. 三角函数绝对位置编码只考虑距离没有考虑方向

2. 距离表达在向量project以后也会消失

我们先来回顾下原生Transformer的绝对位置编码, 最初编码的设计是为了满足几个条件

  • 每个绝对位置应该有独一无二的位置表征
  • 相对位置表征应该和绝对位置无关以及句子长度无关
  • 编码可以泛化到训练样本之外的句子长度

于是便有了基于三角函数的编码方式,在pos位置,维度是\(d_k\)的编码中,第i个元素的计算如下

\[PE(pos, i)=
\begin{cases}
sin(w_k \cdot pos)& \text{if i=2k}\\
cos(w_k \cdot pos),& \text{if i=2k+1}
\end{cases}
\]
\[w_k = \frac{1}{10000^{2k/d_{model}}}
\]

基于三角函数的绝对位置编码是常数,并不随模型更新。在Transformer中,位置编码会直接加在词向量上,输入的词向量Embedding是E,在self-attention中Q,K进行线性变换后计算attention,对value进行加权得到输出如下

\[\begin{align}
q_i &= (E_i+P_i) \dot W_q^T \\
k_j &= (E_j+P_j) \dot W_k^T \\
v_j &= (E_j+P_j) \dot W_v^T \\
a_{i,j} &= softmax(q_ik_j/\sqrt{d_k}) \\
output &= \sum_{j}v_j * a_{i,j}\\
\end{align}
\]

我们来对\(q_ik_j\)部分进行展开可以得到

\[\begin{align}
q_ik_ j&=E_iW_qW_K^TE_j^T(语义交互)+ P_iW_qW_K^TP_j^T (位置交互)\\
& + P_iW_qW_K^TE_j^T(query语义*key位置) + E_iW_qW_K^TP_j^T(key语义*query位置) \\
\end{align}
\]

其中位置交互是唯一可能包含相对位置信息的部分,如果不考虑线性变换\(w_k\),\(w_q\)只看三角函数位置编码,会发现位置编码内积是相对距离的函数,如下

\[\begin{align}
P_iP_j^T & = P_iP_{i+\Delta}^T \\
& = \sum_{k=0}^{d_k/2-1}sin(w_k \cdot i)sin(w_k \cdot (i+\Delta)) + cos(w_k \cdot i )cos(w_k \cdot (i+\Delta))\\
& = \sum_{k=0}^{d_k/2-1}cos(w_k \cdot(i-(i+\Delta))) =\sum_{k=0}^{d_k/2-1} cos(w_k \cdot \Delta)
\end{align}
\]

不同维度\(d_k\),\(P_iP_j^T\)和\(\Delta\)的关系如下,会发现位置编码内积是对称并不包含方向信息,而BiLSTM是可以通过双向LSTM引入方向信息的。对于需要全局信息的任务例如翻译,sentiment analysis,方向信息可能并不十分重要,但对于局部优化的NER任务,因为需要判断每个token的类型,方向信息的缺失影响更大。

看完三角函数部分,我们把线性变换加上,下图是加入随机线性变换后\(P_iw_iw_j^TP_j^T\)和\(\Delta\)的关系,会发现位置编码的相对距离感知消失了,有人会问那这位置编码有啥用,这是加了个寂寞???

个人感觉上图的效果是加入随机变换得到,而\(W_i,W_j\)本身是trainable的,所以如果相对距离信息有用,\(W_iW_j^T\)未必学不到,这里直接用随机\(W_i\)感觉并不完全合理。But Anyway这两点确实部分解释了原生transformer在NER任务上效果打不过BiLSTM的原因。下面我们来看下基于绝对位置编码的缺陷,都有哪些改良

相对位置编码

既然相对位置信息是在self-attention中丢失的,最直观的方案就是显式的在self-attention中把相对位置信息加回来。相对位置编码有很多种构建方案,这里我们只回顾TENER之前相对经典的两种(这里参考了苏神的让研究人员绞尽脑汁的Transformer位置编码再一次膜拜大神~)。为了方便对比,我们把经典的绝对位置编码计算的self-attenion展开再写一遍

\[\begin{align}
q_ik_ j&=E_iW_qW_K^TE_j^T + P_iW_qW_K^TP_j^T + P_iW_qW_K^TE_j^T + E_iW_qW_K^TP_j^T \\
a_{i,j} &= softmax(q_ik_j/\sqrt{d_k}) \\
output &= \sum_{j}v_j * a_{i,j}\\
\end{align}
\]

RPR

(shaw et al,2018) 提出的RPR可以说是相对位置编码的起源,计算也最简单,只保留了以上Attention的语义交互部分,把key的绝对位置编码,替换成key&Query的相对位置编码,同时在对value加权时也同时引入相对位置,得到如下

\[\begin{align}
q_ik_ j&=E_iW_qW_K^TE_j^T(语义交互)+ E_iW_qR_{ij}^T(相对位置att语义) \\
output &= \sum_{j}v_j * (a_{i,j} + R_{ij})\\
\end{align}
\]

这里\(R_{ij}\)是query第i个字符和key/value第j个字符之间的相对距离j-i的位置编码,query第2个字符和key第4个字符交互对应\(R_{-2}\)的位置编码。这样的编码方式直接考虑了距离和方向信息。

这里的位置编码PE是trainable的变量,为了控制模型参数的大小,同时保证位置编码可以generalize到任意文本长度,对相对位置做了截断,毕竟当前字符确实不太可能和距离太远的字符之前存在上下文交互,所以滑动窗口的设计也很合理。如果截断长度为k,位置编码PE的dim=2k+1,下图是k=3的\(R_{ij}\)

\[R_{ij} = PE[min(max(i-j,-k),k)]
\]

Transformer-XL/XLNET

(Dai et al,2019)在Transformer-XL中给出了一种新的相对位置编码,几乎是和经典的绝对位置编码一一对应。

  • 把key的绝对位置编码\(p_j\)替换成相对位置编码\(R_{ij}\)
  • 把query的绝对位置编码\(W_ip_i\),替换成learnable的两个变量u和v,分别学习key的语义bias和相对位置bias,就得到了如下的attention计算,
\[\begin{align}
q_ik_ j&=E_iW_qW_K^TE_j^T(语义交互)+ E_iW_qR_{ij}^TW_R^T(相对位置att语义)\\
&+ uE_jW_k(全局语义bias) + vR_{ij}W_R(全局位置bias)
\end{align}
\]

以上计算方案也被XLNET沿用,和RPR相比,Transfromer-XL

  • 只在attention计算中加入相对位置编码,在对value加权时并没有使用,之后相对位置的改良基本都只针对attention部分
  • PE沿用了三角函数而非trainable变量,所以不需要截断k=max_seq_len。不过加了线性变换\(W_R\)来保留灵活性,且和绝对位置编码不同的是,位置编码和语义用不同的W来做线性变换
  • 加入了全局语义bias和全局位置bias,和绝对位置编码相比每个term都有了明确的含义

TENER:相对位置编码的NER模型

TENER是transformer在NER任务上的模型尝试,文章没有太多的亮点,更像是一篇用更合适的方法来解决问题的工程paper。沿用了Transformer-XL的相对位置编码, 做了两点调整,一个是key本身不做project,另一个就是在attention加权时没用对attenion进行scale, 也就是以下的归一化不再用\(\sqrt{d_k}\)对query和key的权重进行调整,得到的attenion会更加sharp。这个调整可以让权重更多focus在每个词的周边范围,更适用于局部建模的NER任务。

\[a_{i,j} = softmax(q_ik_j/\sqrt{d_k})
\]

我们来直观对比下,同样的数据集和模型参数。绝对位置编码和unscale的相对位置编码attention的差异,这里都用了两层的transformer,上图是绝对位置编码,下图是unscale的相对位置编码。可以明显看到unscale的相对位置编码的权重,在第一层已经学习到部分周围信息后,第二层的attention范围进一步缩小集中在词周围(一定程度上说明可能1层transfromer就够用了),而绝对位置编码则相对分散在整个文本域。

下面来对比下效果,transformer任务默认都是用的bichar输入,所以我们也和bilstm_bichar进行对比,在原paper中作者除了对句子部分使用transformer来提取信息,还在token粒度做了一层transformer,不过这里为了更公平的和bilstm对比,我们只保留了句子层面的transformer。以下是分别在MSRA和PeopleDaily两个任务上的效果对比。

只是把绝对位置编码替换成相对位置编码,在两个任务上都有4~5%的效果提升,最终效果也基本和bilstm一致。这里没做啥hyper search,参数给的比较小,整体上transformer任务扩大embedding,ffnsize效果会再有提升~


REF

  1. TENER: Adapting Transformer Encoder for Named Entity Recognition, 2019, Hang Yan
  2. Self-attention with relative position represen- tations
  3. Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context
  4. XLNet: Generalized Autoregressive Pretraining for Language Understanding
  5. 苏剑林. (Feb. 03, 2021). 《让研究人员绞尽脑汁的Transformer位置编码 》[Blog post]. Retrieved from https://kexue.fm/archives/8130
  6. 工业界求解NER问题的12条黄金法则

中文NER的那些事儿5. Transformer相对位置编码&TENER代码实现的更多相关文章

  1. 中文NER的那些事儿1. Bert-Bilstm-CRF基线模型详解&代码实现

    这个系列我们来聊聊序列标注中的中文实体识别问题,第一章让我们从当前比较通用的基准模型Bert+Bilstm+CRF说起,看看这个模型已经解决了哪些问题还有哪些问题待解决.以下模型实现和评估脚本,详见 ...

  2. 中文NER的那些事儿3. SoftLexicon等词汇增强详解&代码实现

    前两章我们分别介绍了NER的基线模型Bert-Bilstm-crf, 以及多任务和对抗学习在解决词边界和跨领域迁移的解决方案.这一章我们就词汇增强这个中文NER的核心问题之一来看看都有哪些解决方案.以 ...

  3. 中文NER的那些事儿4. 数据增强在NER的尝试

    这一章我们不聊模型来聊聊数据,解决实际问题时90%的时间其实都是在和数据作斗争,于是无标注,弱标注,少标注,半标注对应的各类解决方案可谓是百花齐放.在第二章我们也尝试通过多目标对抗学习的方式引入额外的 ...

  4. 中文NER的那些事儿2. 多任务,对抗迁移学习详解&代码实现

    第一章我们简单了解了NER任务和基线模型Bert-Bilstm-CRF基线模型详解&代码实现,这一章按解决问题的方法来划分,我们聊聊多任务学习,和对抗迁移学习是如何优化实体识别中边界模糊,垂直 ...

  5. # 中文NER的那些事儿6. NER新范式!你问我答之MRC

    就像Transformer带火了"XX is all you need"的论文起名大法,最近也看到了好多"Unified XX Framework for XX" ...

  6. [NLP] 相对位置编码(一) Relative Position Representatitons (RPR) - Transformer

    对于Transformer模型的positional encoding,最初在Attention is all you need的文章中提出的是进行绝对位置编码,之后Shaw在2018年的文章中提出了 ...

  7. 采用Google预训bert实现中文NER任务

    本博文介绍用Google pre-training的bert(Bidirectional Encoder Representational from Transformers)做中文NER(Name ...

  8. python在WIN下CMD运行中文乱码及python 2.x python 3.x编码问题

    在CMD中运行python代码时,我们会发现,即使在代码中加入# -*- coding:utf-8 -*- 这段代码,中文仍然会乱码.如下: # -*- coding:utf-8 -*- conten ...

  9. ICCV2021 | Vision Transformer中相对位置编码的反思与改进

    ​前言  在计算机视觉中,相对位置编码的有效性还没有得到很好的研究,甚至仍然存在争议,本文分析了相对位置编码中的几个关键因素,提出了一种新的针对2D图像的相对位置编码方法,称为图像RPE(IRPE). ...

随机推荐

  1. NOIP模拟66

    T1 接力比赛 解题思路 其实就是一个背包 DP ,也没啥好说的也就是一个优化,每次枚举之前的前缀和. 比较妙的就是一个 random_shuffle 可以整掉部分卡人的数据(但是好像 sort 一下 ...

  2. 低代码BPM平台

    为了做出明智的决策并为客户提供服务,员工需要在正确的环境中使用正确的工具和访问关键信息的权限.但是,当业务关键信息分散在多个现成的和自定义编码的应用程序中时,员工效率会降低,客户体验也会受到影响. 低 ...

  3. MacOS下Java与JDK关系与相关路径

    MacOS下Java与JDK关系与相关路径 macOS下的Java与JDK的路径曾经困扰过我一段时间,今天稍有些忘记,故记下笔记,整理一下.Java与JDK的关系不在本文笔记之内,Javaer常识. ...

  4. CF125E MST company (凸优化+MST)

    qwq自闭的一个题 我来修锅辣!!!!!! 这篇题解!可以\(hack\)全网大部分的做法!!! 首先,我们可以把原图中的边,分成两类,一类是与\(1\)相连,另一类是不与\(1\)相连. 原题就转化 ...

  5. L1-023 输出GPLT (20 分) java题解 GPLT天梯赛防坑技巧

    上题目先 给定一个长度不超过10000的.仅由英文字母构成的字符串.请将字符重新调整顺序,按GPLTGPLT....这样的顺序输出,并忽略其它字符.当然,四种字符(不区分大小写)的个数不一定是一样多的 ...

  6. 初学Python-day10 函数2

    函数 1.函数也是一种数据 函数也是一种数据,可以使用变量保存 回调函数(参数的值还是一个函数) 实例: def test(): print('hello world') def test1(a): ...

  7. Python学习系列之一: python相关环境的搭建

    前言 学习python和使用已经一年多了,这段时间抽空整理了一下以前的笔记,方便日后查阅. Python介绍 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Pytho ...

  8. Linux信号处理编程

    01. 学习目标 了解信号中的基本概念 熟练使用信号相关的函数 了解内核中的阻塞信号集和未决信号集作用 熟悉信号集操作相关函数 熟练使用信号捕捉函数signal 熟练使用信号捕捉函数sigaction ...

  9. [软工顶级理解组] Alpha阶段事后分析

    目录 设想和目标 计划 资源 变更管理 设计/实现 测试/发布 团队的角色,管理,合作 总结 质量提高 会议截图 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰 ...

  10. 热身训练1 Game

    http://acm.hdu.edu.cn/showproblem.php?pid=5242 简要题意: 一棵树有n个节点,每个节点x有一个权值wi,我们要从根节点出发(不可回头),去收集每个节点的权 ...