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

内容速览

  • 引入注意力机制的KB-QA
  • 深度学习篇小结

我们紧接上篇揭开知识库问答KB-QA的面纱7·深度学习下篇(一)的内容,为大家介绍注意力机制的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维的multi-hot向量表示,v_k即知识库实体和实体关系的数量之和。我们通过Embedding矩阵E_k将每一种特征转化为低维的分布式表达,我们就得到了四种关于答案的分布式表达e_e,e_c,e_r,e_t(其中由于答案上下文环境涉及的实体较多,我们取这些实体的embedding均值作为上下文环境的embedding)。

2.将自然语言问题转化为分布式表达

将问句中的每一个单词经过Embedding矩阵E_w转化成word-embedding,使用双向LSTM(bi-LSTM)提取问句特征。bi-LSTM第j时刻的输出记作h_j,使用bi-LSTM的好处在于h_j既包含了第j个单词之前的信息,又包含了该单词之后的信息。

3.在得分函数中引入注意力机制

扫描二维码关注公众号,回复: 2331801 查看本文章

我们希望我们问句的分布式表达对于四种不同的答案特征有不同的表达(根据答案的特征对于问题有不同的关注点),第i种答案的分布式表达e_i 对应的问句分布式表达记作q_i,我们的得分函数定义为四种对应表达的点乘之和,即:


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

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

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

(关于TransE:TransE是知识图谱补全的经典方法,它借鉴了word-embedding的思想,能够将知识库中的实体和实体关系用分布式向量表达。其主要思想是对于一个知识三元组(s,r,o),我们希望主语实体的分布式表达e(s)加上关系实体的分布式表达e(r)能够尽量接近宾语实体的分布式表达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距离我们在深度学习中篇所提到的语义解析方法(F1-Score 52.5)还有一定的距离,但论文中也提到相比该方法设置大量的人工特征(很多特征是对训练集观察得到的),这个方法具有更强的适应性和可扩展性。

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


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

深度学习篇小结

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

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

本期之后,我会不定时的更新一些KB-QA新的有趣的文章,欢迎大家一起来探讨和交流KB-QA相关的知识。

这里再分享一些公开数据集的下载地址,方便想要复现的朋友们使用:

WebQuestion: github.com/percyliang/s
Freebase: github.com/percyliang/s (or developers.google.com/f)

wikianswers: knowitall.cs.washington.edu

接下来,我们会考虑写一些与KB相关的其他系列文章,比如基于KB的VQA知识图谱推断与补全等,欢迎有意向合作或投稿的朋友与我联系~

最后,本专栏已授权在微信公众号ChatbotMagazine上转载,感兴趣的朋友可以扫描下方微信号关注:

猜你喜欢

转载自blog.csdn.net/zjrn1027/article/details/80590825