知识语言处理工具箱 - DKPLM(三)

2022-01-22  本文已影响0人  processor4d

文章名称

【AAAI-2019】【Alibaba Group】DKPLM: Decomposable Knowledge-enhanced Pre-trained Language Model for Natural Language Understanding

核心要点

文章旨在解决现有知识增强的预训练语言模型(KEPLM)利用encoder进行知识表示时计算耗时严重,导致无法应用到实际场景的问题。提出DKPLM方法,通过1)检测长尾实体,避免注入冗余信息;2)利用“pseudo token”取代长尾实体嵌入表示;3)增加实体关系解码预训练任务,让模型学习重构知识提升模型的知识理解能力等方法增强模型融合知识的能力。

上一节介绍了如何作者为什么要选择需要注入知识的实体,以及如何合理的筛选它们。本节继续介绍知识注入的另外2个问题。

方法细节

问题引入

如前所述,作者从全语料层面的考虑、单句层面的考虑以及知识本身特性层面,全面考虑是否要对某个实体进行知识注入,并依据这3方面考虑设计了指标来进行实体的筛选。这样做不但减少了负向迁移的可能也提升了运算速度。然而,仍然有另外2个问题需要关注,

具体做法

Pseudo Token Embedding Injection

基于TransE[1]的思想,知识三元组的头部实体e_{h}和尾部实体e_{t},以及关系描述的嵌入表示具有关系,
h_{e_{h}}=h_{e_{t}}-h_{r}。其中 h_{e_{h}}, h_{e_{t}}h_{r} 分别表示头部实体e_{h},尾部实体 e_{t} 和 关系谓词r的嵌入向量。如果一个实体是 \mathrm{KG} 中的一个尾实体 e_{t},则他们具有关系h_{e_{t}}=h_{e_{h}}+h_{r}

基于此,作者把知识关系三元组拼接成一句话,传入PLM。具体来说,作者使用底层 PLM 作为共享编码器来获取知识表示。 当实体是 头实体 e_{h} 的时候,作者拼接尾部实体 e_{t}和关系谓词 r(可以是one-hot也可以是向量),并将它们输入PLM,并采用PLM最后一层的向量\mathcal{F}\left(e_{t}\right)\mathcal{F}(r),作为Pseudo Token Embedding。其具体的计算公式如下,
\begin{aligned} h_{e_{t}} &=\mathcal{L} \mathcal{N}\left(\sigma\left(f_{s p}\left(\mathcal{F}\left(e_{t}\right)\right) W_{e_{t}}\right)\right) \\ h_{r} &=\mathcal{L} \mathcal{N}\left(\sigma\left(f_{s p}(\mathcal{F}(r)) W_{r}\right)\right) \end{aligned}

其中 \mathcal{L N} 是 LayerNorm 函数,f_{s p} 是用于自注意力池化算子。 W_{e_{t}}W_{r} 是可训练的参数。

然而,由于实体和关系谓词的(字面)长度通常很短,因此,PLM生成的向量表示可能表现力不足。 作者引入目标实体的描述文本,e_{h}^{\text {des }}。 假设\mathcal{F}\left(e_{h}^{\text {des }}\right) 为由 PLM 生成的 e_{h}^{d e s} 的序列表示(把描述文本当做文本序列输入PLM得到的表示)。 目标实体的Pseudo Token Embedding,h_{e_{h}}可以利用如下公式得到,
h_{e_{h}}=\tanh \left(\left(h_{e_{t}}-h_{r}\right) \oplus \mathcal{F}\left(e_{h}^{\text { des }}\right)\right) W_{e_{h}},
其中 \oplus 是指两个表示拼接函数,W_{e_{h}}是可训练参数。

最终,将筛选出的长尾实体的输入embedding替换为 Pseudo Token Embedding(h_{e_{h}}h_{e_{t}},具体取决于目标实体是头实体还是尾实体)。这样就利用了原有PLM的最低层当做知识的encoder,而不引入额外的计算资源。

Relational Knowledge Decoding

最后,我们需要回答的问题是,如何确定注入的知识被模型正确理解了呢?作者设计了一个关系知识解码器,显式的迫使模型正确理解注入的知识。具体来说,作者采用自注意力池化机制,基于上述预测的Pseudo Token Embedding h_{e_{h}},得到头部实新的嵌入表示,

h_{e_{h}}^{o}=\mathcal{L} \mathcal{N}\left(\sigma\left(f_{sp}\left(\mathcal{F}\left(h_{e_{h }}\right)\right) W_{e_{h}}^{o}\right)\right)

其中 W_{e_{h}}^{o} 是可学习参数。基于这个头部实体的向量表示h_{e_{h}}^{o}和关系向量表示h_{r},可以计算得到尾部实体第i个tokenh_{d}^{i}的嵌入向量表示。具体计算公式如下图所示。

h_{d}^{i}=\tanh \left(\delta_{d} h_{r_{i}} h_{d}^{i-1} \cdot W_{d}\right),

其中\delta_{d}是一个比例因子,h_{d}^{0} 等于 h_{e_{h}}^{o} 作为尾实体解码的初始化。可以看出,其实解码是一个序列化的解码过程

此外,由于词表一般都比较大,作者利用Sampled Softmax函数[2]减少运算复杂度。因此,上述尾实体token level的损失函数\mathcal{L}_{d_{i}}如下,

\begin{gathered} \mathcal{L}_{d_{i}}=\frac{\exp \left(f_{s}\left(h_{d}^{i}, y_{i}\right)\right)}{\ exp \left(f_{s}\left(h_{d}^{i}, y_{i}\right)\right)+N \mathbb{E}_{t_{n} \sim Q\left(y_ {n} \mid y_{i}\right)}\left[\exp \left(f_{s}\left(h_{d}^{i}, y_{n}\right)\right)\right] } \\ \end{gathered}

其中,\left.f_{s}\left(h_{d}^{i}, y_{i}\right)\right)=\left(h_{d}^{i}\right)^{T} \cdot y_{i}-\log \left(Q\left(t \mid t_{i}\right)\right)y_{i} 是ground-truth,y_{n}是从负采样分布Q\left(t_{n} \mid t_{i}\right) 中采样的负样本。具体的负采样函数参见论文原文。N$是负样本数。

Total Loss

DKPLM同时优化语言模型和知识解码两个预训练任务,其总体损失函数可以表示如下,

\mathcal{L}_{\text {total }}=\lambda_{1} \mathcal{L}_{\mathrm{MLM}}+\left(1-\lambda_{1}\right) \mathcal{L }_{\mathrm{De}}

其中 \lambda_{1} 是超参数,\mathcal{L}_{\mathrm{De}} 是整个目标尾实体的解码损失。

心得体会

Pseudo Token Embedding

个人理解,就是利用原有的PLM做多次运算(注意只有最底层,因此计算还好),来代替了单独的encoder。

Relational Knowledge Decoding

个人感觉,作者其实还是引入了额外的计算单元的,只不过仅仅是在解码的时候,并且只用于训练阶段。但是通过这个简单的额外任务,可以确保知识注入的准确与合理性。也许可以利用其他的任务不仅仅是TransE来显式的校验知识。还可以设计其他损失。算是开辟了一个小的框架领域吧。

文章引用

[1] Bordes, A.; Usunier, N.; Garc ́ıa-Dura ́n, A.; Weston, J.; and Yakhnenko, O. 2013. Translating Embeddings for Modeling Multi-relational Data. In NIPS, 2787–2795.

[2] Jean, S.; Cho, K.; Memisevic, R.; and Bengio, Y. 2015. On Using Very Large Target Vocabulary for Neural Machine Translation. In ACL, 1–10.

上一篇下一篇

猜你喜欢

热点阅读