知识库问答KB-QA——深度学习(4)(注意力机制)

引入注意力机制的KB-QA

文章Question Answering over Knowledge Base with Neural Attention Combining Global Knowledge Information由中科院自动化所刘康老师等人在2016年发表在arxiv上。该文章也是使用深度学习对向量建模方法进行提升,不同于之前使用CNN提取问句特征,而该文章使用双向LSTM并结合问题引入注意力机制提取问句特征,在WebQuestion上取得了42.6的F1-Score,击败了之前的Multi-Column CNN。

深度学习提升向量建模方法的大体框架都很接近:根据问题确定主题词,根据主题词确定候选答案,通过候选答案和问题的分布式表达相似度得分确定最终答案。而方法的核心在于学习问题和候选答案的分布式表达,其实相关的方法都是在这两个部分做文章。这篇文章的想法在于,对于不同的答案,我们关注问题的焦点是不同的,我们根据候选答案的信息,来引入注意力机制,对同一个问题提取出不同的分布式表达。

比如 对于问题 “who is the president of France?”,其中之一的答案是实体“Francois Holland”,我们通过知识库可以知道Francois Holland 是一个总统,因此我们会更加关注问句中的 “president” 和 “France” 单词,而根据Francois Holland的类型person,我们会更关注问句中的疑问词who。

(关于注意力机制最经典的文章:Yoshua Bengio等人在2015年ICLR发表的Neural Machine Translation by Jointly Learning to Align and Translate,该文章提出的encoder-decoder with attention mechanism模型几乎可以横扫大部分的NLP问题)

该方法的整体框架如下图所示:

在这里插入图片描述
具体来说,可分为以下三个步骤:

  1. 将候选答案转化为分布式表达
    从多个方面考虑答案的特征:答案实体、答案上下文环境(知识库中所有与答案实体直接相连的实体)、答案关系(答案与问题主题词之间的实体关系)、答案类型。每一种特征都可以用 v k v_{k} vk 维的multi-hot向量表示, v k v_{k} vk 即知识库实体和实体关系的数量之和。通过Embedding矩阵 E k E_{k} Ek 将每一种特征转化为低维的分布式表达,就得到了四种关于答案的分布式表达 e e , e c , e r , e t e_{e}, e_{c}, e_{r}, e_{t} ee,ec,er,et(其中由于答案上下文环境涉及的实体较多,取这些实体的embedding均值作为上下文环境的embedding)。

  2. 将自然语言问题转化为分布式表达
    将问句中的每一个单词经过Embedding矩阵 E w E_{w} Ew 转化成word-embedding,使用双向LSTM(bi-LSTM)提取问句特征。bi-LSTM第 j j j 时刻的输出记作 h j h_{j} hj,使用bi-LSTM的好处在于 h j h_{j} hj 既包含了第 j j j 个单词之前的信息,又包含了该单词之后的信息。

  3. 在得分函数中引入注意力机制
    我们希望问句的分布式表达对于四种不同的答案特征有不同的表达(根据答案的特征对于问题有不同的关注点),第 i i i 种答案的分布式表达 e i e_{i} ei 对应的问句分布式表达记作 q i q_{i} qi,得分函数定义为四种对应表达的点乘之和,即:

S ( q , a ) = ∑ e i ∈ { e e , e r , e t , e c } q i ⋅ e i S(q, a)=\sum_{e_{i} \in\left\{e_{e}, e_{r}, e_{t}, e_{c}\right\}} q_{i} \cdot e_{i} S(q,a)=ei{ee,er,et,ec}qiei

对于一般的LSTM,通常将最后一个时刻的输出 h T h_{T} hT 作为句子的最终表达,而在这里,我们引入注意力机制,根据问题的特征,给予每一时刻的输出不同程度的关注(对bi-LSTM每一时刻的输出进行加权求和),即:

q i = ∑ j = 1 n α i j h j q_{i}=\sum_{j=1}^{n} \alpha_{i j} h_{j} qi=j=1nαijhj

其中的权重系数 α i j \alpha_{i j} αij 取决于bi-LSTM第 j j j 时刻的输出 h j h_{j} hj 和第 i i i 种答案特征的分布式表达 e i e_{i} ei,因此我们可以使用一个单层的神经网络去学习这个权重,并通过Softmax对权重进行归一化,公式如下:

α i j = exp ⁡ ( w i j ) ∑ k = 1 n exp ⁡ ( w i k ) w i j = W T ( tanh ⁡ [ h j ; e i ] ) + b \begin{array}{c} \alpha_{i j}=\frac{\exp \left(w_{i j}\right)}{\sum_{k=1}^{n} \exp \left(w_{i k}\right)} \\ w_{i j}=W^{T}\left(\tanh \left[h_{j} ; e_{i}\right]\right)+b \end{array} αij=k=1nexp(wik)exp(wij)wij=WT(tanh[hj;ei])+b

  1. OOV问题
    特别一提的是,在测试的过程中,候选答案可能从未在训练集中出现过,因此它对应的分布式表达是没有被模型训练过的(这个问题称为the problem of out of vocabulary, OOV)。为了解决该问题,作者利用TransE对知识库进行训练,训练实体和实体关系对应的Embedding矩阵 E k E_{k} Ek(实际操作中,作者通过轮流训练KB-QA模型和TranE的方式训练并共用Embedding矩阵 E k E_{k} Ek,每训练一个epoch的KB-QA就训练100个epoch的TransE)。这样,我们就利用了整个知识库的特性,预先对每一个知识库实体都进行了训练,使得相似实体的分布式表达也很相似。因此,即使遇到KB-QA训练集中未遇到的候选答案实体,KB-QA模型也能将它视作是在训练集中出现过的某个和它分布式表达相似的实体,这样就减轻了OOV问题所带来的破坏性。

(关于TransE:TransE是知识图谱补全的经典方法,它借鉴了word-embedding的思想,能够将知识库中的实体和实体关系用分布式向量表达。其主要思想是对于一个知识三元组(s,r,o),希望主语实体的分布式表达e(s)加上关系实体的分布式表达e®能够尽量接近宾语实体的分布式表达e(o),因此可以构建类似的margin-rank损失函数通过正样本和采样负样本进行训练。TransE提出之后还出现了大量的改进算法,诸如TransH、TransR、TransG、TranSparse、TransD等等。)

在实验环节,作者对模型进行了分析,分析使用注意力机制(ATT)、利用知识库全局信息使用TransE训练实体embedding (GKI)以及bi-LSTM对性能的影响,在WebQuestion测试集上F1-Score的结果如下:

在这里插入图片描述
可以看出ATT和GKI这两个机制都对模型性能有一定的提升,最终模型取得了42.6的F1-score,击败了几乎所有的深度学习提升向量建模的方法(记忆网络是42.2而Multi-column CNN是41.3)。当然这个方法在WebQuestion上的F1-Score距离在深度学习(2)中提到的语义解析方法(F1-Score 52.5)还有一定的距离,但论文中也提到相比该方法设置大量的人工特征(很多特征是对训练集观察得到的),此方法具有更强的适应性和可扩展性。

注意力机制还有另外一个好处,那就是可视化,通过可视化每个单词的权重,可以得到一些可解释性,如下图:

在这里插入图片描述
图中颜色越深表示权重越大,我们可以通过该图看出一些符合人类直觉的解释(如对应答案的类别,我们会更加关注疑问词等等)。

深度学习篇小结

在KB-QA深度学习篇中,介绍了使用CNN、RNN、记忆网络、双向LSTM、注意力机制等深度学习的火热方法与KB-QA结合的几篇经典文章。可以看到深度学习具有传统方法所不具有的高效性、可扩展性、适应性、鲁棒性等优点。

使用更加复杂的记忆网络是未来深度学习解决KB-QA的一个很有前景的途径。记忆网络的框架给了我们很多的提升空间:引入更多的技巧,使用更合理的模型作为记忆网络的组件,在记忆选择中引入推理机制,注意力机制和遗忘机制,将多源的知识库存入记忆等等。

一些公开数据集的下载地址
WebQuestion: https://github.com/percyliang/sempre
Freebase:https://github.com/percyliang/sempre
wikianswers: http://knowitall.cs.washington.edu/paralex/

参考文献

揭开知识库问答KB-QA的面纱7·深度学习下篇(二)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值