论文地址:2208.00399.pdf (arxiv.org)
相关博客
【自然语言处理】【可解释性】NKB:用于预训练Transformers的神经知识银行
【自然语言处理】【可解释性】自注意力归因:解释Transformer内部的信息交互
【深度学习】【积分梯度】深度网络的公理归因(Axiomatic Attribution for Deep Networks)
【自然语言处理】【可解释性】Perturbed Masking:分析和解释BERT的无参数探针
【机器学习】【可解释性】LIME
【自然语言处理】【聚类】TELL:可解释神经聚类
【自然语言处理】【Prompt】语言模型即知识库(Language Models as Knowledge Bases)
【自然语言处理】【Prompt】P-tuning
一、简介
近些年,大规模的预训练
Transformers
\text{Transformers}
Transformers极大的改善了自然语言处理。它们通常会在一个大规模语料上训练,其中包含海量的事实知识。当面对一些像closed-book
问题这样的知识敏感下游任务,记住事实知识的能力将至关重要。Petroni et al(2019)
展示了预训练
Transformers
\text{Transformers}
Transformers能够以zero-shot
的方式召回出现在训练数据中的事实知识。Roberts,Raffel and Shazeer(2020)
也证明了在微调后,
T5
\text{T5}
T5能够在不访问外部知识上下文的情况下回答开放域的问题。即便如此,预训练模型存储事实知识的能力仍然有限。考虑到这一现状,作者设计了一种可解释方法方法来为预训练
Transformers
\text{Transformers}
Transformers引入外部的事实知识。
Geva et al.(2020)
指出
Transformers
\text{Transformers}
Transformers中的
Feed-Forward Networks
\text{Feed-Forward Networks}
Feed-Forward Networks类似于
key-value memories
\text{key-value memories}
key-value memories。如上图所示,在
FFN
\text{FFN}
FFN总,把第一个线性层看成是一系列key并且第二个线性层看作是对应的value。
FFN
\text{FFN}
FFN的输入hidden state
被送入第一个线性层,并激活一组神经元。然后,将这些激活神经元作为权重,第二个线性层通过加权求和来集成对应的值向量。在这个角度的基础上,Dai et al.(2022)
进一步发现预训练
Transformers
\text{Transformers}
Transformers中的
FFNs
\text{FFNs}
FFNs以类似内存的方式存储事实知识。
受这些发现的启发,作者设计了神经知识银行 (Neural Knowledge Bank,NKB) \text{(Neural Knowledge Bank,NKB)} (Neural Knowledge Bank,NKB)和一个知识映射策略来向预训练 Transformers \text{Transformers} Transformers注入额外的事实知识。 NKB \text{NKB} NKB是一个类似 FFN \text{FFN} FFN的模块,用于原始的 FFN \text{FFN} FFN后拼接额外的知识存储槽。为了注入事实知识,先从 Wikipedia \text{Wikipedia} Wikipedia中获得知识语料,然后使用 Salient Span Masking(SSM) \text{Salient Span Masking(SSM)} Salient Span Masking(SSM)预训练目标函数来预训练 NKB \text{NKB} NKB。在知识注入过程中,固定原始的预训练模型来避免影响其通用语言建模的能力。对于下游任务,可以直接微调整个模型。 NKB \text{NKB} NKB的优点反应在三个方面:(1) NKB \text{NKB} NKB的知识注入过程是独立于原始的预训练模型,所以引入额外的知识并不会降低模型的通用语言建模能力。(2) NKB \text{NKB} NKB类似内存的架构具有高的解释性,并且能够以人类可读的方法介绍其keys和values的含义。(3) NKB \text{NKB} NKB的 key-value \text{key-value} key-value架构高度灵活,并且能够通过修改value值来更新 NKB \text{NKB} NKB的知识。
在三个不同领域closed-book
问题数据集中,作者发现挂载
NKB
\text{NKB}
NKB能够提升
T5
\text{T5}
T5的表现,特别是在生物医学领域,
T5
\text{T5}
T5的预训练语料覆盖的比较少。通过摘要和机器翻译两个表示任务,证明了挂载
NKB
\text{NKB}
NKB并不会使原始
T5
\text{T5}
T5模型降低通用语言建模能力。此外,通过分析
NKB
\text{NKB}
NKB揭露了其工作机制,并以人类可读的方式来展现key和value的含义。最后,通过修改值向量来更新存储的事实知识来展示
NKB
\text{NKB}
NKB的灵活性。
本文的贡献如下:
- 提出了 NKB \text{NKB} NKB的想法,包括架构和知识注入策略,来向预训练 Transformer \text{Transformer} Transformer注入额外的事实知识。
- 验证
NKB
\text{NKB}
NKB能够提高
T5
\text{T5}
T5在
closed-book
问答上的效果,并且保存 T5 \text{T5} T5的通用语言建模能力。 - 分析了 NKB \text{NKB} NKB的可解释性,并且以人类可读的方式揭示了key和value的含义。
- 通过直接修改value向量来更新存储的知识来展示 NKB \text{NKB} NKB的灵活性。
二、 Transformer \text{Transformer} Transformer
近期,
Transformer
\text{Transformer}
Transformer已经成为
NLP
\text{NLP}
NLP中最流行和有效的架构。以标准的
Transformer
\text{Transformer}
Transformer编码器为例,其堆叠了
L
L
L个相同的
Transformer
\text{Transformer}
Transformer层。在每个
Transformer
\text{Transformer}
Transformer层都有两个主要的模块:自注意力模块
(self-attention,SelfAtt)
\text{(self-attention,SelfAtt)}
(self-attention,SelfAtt)和前馈网络
(feed-forward network,FFN)
\text{(feed-forward network,FFN)}
(feed-forward network,FFN)。对于一个长度为
l
e
n
len
len的输入序列,令
X
∈
R
l
e
n
×
d
X\in\mathbb{R}^{len\times d}
X∈Rlen×d表示一个
Transformer
\text{Transformer}
Transformer层的input hidden states
,两个模块的形式化为:
Q
h
=
X
W
h
Q
,
K
h
=
X
W
h
K
,
V
h
=
X
W
h
V
(1)
Q_h=XW_h^Q,K_h=XW_h^K,V_h=XW_h^V\tag{1}
Qh=XWhQ,Kh=XWhK,Vh=XWhV(1)
SelfAtt h ( X ) = Softmax ( Q h K h T ) V h (2) \text{SelfAtt}_h(X)=\text{Softmax}(Q_hK_h^T)V_h \tag{2} SelfAtth(X)=Softmax(QhKhT)Vh(2)
FFN ( H ) = ActFunc ( H W 1 T ) W 2 (3) \text{FFN}(H)=\text{ActFunc}(HW_1^T)W_2\tag{3} FFN(H)=ActFunc(HW1T)W2(3)
其中,
W
h
Q
,
W
h
K
,
W
h
V
∈
R
d
×
d
n
,
W
1
,
W
2
∈
R
4
d
×
d
W_h^Q,W_h^K,W_h^V\in\mathbb{R}^{d\times\frac{d}{n}},W_1,W_2\in\mathbb{R}^{4d\times d}
WhQ,WhK,WhV∈Rd×nd,W1,W2∈R4d×d是参数矩阵,
SelfAtt
h
(
X
)
\text{SelfAtt}_h(X)
SelfAtth(X)是计算
n
n
n个注意力头中第
h
h
h的注意力,
H
∈
R
l
e
n
×
d
H\in\mathbb{R}^{len\times d}
H∈Rlen×d表示自注意力模块输出的hidden states
,其通过将所有注意力头的平均投影来计算,并且
ActFunc
\text{ActFunc}
ActFunc像
GELU
\text{GELU}
GELU这样的激活函数。为了简单,这里忽略了自注意力的缩放因子和偏差项。
比较等式(2)和等式(3),可以发现
FFN
(
⋅
)
\text{FFN}(\cdot)
FFN(⋅)的计算形式与
SelfAtt
h
(
⋅
)
\text{SelfAtt}_h(\cdot)
SelfAtth(⋅)的几乎相同,除了具有不同的非线性激活函数。因此,将
FFN
\text{FFN}
FFN看作是具有query-key-value
机制的模块是合理的。具体来说,
FFN
\text{FFN}
FFN的输入
H
H
H作为queries
,第一个线性层的权重
W
1
W_1
W1是keys
,第二个线性层的权重
W
2
W_2
W2是values
。
三、方法
遵循Geva et al.2020,2022;Dai et al. 2022
,本文也将
Transformer
\text{Transformer}
Transformer中的
FFN
\text{FFN}
FFN看作是key-value
存储。基于这个视角,作者设计了一个神经知识银行
(Neural Knowledge Bank,NKB)
\text{(Neural Knowledge Bank,NKB)}
(Neural Knowledge Bank,NKB)和一个知识注入策略来向预训练
Transformers
\text{Transformers}
Transformers中注入额外的事实知识。在本小节中,将会引入将
FFN
\text{FFN}
FFN作为key-value
存储的视角,
NKB
\text{NKB}
NKB的架构和知识注入方法。
1. FFN \text{FFN} FFN的 Key-value \text{Key-value} Key-value存储视角
类似于Geva et al.(2020);Dai et al(2022)
,将
FFN
\text{FFN}
FFN形式化为
key-value
\text{key-value}
key-value存储。正如上图所示,将一个token的输入hidden state
h
∈
R
d
\textbf{h}\in\mathbb{R}^d
h∈Rd看作是query
,两个线性层的参数矩阵
W
1
,
W
2
∈
R
4
d
×
d
W_1,W_2\in\mathbb{R}^{4d\times d}
W1,W2∈R4d×d看作是
4
d
4d
4d的key和
4
d
4d
4d的value,其中每个key
或者value
是一个
d
d
d维向量。首先,
h
\textbf{h}
h别被输入至第一个线性层。对于
W
1
W_1
W1中的每个key向量,通过内积计算一个标量分数
s
i
s_i
si:
s
i
=
h
⊤
W
1
[
i
,
:
]
(4)
s_i=\textbf{h}^\top W_1[i,:]\tag{4}
si=h⊤W1[i,:](4)
其中,
[
⋅
,
⋅
]
[\cdot,\cdot]
[⋅,⋅]表示矩阵的切片操作。在激活函数之后,这些分数构成了中间隐藏层
FFN
\text{FFN}
FFN的
h
(
i
n
t
e
r
)
∈
R
4
d
\textbf{h}^{(inter)}\in\mathbb{R}^{4d}
h(inter)∈R4d:
w
i
=
ActFunc
(
s
i
)
(5)
w_i=\text{ActFunc}(s_i)\tag{5}
wi=ActFunc(si)(5)
h ( i n t e r ) = [ w 1 ; w 2 ; … , w 4 d ] (6) \textbf{h}^{(inter)}=[w_1;w_2;\dots,w_{4d}] \tag{6} h(inter)=[w1;w2;…,w4d](6)
其中,
[
⋅
;
⋅
]
[\cdot;\cdot]
[⋅;⋅]表示拼接。最终,将这些激活的神经元作为权重,并通过获得
FFN
\text{FFN}
FFN的
h
(
o
u
t
p
u
t
)
∈
R
d
\textbf{h}^{(output)}\in\mathbb{R}^d
h(output)∈Rd来集成
W
2
W_2
W2中的value向量。
h
(
o
u
t
p
u
t
)
=
∑
i
=
1
4
d
w
i
W
2
[
i
,
:
]
(7)
\textbf{h}^{(output)}=\sum_{i=1}^{4d}w_iW_2[i,:] \tag{7}
h(output)=i=1∑4dwiW2[i,:](7)
2. 神经知识银行( Neural Knowledge Bank \text{Neural Knowledge Bank} Neural Knowledge Bank)
Dai et al.(2022)
发现
Transformers
\text{Transformers}
Transformers中的
FFNs
\text{FFNs}
FFNs能够存储事实知识,隐藏作者设计的
NKB
\text{NKB}
NKB架构与
FFN
\text{FFN}
FFN相同。具体来说,对于一个
Transformers
\text{Transformers}
Transformers层,分配两个新矩阵
W
1
′
,
W
2
′
∈
R
d
′
×
d
W_1',W_2'\in\mathbb{R}^{d'\times d}
W1′,W2′∈Rd′×d作为额外的key和value,其中
d
′
d'
d′是控制
NKB
\text{NKB}
NKB容量的超参数。如上图所示,通过将
W
1
′
W_1'
W1′和
W
2
′
W_2'
W2′拼接在原始
FFN
\text{FFN}
FFN的
W
1
W_1
W1和
W
2
W_2
W2之后来将
NKB
\text{NKB}
NKB挂载至
Transformer
\text{Transformer}
Transformer层。
对于
NKB
\text{NKB}
NKB,
FFN
\text{FFN}
FFN的中间hidden state
h
(
i
n
t
e
r
)
\textbf{h}^{(inter)}
h(inter)将会被扩展至
(
4
d
+
d
′
)
(4d+d')
(4d+d′)维:
s
i
′
=
h
⊤
W
1
′
[
i
,
;
]
w
i
′
=
ActFunc
(
s
i
′
)
(8)
s_i'=\textbf{h}^\top W_1'[i,;]\quad w_i'=\text{ActFunc}(s_i') \tag{8}
si′=h⊤W1′[i,;]wi′=ActFunc(si′)(8)
h ( i n t e r ) = [ w 1 ; w 2 ; … , ; w 4 d ; w 1 ′ ; w 2 ′ ; … , w d ′ ′ ] (9) \textbf{h}^{(inter)}=[w_1;w_2;\dots,;w_{4d};w_1';w_2';\dots,w_{d'}'] \tag{9} h(inter)=[w1;w2;…,;w4d;w1′;w2′;…,wd′′](9)
其中,
w
i
′
w_i'
wi′是第
i
i
i个额外存储槽的权重。最终,将新的
h
(
i
n
t
e
r
)
\textbf{h}^{(inter)}
h(inter)作为权重,value向量
W
2
W_2
W2和
W
2
′
W_2'
W2′被如下方式集成:
h
(
o
u
t
p
u
t
)
=
∑
i
=
1
4
d
w
i
W
2
[
i
,
:
]
+
∑
i
=
1
d
′
w
i
′
W
2
′
[
i
,
:
]
(10)
\textbf{h}^{(output)}=\sum_{i=1}^{4d}w_iW_2[i,:]+\sum_{i=1}^{d'}w_i'W_2'[i,:] \tag{10}
h(output)=i=1∑4dwiW2[i,:]+i=1∑d′wi′W2′[i,:](10)
作为
FFN
\text{FFN}
FFN的简单扩展,
NKB
\text{NKB}
NKB非常容易使用和实现。更重要的是,
NKB
\text{NKB}
NKB这种类似于存储的架构高度可解释,并且能以人类可理解的方式解释key和value的含义。此外,key-value架构高度灵活,并且能够通过更新value向量来轻易执行知识更新。
3. 知识注入
为了能够引入额外的事实知识,使用
Salient Span Masking(SSM)
\text{Salient Span Masking(SSM)}
Salient Span Masking(SSM)目标函数来预训练
NKB
\text{NKB}
NKB。具体来说,先使用
DrQA
\text{DrQA}
DrQA的文档检索器来从
Wikipedia
\text{Wikipedia}
Wikipedia中获得包含额外知识的语料。然后,使用
spaCy
\text{spaCy}
spaCy中的实体识别器来识别每个文本片段中的salient spans
(例如命名实体和日期)。最后,随着遮蔽salient spans
并训练
NKB
\text{NKB}
NKB的参数来重构被遮蔽的salient span
。
在知识注入的过程中,固定原始预训练模型的参数并仅更新 NKB \text{NKB} NKB的参数。相较于先前的工作为知识注入更新预训练参数,本文的训练策略可以避免预训练模型的通用语言建模能力退化。此外,使用这个训练策略,新的事实知识被明确注入至 NKB \text{NKB} NKB,因此也更容易定位和分析新引入的知识。在知识注入后,可以直接微调整个模型来用于下游任务。
四、实验
- 添加知识为问答任务带来的效果
- 添加知识是否会降低模型的通用语言建模能力
五、 NKB \text{NKB} NKB的解释性
1. value向量存储实体
Dai et al.(2022)
发现
FFNs
\text{FFNs}
FFNs能够存储事实知识,Geva et al.(2022)
表示
FFNs
\text{FFNs}
FFNs中的value向量通常会对应人类可读的概念。受这些启发,作者在输出词典空间上分析了
NKB
\text{NKB}
NKB的值向量,发现大多数的值向量都存储了具体的实体。
-
方法
从在 WebQuestions \text{WebQuestions} WebQuestions上微调的最好模型 T5 b a s e + NKB \text{T5}_{base}+\text{NKB} T5base+NKB随机采样 NKB \text{NKB} NKB的值向量。对于第 i i i个值向量 v i ∈ R d \textbf{v}_i\in\mathbb{R}^d vi∈Rd,首先将其投影至输出词表空间并得到一个概率分布 p i ∈ R N v o c a b \textbf{p}_i\in\mathbb{R}^{N_{vocab}} pi∈RNvocab:
p i = Softmax ( E v i ) (11) \textbf{p}_i=\text{Softmax}(E\textbf{v}_i)\tag{11} pi=Softmax(Evi)(11)
其中, E ∈ R N v o c a b × d E\in\mathbb{R}^{N_{vocab}\times d} E∈RNvocab×d是 T5 b a s e \text{T5}_{base} T5base中的输出嵌入矩阵。然后,对于每个采样的值向量 v i \textbf{v}_i vi,手动检测 p i \textbf{p}_i pi中最高概率的token
,并将其分类至6个实体类别:Person, Place, Organization, Date, Other或者Non-entity。为了保证人工标注的置信度,忽略不在英语中或者不完成单词的token。最后,作者标注了100个验证value向量。 -
结果
对于每个实体类别,上表会展示一个值向量示例和评分最高的token。此外,还在上图中展示了所有类别的评分最高token的分布。发现85%采用的值向量都是对应具体的实体。值向量中的实体信息将会被集成至
FFN
\text{FFN}
FFN的输出hidden state
h
(
o
u
t
p
u
t
)
\textbf{h}^{(output)}
h(output)并有助于最终答案的生成。
2. key向量捕获输入模式
相比于 NKB \text{NKB} NKB的value向量存储输入独立的实体, NKB \text{NKB} NKB的key向量则是输入敏感的。它们负责根据输入模式来决定何时激活存储槽。在本小节,通过分析何时存储槽被激活,可以揭示触发key向量的模式。
-
方法
具体来说,将 WebQuestions \text{WebQuestions} WebQuestions验证集中的每个问题输入至模型中。当模型正在为一个问题生成第一个答案token时,记录 NKB \text{NKB} NKB的权重。在记录完所有问题的 NKB \text{NKB} NKB权重后,随机采样100个key向量进行分析。对于第 i i i个key向量 k i ∈ R d \textbf{k}_i\in\mathbb{R}^d ki∈Rd,选择出5个触发该key向量最多的问题(即拥有最高的 NKB \text{NKB} NKB权重)。最后,人工检测这5个问题并尝试确定出人类可读的语义模型。
-
结果
从人工的标注中发现78%采样的key都具有与top触发问题共同的语义模式。在上表中展示了key向量和对应的top触发问题的例子。将关于 NKB \text{NKB} NKB的key和value发现放在一起,可以总结出 NKB \text{NKB} NKB的工作机制:key向量根据输入模式决定是否激活存储槽,激活的存储槽value向量被集成来用于生成最终的答案。
六、 NKB \text{NKB} NKB的知识更新
知识更新能力对于避免模型产生错误和过时的结果是有意义的。利用 NKB \text{NKB} NKB灵活的key-value架构,作者提出了一个简单的方法,通过在 NKB \text{NKB} NKB上执行一个小的知识手术来直接将一个问题的答案更新至另一个问题。
-
数据
从 WebQuestions \text{WebQuestions} WebQuestions的验证集合中选择样本用于知识更新。为了保证目标答案的可验证性,选择那些模型预测错误的问题,目标是将错误回答更正。在本文中,我们仅考虑单个token作为答案的问题并预测答案。最后,为后续的知识更新实验保留了67个样本。
-
方法
受
Dai et al.(2022)
的启发,在 NKB \text{NKB} NKB上执行一个小的知识更新手术来删除原始答案的信息,并引入目标答案的新信息。具体来说,对于一个问题,先选择具有最高 NKB \text{NKB} NKB权重的存储槽。然后,在 NKB \text{NKB} NKB执行下面的操作:
v t + = λ ( e t g t − e o r i ) (12) \textbf{v}_t +=\lambda(\textbf{e}_{tgt}-\textbf{e}_{ori}) \tag{12} vt+=λ(etgt−eori)(12)
其中, t t t是最高权重存储槽的索引, λ \lambda λ是超参数, e o r i \textbf{e}_{ori} eori和 e t g t \textbf{e}_{tgt} etgt表示原始答案和目标答案的输出词嵌入。直觉上,只需要修改value向量,知识手术倾向于抑制原始答案的预测概率,并鼓励模型生成目标答案。 -
评估
使用两个指标来评估知识更新手术的效果。
success rate
表示答案成功更新至预期答案的比例。使用destruction rate
来衡量知识手术对其他样本的影响。对于每个知识手术,随机采样5个问题,并且destruction rate
表示知识手术改变问题答案的比例。 -
结果
上表中展示了知识更新的结果。随着 λ \lambda λ的增大,
success rate
和destruction rate
同时增大。特别地,当 λ = 0.07 \lambda=0.07 λ=0.07,可以实现一个很高的success rate(98.5%)
,并保存一个可容忍的destruction rate(2.7%)
。