作者,四川大学博士生,刘大一恒。本文已经获得 ChatbotMagazine 公众号授权。
☛ 实验分析与总结
该文章使用了卷积神经网络的一种变体(作者称为multi-column)从三个方面(答案路径Answer Path,答案上下文信息Answer Context,答案的类型Answer Type)对问题和答案的分布式表达进行学习,使得该分布式表达相比之前的向量建模方法能够包含更多有效的特征。该方法在WebQuestion数据集上测试,取得了40.8的F1-score。
对于这个缺陷,我们可以使用深度学习的模型对问题进行向量化,比如使用循环神经网络(Recurrent Nerual Networks, RNNs)、卷积神经网络(Counvoulutional Nerual Networks, CNNs )等模型提取问题特征,这样的方式考虑了语言的顺序,并且提取特征的能力也更加强大。
第二个缺陷是,在对答案进行向量化的时候,直接将答案的路径(问题主题词到答案实体的路径)和上下文信息(答案实体周围的知识库子图)一起作为答案特征,通过multi-hot的方式对答案进行向量化。事实上,这样的形式不利于模型区分答案的特征(仅仅根据答案的multi-hot向量是不好区分哪些是答案的类型,哪些来自答案的上下文,哪些来自问题主题词到答案实体的路径)。
因此我们可以将问题的特征表示拆解开,用三个向量分别表示答案的三个特征,即答案路径(Answer Path),答案上下文信息(Answer Context),答案类型(Answer Type),对于每一个答案特征向量,都用一个卷积网络去对问题进行特征提取,将提取出的分布式表达和该答案对应特征向量的分布式表达进行点乘,这样我们就可以得到一个包含三部分的得分函数:
接下来,我们再看一下和是怎么计算得到的。
词向量(Word-embedding):对于问题序列,对于其中的每一个单词它对应的one-hot形式,我们可以通过word-embedding矩阵转化为一个维的分布式向量(这里的word-embedding矩阵是通过word2vec等pre-train方式初始化的),即。
卷积操作(Convolution):对于一个含个单词的问题,我们可以得到一个的矩阵。如果我们把该矩阵想象成是一个图片,那么我们就可以像对图片一样进行卷积操作了。与图片卷积操作的不同之处在于,每一个卷积核的大小(即卷积窗口)是,表示每次对个单词的embedding进行卷积操作。
池化操作(Pooling):对于每一个卷积核的输出(假设卷积核大小为,在的矩阵上进行卷积,那么输出是一个维的向量),通过对该向量进行max-pooling操作(即取最大值)可以得到一个标量,该标量将作为问题最终表达的某一维度(可以理解成一个卷积核负责对整个问题提取一个一维的特征)。因此通过控制卷积核的数目我们可以控制最终输出的维度,即个卷积核可以输出一个维的最终表达(注意这里卷积核大小可以不同,一般设置为2,3,4)。
上述流程可以用下面这个图片来表达,注意,对于不同长度的问题,会通过补零(padding)操作将所有问题的长度限定到固定长度。
答案路径(Answer Path):从问题中的主题词到答案在知识库中形成一条路径,我们记录该路径上的每一个实体关系,可以通过multi-hot的形式来进行表示,答案路径的分布式表达可以表示为,这里由于路径的长度不确定,所以使用一范来做一个归一化normalization。
答案上下文信息(Answer Context):我们将答案实体对应1跳(hop)范围内的实体关系和实体作为答案实体的上下文信息。通过同样的方式我们可以得到答案上下文信息的分布式表达。
答案类型(Answer Type):在信息抽取中我们提到,答案的类型是一个很重要的特征。类型是一种特殊的实体关系,比如时间2009-12-17 的类型是 datetime,James Cameron 的类型是people.person 和 film.producer。 在实际操作中,可以在freebase里通过实体关系common.topic.notable.types 来查询实体对应的所有类型。通过同样的方式,我们可以得到相应的分布式表达。注意,如果候选答案是一个值,那么就用该值的类型(string/float/datetime)作为答案类型,比如答案是2009-12-17,那么类型就是string。
至此,我们得到了包含个三部分的得分函数:
整个流程如下图所示:
我们可以通过我在揭开知识库问答KB-QA的面纱4·向量建模篇介绍了KB-QA提到的同样的方式构造损失函数和多任务学习来训练模型参数。
由于这篇文章考虑了答案的三个因素(路径、上下文、类型),为了探究哪个因素对最终效果影响最大。作者通过测试 在得分函数中去除某一因素、只使用single column、不进行多任务训练、只使用1 hop范围作为候选答案(该顺序对应下表的顺序)等情况下的模型性能,来对模型进行分析。
那么你猜猜对于答案的路径、上下文、类型这三个因素,去除哪个因素之后对性能影响最大呢?实验结果如下表
首先,我们想知道对于一个问题,我们的模型最关注这个问题的哪个单词,即显著性单词检测(Salient words detection) 。我们可以进行这样的实验,要检测问题中的某一个单词的显著性,我们可以将该单词替换为某些停顿词(如to is a等),计算替换了单词之后的表达,再计算该表达和原始表达的欧式距离(可以多替换几种停顿词取平均距离)作为显著性得分,这里给出了一些例子:
候选答案生成:有些问题的主题词是难以正确提取出来的,比如缩写词和表达不全,如问题“where did jfk and his wife live” ,很难将jfk这个缩写词对应到John F. Kennedy这个人名上,这样会导致我们无法得到正确的候选答案集合。要解决这种情况,可能需要对问题进行一些预处理。
问题歧义:对于数据集中有些有歧义的问题,难以获得和正确答案相应的关系,如问题“who is aidan quinn”,答案是演员,我们很难通过该问题who is推断出和职业相关。这种情况该怎么办呢?
时序敏感(Time-Aware)问题:对于问题中带有 first / second 这种与时间顺序相关的词语,如“who is johnny cash’s first wife” ,答案可能给出的是second wife的名字(模型只关注到了wife而忽略了first的含义,并没有进行额外的推理)。对于这种情况,可能需要定义专门(ad-hoc)的操作,注意的是,这一点是该类方法相比语义解析方法的一个缺点。
那么,下一期,我们就将介绍深度学习对语义解析方法的提升,我们将以Micorsoft ACL 2015年的Outstanding paper为例,为大家带来揭开知识库问答KB-QA的面纱6·深度学习中篇,进一步揭开KB-QA的面纱。
– End –
ChatbotMagazine 是智言科技(深圳)有限公司旗下的一个技术分享栏目,智言科技是一家专注于基于知识图谱问答系统研发的 AI 公司。欢迎扫描二维码关注 ChatbotMagazine 公众号。
OpenKG.CN
中文开放知识图谱(简称OpenKG.CN)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。