实体识别模型TENER泛读笔记
TENER是邱锡鹏老师团队的工作,其核心在于Attention设计时考虑了对于实体识别问题而言可能重要的三个因素:方向、距离(相对位置)以及词间更sharp的注意力。实际上看过原文之后,TENER和Transformer基本上差不多,简单地说TENER就是针对NER场景进行Transformer的适配改进,用邱锡鹏老师的原话“站在巨人的肩上”。这篇笔记主要就是针对这几处小改动进行一个相对细致的分析和记录。
一、问题和核心思想
1. 方向和位置
Louis Vuitton founded Louis Vuitton Inc. in 1854
这里直接使用论文给出的一个例子。通常,在in
之后的词更可能是位置或者时间,比如这里的1854
就是一个时间实体;而在Inc
之前的词更可能代表组织,比如这里的Louis Vuitton Inc
,所以词之间的相对方向是较重要的。
另外,词之间的相对距离也很重要,因为通常实体都是由连续的字或词构成的,比如这里句中的Louis Vuitton
就比句首的Louis Vuitton
更可能和Inc
构成一个实体。
但我个人感觉这段motivition没有太清晰或者说太有力的说服力,因为最终这几个点都是考虑在attention计算的时候,但attention本质上就是计算词之间的相似度,然后基于这个相似度对词加权求和,重新表征词(简单地说就是词向量的转化或者说映射)。也就是说应该解释的是为什么计算attention时要考虑这几点?这样之后的attention有什么特别之处?对于之后的词表征有什么影响,以至于模型可以正确判断实体类型以及实体边界?
非要套上去理解,我只能这么想:(忽略词向量)因为
1854
、Louis Vuitton Inc
和in
的相对方向和相对距离的不同,所以in
和它们的相似度不同。所以在最终对Louis Vuitton Inc
和1854
进行表征时,由in
贡献的那部分值不同,使得Louis Vuitton Inc
和1854
具有不同的特性,而这个特性使得它们可以分别被识别为组织机构和时间。
2. 更sharp的注意力
对于每个词而言,可能我们仅需要知道较小部分的上下文就可以判别它的实体类别,而不需要关注所有词。但是经过transformer后的attention较为平滑,这样平滑的权重可能会带来一些噪声,影响我们的判定。极端点,也许我们就需要内积经过softmax后就是非0即1,不要那么“soft”,为了达到这个效果,scale参数可以丢掉。
二、模型细节
1. Transformer概述
这里主要快速回顾下Transformer,方便后续TENER的细节分析。这里的Attention是self-attention,也就是在序列内部做Attention以寻找序列内部词间关系。
1.1 Self-Attention
这里设 H ∈ R l ∗ d H \in R^{l*d} H∈Rl∗d是token向量序列(token指字或词),其中 l l l代表序列长度, d d d代表token向量维度。另外,参数矩阵 W q W_{q} Wq、 W k W_{k} Wk、 W v W_{v} Wv的维度均为 R d ∗ d k R^{d*d_k} Rd∗dk,则是用于将输入序列映射到不同的空间, d k d_k dk则是scale参数。有了这些定义后,我们再来看scale的内积attention:
Q
,
K
,
V
=
H
W
q
,
H
W
k
,
H
W
v
(1)
Q,K,V = HW_q,HW_k,HW_v \tag{1}
Q,K,V=HWq,HWk,HWv(1)
A
t
,
j
=
Q
t
K
j
T
(2)
A_{t,j} = Q_tK^T_{j} \tag{2}
At,j=QtKjT(2)
A
t
t
n
(
Q
,
K
,
V
)
=
s
o
f
t
m
a
x
(
A
d
k
)
V
(3)
Attn(Q,K,V)=softmax(\frac{A}{\sqrt{d_k}})V \tag{3}
Attn(Q,K,V)=softmax(dkA)V(3)
式
(
2
)
(2)
(2)中
Q
t
∈
R
1
∗
d
Q_{t} \in R^{1*d}
Qt∈R1∗d为序列中的第
t
t
t个token的表征,而
K
j
∈
R
1
∗
d
K_j\in R^{1*d}
Kj∈R1∗d则为第
j
j
j个token的表征,当然这里的表征是指经
W
q
W_q
Wq、
W
k
W_k
Wk映射过后的。那么
A
t
,
j
A_{t,j}
At,j表示的是第
t
t
t、
j
j
j个token之间相似度。最终这个相似度矩阵
A
A
A由scale参数
d
k
\sqrt{d_k}
dk的调节后,再经过softmax进行归一化就得到了最终的相似度矩阵。最后再乘上
V
V
V就完成了重新表征过程。
1.2 Position Embedding
Transformer本身不能捕捉序列信息,比如我们交换token的顺序,但是对每个token而言,出来的attention结果还是一样的,那么最终每个token的新表征也还是一样的,只是它们的位置变了而已。
可是另一方面我们知道当词的顺序变了以后,很有可能语义已经变了。另外在不同位置的词它本身也可能扮演不同的角色。比如开头我们提到的句首和句中的Louis Vuitton
。
所以为了引入位置信息,Transformer设计了位置表征(Position Embedding):
P
E
t
,
2
i
=
s
i
n
(
t
/
1000
0
2
i
d
)
(4)
PE_{t,2i} = sin(t/10000^{\frac{2i}{d}}) \tag{4}
PEt,2i=sin(t/10000d2i)(4)
P
E
t
,
2
i
+
1
=
c
o
s
(
t
/
1000
0
2
i
d
)
(5)
PE_{t,2i+1} = cos(t/10000^{\frac{2i}{d}}) \tag{5}
PEt,2i+1=cos(t/10000d2i)(5)
这里
i
∈
[
0
,
d
2
−
1
]
i \in[0,\frac{d}{2}-1]
i∈[0,2d−1],而
d
d
d依旧代表token的向量维度。
2. 方向和距离感知的Attention
由于论文TENER主要的改动就在Attention 上。那么这部分我们就来看看原始的Attention有什么问题,尤其是位置嵌入有什么问题;然后再来看TENER是怎么去避免那些问题的。
2.1 距离有感但方向无感的位置嵌入
根据式
(
4
)
(4)
(4)和式
(
5
)
(5)
(5),第
t
t
t个token的位置嵌入
P
E
t
∈
R
d
PE_t \in R^{d}
PEt∈Rd:
P
E
t
=
[
s
i
n
(
c
0
t
)
c
o
s
(
c
0
t
)
.
.
.
s
i
n
(
c
d
2
−
1
t
)
c
o
s
(
c
d
2
−
1
t
)
]
(6)
PE_t = \quad \begin{bmatrix} sin(c_0t) \\ cos(c_0t) \\...\\sin(c_{\frac{d}{2}-1}t)\\ cos(c_{\frac{d}{2}-1}t)\end{bmatrix} \quad \tag{6}
PEt=⎣⎢⎢⎢⎢⎡sin(c0t)cos(c0t)...sin(c2d−1t)cos(c2d−1t)⎦⎥⎥⎥⎥⎤(6)
这里
c
j
=
1
1000
0
2
j
d
c_j=\frac{1}{10000^\frac{2j}{d}}
cj=10000d2j1。那么第
t
t
t和第
t
+
k
t+k
t+k个token之间的内积即为:
P
E
t
T
P
E
t
+
k
=
∑
j
=
0
d
2
−
1
[
s
i
n
(
c
j
t
)
s
i
n
(
c
j
(
t
+
k
)
)
+
c
o
s
(
c
j
t
)
c
o
s
(
c
j
(
t
+
k
)
)
]
(7)
\begin{aligned} PE_t^{T}PE_{t+k} & = \sum_{j=0}^{\frac{d}{2}-1}[sin(c_jt)sin(c_j(t+k))\\ & +cos(c_jt)cos(c_j(t+k))]\end{aligned} \tag{7}
PEtTPEt+k=j=0∑2d−1[sin(cjt)sin(cj(t+k))+cos(cjt)cos(cj(t+k))](7)
再根据二角和差公式,最终两个token之间基于位置嵌入的内积仅取决于相对偏移量
k
k
k:
P
E
t
T
P
E
t
+
k
=
∑
j
=
0
d
2
−
1
c
o
s
(
c
j
k
)
(8)
PE_t^{T}PE_{t+k}= \sum_{j=0}^{\frac{d}{2}-1}cos(c_jk) \tag{8}
PEtTPEt+k=j=0∑2d−1cos(cjk)(8)
也就是说transformer提出的位置嵌入成功得考虑了相对位置这个点。但是,相对方向它却无法把控,因为
c
o
s
(
x
)
=
c
o
s
(
−
x
)
cos(x)=cos(-x)
cos(x)=cos(−x),所以这个内积具有对称性:
P
E
t
T
P
E
t
−
k
=
∑
j
=
0
d
2
−
1
c
o
s
(
−
c
j
k
)
=
∑
j
=
0
d
2
−
1
c
o
s
(
c
j
k
)
=
P
E
t
T
P
E
t
+
k
(9)
\begin{aligned} PE_t^{T}PE_{t-k} & = \sum_{j=0}^{\frac{d}{2}-1}cos(-c_jk) \\ & = \sum_{j=0}^{\frac{d}{2}-1}cos(c_jk) \\ & =PE_t^{T}PE_{t+k} \end{aligned}\tag{9}
PEtTPEt−k=j=0∑2d−1cos(−cjk)=j=0∑2d−1cos(cjk)=PEtTPEt+k(9)
这点看图更直观:
2.2 距离有感到无感
由式
(
1
)
(1)
(1)和
(
2
)
(2)
(2),两个token的位置嵌入并不是直接内积,而需要先经过一次变换(这里忽略token嵌入部分的计算,仅看两个token位置嵌入部分参与的计算,注意行列向量的区别),所以内积其实是:
(
P
E
t
T
W
q
)
(
P
E
t
+
k
T
W
k
)
T
=
P
E
t
T
W
q
W
k
T
P
E
t
+
k
=
P
E
t
T
W
P
E
t
+
k
(10)
\begin{aligned} (PE_{t}^TW_q)(PE_{t+k}^TW_k)^{T} & = PE_t^{T}W_qW_k^{T}PE_{t+k} \\ & = PE_{t}^{T}WPE_{t+k}\\ \end{aligned} \tag{10}
(PEtTWq)(PEt+kTWk)T=PEtTWqWkTPEt+k=PEtTWPEt+k(10)
这里
W
=
W
q
W
k
T
。
我
们
看
到
W=W_qW^{T}_k。我们看到
W=WqWkT。我们看到式
(
10
)
(10)
(10)和
(
9
)
(9)
(9)的区别仅在于中间多了一个参数矩阵
W
W
W。下图2展示了两者的区别:
很明显,当 P E t PE_t PEt经过query和key的参数矩阵 W W W映射以后,再去与 P E t + k PE_{t+k} PEt+k内积时,就变得距离无感了。
2.3 TENER中的Attention改动
- 位置嵌入部分的改动
transformer里的内积计算其实是两部分:(1)token向量部分;(2)位置嵌入部分。token向量部分的计算没什么问题,所以保持;而位置嵌入部分的计算可以稍作修改。由式
(
8
)
(8)
(8)和
(
9
)
(9)
(9)可知:
P
E
t
T
P
E
j
=
∑
i
=
0
d
2
−
1
c
o
s
(
c
i
(
t
−
j
)
)
=
v
[
c
o
s
(
c
0
(
t
−
j
)
)
c
o
s
(
c
1
(
t
−
j
)
)
.
.
.
c
o
s
(
c
d
2
−
1
(
t
−
j
)
)
]
(11)
\begin{aligned}PE_t^{T}PE_{j}= &\sum_{i=0}^{\frac{d}{2}-1}cos(c_i(t-j))\\ & = v\quad \begin{bmatrix} cos(c_0(t-j)) \\ cos(c_1(t-j)) \\...\\ cos(c_{\frac{d}{2}-1}(t-j))\end{bmatrix} \quad \end{aligned} \tag{11}
PEtTPEj=i=0∑2d−1cos(ci(t−j))=v⎣⎢⎢⎡cos(c0(t−j))cos(c1(t−j))...cos(c2d−1(t−j))⎦⎥⎥⎤(11)
这里
v
=
1
,
v
∈
R
d
2
v=1, v\in R^{\frac{d}{2}}
v=1,v∈R2d。我们知道方向无感主要是因为
c
o
s
(
x
)
=
c
o
s
(
−
x
)
cos(x)=cos(-x)
cos(x)=cos(−x),我们又知道
s
i
n
(
−
x
)
=
−
s
i
n
(
x
)
sin(-x)=-sin(x)
sin(−x)=−sin(x),所以最简单粗暴的方式就是把cos换成sin,当然论文这里只是换了一半,或者说论文这里是插入了sin项:
P
E
t
T
P
E
j
=
∑
i
=
0
d
2
−
1
[
c
o
s
(
c
i
(
t
−
j
)
)
+
s
i
n
(
c
i
(
t
−
j
)
)
]
=
v
[
s
i
n
(
c
0
(
t
−
j
)
)
c
o
s
(
c
0
(
t
−
j
)
)
.
.
.
s
i
n
(
c
d
2
−
1
(
t
−
j
)
)
c
o
s
(
c
d
2
−
1
(
t
−
j
)
)
]
(12)
\begin{aligned}PE_t^{T}PE_{j}= &\sum_{i=0}^{\frac{d}{2}-1}[cos(c_i(t-j))+sin(c_i(t-j))]\\ & = v\quad \begin{bmatrix} \\ sin(c_0(t-j)) \\ cos(c_0(t-j)) \\...\\ sin(c_{\frac{d}{2}-1}(t-j)) \\ cos(c_{\frac{d}{2}-1}(t-j))\end{bmatrix} \quad \end{aligned} \tag{12}
PEtTPEj=i=0∑2d−1[cos(ci(t−j))+sin(ci(t−j))]=v⎣⎢⎢⎢⎢⎢⎢⎡sin(c0(t−j))cos(c0(t−j))...sin(c2d−1(t−j))cos(c2d−1(t−j))⎦⎥⎥⎥⎥⎥⎥⎤(12)
再代入
c
j
=
1
1000
0
2
j
d
c_j=\frac{1}{10000^\frac{2j}{d}}
cj=10000d2j1,考虑经过
W
q
W_q
Wq转换后的token维度为
d
k
d_k
dk,最终来自位置嵌入部分的内积贡献为:
P
E
t
T
P
E
j
=
v
R
t
−
j
(13)
\begin{aligned}PE_t^{T}PE_{j} = v R_{t-j} \end{aligned} \tag{13}
PEtTPEj=vRt−j(13)
其中:
R
t
−
j
=
[
s
i
n
(
c
0
(
t
−
j
)
)
c
o
s
(
c
0
(
t
−
j
)
)
.
.
.
s
i
n
(
c
d
k
2
−
1
(
t
−
j
)
)
c
o
s
(
c
d
k
2
−
1
(
t
−
j
)
)
]
=
[
.
.
.
s
i
n
(
t
−
j
1000
0
2
i
d
k
)
c
o
s
(
t
−
j
1000
0
2
i
d
k
)
.
.
]
(14)
\begin{aligned}R_{t-j} &= \quad \begin{bmatrix} \\ sin(c_0(t-j)) \\ cos(c_0(t-j)) \\...\\ sin(c_{\frac{d_k}{2}-1}(t-j)) \\ cos(c_{\frac{d_k}{2}-1}(t-j))\end{bmatrix} \quad \\ & = \quad \begin{bmatrix} ... \\ sin(\frac{t-j}{10000^{\frac{2i}{dk}}}) \\ cos(\frac{t-j}{10000^{\frac{2i}{dk}}}) \\ ..\\ \end{bmatrix} \quad \end{aligned}\tag{14}
Rt−j=⎣⎢⎢⎢⎢⎢⎢⎢⎡sin(c0(t−j))cos(c0(t−j))...sin(c2dk−1(t−j))cos(c2dk−1(t−j))⎦⎥⎥⎥⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎡...sin(10000dk2it−j)cos(10000dk2it−j)..⎦⎥⎥⎥⎤(14)
式
(
14
)
(14)
(14)即为TENER中attention计算的一部分,当然这里的
v
∈
R
d
k
v\in R^{d_k}
v∈Rdk则是一个参数。式
(
14
)
(14)
(14)跟式
(
6
)
(6)
(6)不能说是毫无关系,可以说是一摸一样了。夸张一下,二者还是有一定的差别,主要就是在刻画的对象。式
(
6
)
(6)
(6)是针对某一位置(如
t
t
t)的token的位置嵌入,而式
(
14
)
(14)
(14)则可以看作是考虑了两个位置(如
t
t
t和
j
j
j)的token的相对距离
t
−
j
=
k
t-j=k
t−j=k,所以原文把它称之为相对位置的嵌入(relative positional encoding)。并且式
(
14
)
(14)
(14)也同时考虑了相对方向:
R k = [ s i n ( c 0 k ) ) c o s ( c 0 k ) . . . s i n ( c d k 2 − 1 k ) c o s ( c d k 2 − 1 k ) ] R − k = [ − s i n ( c 0 k ) ) c o s ( c 0 k ) . . . − s i n ( c d k 2 − 1 k ) c o s ( c d k 2 − 1 k ) ] (15) \begin{aligned} R_k = \quad \begin{bmatrix} \\ sin(c_0k)) \\ cos(c_0k) \\...\\ sin(c_{\frac{d_k}{2}-1}k) \\ cos(c_{\frac{d_k}{2}-1}k)\end{bmatrix} \quad \\ R_{-k}= \quad \begin{bmatrix} \\ -sin(c_0k)) \\ cos(c_0k) \\...\\ -sin(c_{\frac{d_k}{2}-1}k) \\ cos(c_{\frac{d_k}{2}-1}k)\end{bmatrix} \quad \end{aligned} \tag{15} Rk=⎣⎢⎢⎢⎢⎢⎢⎢⎡sin(c0k))cos(c0k)...sin(c2dk−1k)cos(c2dk−1k)⎦⎥⎥⎥⎥⎥⎥⎥⎤R−k=⎣⎢⎢⎢⎢⎢⎢⎢⎡−sin(c0k))cos(c0k)...−sin(c2dk−1k)cos(c2dk−1k)⎦⎥⎥⎥⎥⎥⎥⎥⎤(15)
- Attention计算整体改动
我们下面来看整体上TENER的Attention的改动(这部分直接贴原文的公式截图,但是注意这里有行列向量问题):
重点在式 ( 18 ) (18) (18)上,等号右边的第一项和第四项分别是token向量之间的内积以及我们刚刚分析完的位置部分的贡献。那么中间两项 Q t R t − j Q_{t}R_{t-j} QtRt−j、 u T K j T u^TK_j^T uTKjT又代表什么呢?原文说的是the tth token’s bias on certain relative distance and the bias on the jth token,我在这里理解为偏置(就是 A x Ax Ax+b的那个 b b b)。但是不明白这第二项为什么不跟第三项一样,即为什么不是 w T Q t T w^TQ_t^T wTQtT。
三、总结和疑问
待更新