精华内容
下载资源
问答
  • 本篇博客主要基于微软亚洲研究院段楠老师的《智能问答》第四章 知识图谱问答 进行整理。 知识图谱问答,又称 Knowledge-based QA 或 KBQA,是一种基于结构化知识库(即知识图谱)的智能问答方法。给定自然语言问题,...

    本篇博客主要基于微软亚洲研究院段楠老师的《智能问答》第四章 知识图谱问答 进行整理。

    知识图谱问答,又称 Knowledge-based QA 或 KBQA,是一种基于结构化知识库(即知识图谱)的智能问答方法。给定自然语言问题,该类方法基于知识图对问题进行理解,并根据问题理解的结果从知识图谱中查找或推理出问题对应的答案。

    知识图谱问答分为**基于语义分析的方法(Semantic Parser)和基于答案排序的方法(Information Retrieval)**两类。基于语义分析的方法是首先将输入问题转化为知识图谱能够理解和执行的结构化查询(即语义表示),然后在知识图谱上直接执行该结构化查询得到问题对应的答案。基于答案排序的方法是首先基于输入问题从知识图谱中快速找到少量答案候选,然后采用排序模型对不同答案候选进行打分,并选择得分最高的答案候选集合作为问题对应的答案。

    基于答案排序的方法(Information Retrieval)

    绝大多数基于语义分析的知识图谱问答需要带有语义(表示)标注的问题集合作为训练数据。这类数据需要花费的时间和成本很高,而且要求标注人员对语义表示有一定程度的理解。使用答案作为弱监督训练语义分析模型[10,13],能够在一定程度上缓解数据标注难度高、开销大和标注量有限问题,但按照答案选择出夹的正例语义分析(语义表示)候选存在一定的噪音,这在一定程度上也会对语义分析模型的质量造成影响。

    基于答案排序(answer ranking)的知识图谱问答将该任务看成一个信息检索任务,即给定输入问题Q和知识图谱KB,通过对KB中实体进行打分和排序,选择得分最高的实体或实体集合作为答案输出。

    具体来说,该类知识图谱问答方法主要包含下述四个模块:

    1. 问题实体识别。问题实体是指问题Q中提到的知识库实体,例如在Who founded Microsoft 这个问题中,Microsoft在知识图谱中对应的实体是该问题的问题实体。每个问题可能对应多个问题实体,该类实体的识别通常采用实体链接技术(把问题中的实体提及 链接到知识图谱中对应的实体上)完成。
    2. 答案候选检索。根据识别出来的一个问题实体,从知识图谱中查找与之满足特定约束条件的知识库实体集合,作为该问题的答案候选。最常用的约束条件是:在知识图谱中,与问题实体最多通过两个谓词相连(两条边)的知识库实体。该做法假设问题对应的答案实体和问题实体在知识图谱中的距离通常不会很远。
    3. 答案候选表示。由于每个答案候选无法直接与输入问题进行比较,该模块基于答案候选所在的知识图谱上下文,生成答案候选对应的向量表示。这样,输人问题和答案候选之间的相关度计算就转化为输入问题和答案候选对应的向量表示之间的相关度计算。具体方法的不同主要体现就在如何生成答案的向量表示上。
    4. 答案候选排序。 使用排序模型对不同答案候选进行打分和排序,并返回得分最高的答案候选集合作为输出结果。

    下图给出基于答案排序的知识图谱问答方法的工作流程示意图,按照对答案候选的不同表示方法,本博客将介绍五种具体的方法,包括特征工程方法、问题生成方法、子图匹配方法、向量表示方法和记忆网络方法。
    在这里插入图片描述

    1. 基于特征的答案排序

    基于特征工程的方法首先从问题中识别出问题实体(将问题中的实体提及链接到知识图谱中对应的实体),并根据问题实体在知识图谱中的位置,抽取与之通过不超过两个谓词(两条边)连接的实体作为答案候选集合。然后,使用一个特征向量表示每一个答案候选。最后,基于特征向量对答案候选集合进行打分排序,并输出得分最高的答案候选集合(答案可能是一个实体,也可能是多个实体(实体集合))。

    每个答案候选对应的特征向量由N个特征组成,每个特征反映了输入问题与该答案候选在某个维度上的匹配程度,并通过组合问题特征和答案特征得到。

    常用的问题特征包括:

    • 疑问词特征(用QwordQ_{word}表示)。该特征对应的特征值是问题中包含的疑问词。英文问句中常见的疑问词包括 Who、When、Where、What、Which、Why、Whom、Whose 和 How.疑问词特征通常指明了问题对应答案的类型,例如,以Who开头的问题对应的答案(类型)往往是人,以Where开头的问题对应的答案往往是地点。
    • 问题实体特征(用QentityQ_{entity}表示)。该特征对应的特征值是问题中提到的问题实体,问题实体能够帮助问答系统在知识图谱中定位并抽取答案候选。一个问题中可能包含多个实体提及,因此对应的问题实体特征也可能是多个。
    • 问题类型特征(用QtypeQ_{type}表示)。该特征对应的特征值是问题中的一个名词单词或短语,用来指明问题答案的类型。该类特征通常采用基于规则的方式从问题对应的句法分析树中抽取得到。
    • 问题动词特征(用QtypeQ_{type}表示)。该特征对应的特征值来自问题的核心动词,用来指明问题提到的语义关系,该语义关系通与知识图谱中的谓词联系紧密。
    • 问题上下文特征(用QcontextQ_{context}表示)。该特征对应的特征值是问题中出现的除了上述特征之外的单词或n元组(即 n-gram).

    下表给出从问题 What is the name of Justin Bieber brother中抽取出来的一组问题特征及对应特征值。
    在这里插入图片描述
    常用的答案特征包括:

    • 谓词特征(用ApredA_{pred}表示)。该特征对应的特征值是知识图谱中连接答案候选实体和问题实体的谓词路径。该谓词路径是判别答案候选是否是问题对应答案的最关键因素。该特征通常与问题特征中的QverbQ_{verb}QcontextQ_{context}对应。
    • 类型特征(用AtypeA_{type}表示)。该特征对应的特征值是答案候选实体在知识图谱中对应的类型。该特征通常与问题特征中的QwordQ_{word}QtypeQ_{type}对应。
    • 上下文特征(用AcontextA_{context}表示)。该特征对应的特征值是和答案候选实体在知识图谱中直接相连的谓词以及实体集合。该特征通常与问题上下文特征 QcontextQ_{context}对应。

    下表给出基于问题实体 Justin Bieber在知识图谱中出现的位置(如下图所示),抽取出来的答案实体候选Jaxon Bieber对应的答案特征及答案特征值。
    在这里插入图片描述
    在这里插入图片描述
    对问题特征和答案特征分别抽取完成之后,可以将二者中的特征进行两两组合,这样就生成一个特征向量。Yao 和 Durme 基于该特征向量训练二分类器[14], 用于判断该答案候选是否可以当做答案。Yao从问题中抽取1-gram和2-gram作为问题特征[15],从答案中选择ApredA_{pred}作为答案特征,并组合生成特征向量训练打分器,并取得了很好的效果。

    2. 基于问题生成的答案排序

    基于问题生成的方法在完成问题实体识别和答案候选检索后,采用文本生成技术为每个答案候选(实体)生成一个自然语言问题,作为该答案候选对应的表示,通过计算输入问题和每个答案候选对应的生成问题之间的相似度,可以对答案候选集合进行打分和排序。由于问题生成本身是一个非常重要的研究课题,之后有机会会对该任务做详细的介绍。本小节以 Berant和 Liang提出的方法为例,介绍基于模板的问题生成方法在知识图谱问答中的应用[16],任何问题生成方法都可以替换基于模板的方法套用在该问答框架下。

    给定输入问题Q和从Q中识别出来的问题实体e,将答案候选eanswere_{answer}分为如下五类:

    1. 与问题实体e通过一条边(即谓词p)直接相连的答案候选。用p.e表示该答案候选对应的语义表示,例如,who directed Top Gun (谁执导的《Top Gun》)这个问题的某个答案候选对应的λDCS\lambda-DCS语义表示为 Directed.TopGun。
    2. 与问题实体e通过两条边(即谓词p1p_1p2p_2)相连的答案候选。用p1.p2.ep_1.p_2.e表示该答案候选对应的语义表示,例如,where does Steve Balmer work 个问题的某个答案候选对应的λDCS\lambda-DCS语义表示为 Employment.EmployerOf.SteveBalmero
    3. 与问题实体e1e_1通过两条边(即谓词p1p_1p2p_2)相连,并且和另一个问题实体e2e_2通过另外两条边(即谓词p1p_1p3p_3)相连的答案候选。用p1.(p2.e1p3.e2)p_1.(p_2.e_1 \sqcap p_3.e_2)表示该答案候选对应的语义表示,例如,who did Brad Pitt play in Troy (布拉德·皮特在《特洛伊》中扮演的谁)这个问题的某个答案候选对应的λDCS\lambda-DCS语义表示为 Character.(Actor.BradPittFilm.Troy)Character.(Actor.Brad Pitt \sqcap Film.Troy).
    4. 属于上述三类答案候选之一并且具有类型t的答案候选。用Type.tzType.t \sqcap z表示该答案候选对应的语义表示,其中z表示上述三类答案候选对应的语义表示之一,例如,what composers spoke French这个问题的某个答案候选对应的λDCS\lambda-DCS语义表示为Type.Composer\sqcapSpeakerOf.French.
    5. 计数类型的答案候选。用count(z)表示该答案候选对应的语义表示,count在答案候选集合的基础之上返回该集合中包含的实体数目。例如,how many ships were designed by Nat Herreshoff这个问题的某个答案候选对应的λDCS\lambda-DCS语义表示为Count(BoatDesigner.NatHerreshoff)Count(BoatDesigner.Nat Herreshoff).除计数操作外,其他一些特殊操作符,例如最大/最小、第一/第二、最高/最低等,也可以通过类似的方式生成问题。

    在给定一个答案候选对应的语义表示后,Berant和 Liang采用基于模板的方式将答案候选的语义表示转化(生成)为一个自然语言问题[16]. 下表给出语义表示为p.e的答案候选对应的问题生成规则。
    在这里插入图片描述
    上表中,d(t)表示答案候选在知识图谱中对应的实体类型,d(e)表示问题实体,d§表示连接问题实体和答案候选的谓词。为了便于说明,这里给出 一个例子,问题 which city was Barack Obama born 对应的一个问题实体是 Barack Obama,基于该问题实体定位的一个答案候选是 Honolulu,由下图可见,该答案候选对应的语义表示为p.e,并且谓词p=PlaceOfBirth 对应的词性是 NP.因此可以采用上表中的第一条规则生成问题 what city is the place of birth of Barack Obama,其中d(t)=city,d(e)=Barack Obama。

    在为每个答案候选生成对应的自然语言问题后,该方法使用关联模型(association model)和向量空间模型(vector space model)计算输入问题和生成问题之间的相似度[16]。
    在这里插入图片描述
    在这里插入图片描述
    ϕas(Q,Qgen)Tθas\phi_{as}(Q,Q_{gen})^T\theta_{as}表示关联模型,该模型将输入问题Q和生成问题QgenQ_{gen}之间的每一个短语对看成是一个复述短语对,并通过训练数据学习复述短语对对应的权重向量θas\theta_{as}. Mvs(Q,Qgen)=i,j=1kwijviQvjQgenM_{vs}(Q,Q_{gen})=\sum\limits_{i,j=1}^{k}w_{ij}v_i^Qv_j^{Q_{gen}}表示向量空间模型,其中viQv_i^Q表示输入问题Q中第i个词对应的词向量,vjQgenv_j^{Q_{gen}}表示生成问题QgenQ_{gen}中第j个词对应的词向量,wijWRk×kw_{ij}\in W\in R^{k\times k},W是待学习的参数矩阵。

    3. 基于子图匹配的答案排序

    基于子图匹配的知识库/知识图谱问答方法为每个答案候选(实体)从知识库/知识图谱中抽取一个子图(sub-graph),通过计算输入问题和每个答案候选对应子图之间的相似度,对答案候选集合进行打分和排序。

    Yih等人首先从输入问题Q中定位问题实体[17].在下图中,问题 who was Barack Obama married to in 1992中提到的Barack Obama被抽取出来当做问题实体。
    在这里插入图片描述
    然后,答案候选抽取模块以该问题实体为起点,按照如下规则从知识库中选择答案候选:①和问题实体通过一个谓词(一条边)直接相连的实体可以作为一个答案候选;② 和问题实体通过两个谓词(两条边)相连,并且两个谓词之间是一个CVT节点的实体可以作为一个答案候选。上述答案候选抽规则基于如下假设:问题对应的答案实体在知识库中的位置应该和问题实体在知识库中的位置相隔不远(一跳或
    两跳)。例如,下图中基于 Barack Obama这个问题实体能够抽取出来的答案候选包括:Honolulu、Politician、1961.08.04、Person、Chicago、1992. 10.03 和 Michelle Obama.前四个答案候选来自和问题实体相隔一跳的实体,后三个答案候选来自和问题实体相隔两跳的实体。
    在这里插入图片描述
    接下来,答案子图生成模块为每个答案候选实体从知识库中抽取出一个子图,作为对该答案实体的一种表示。每个答案子图通常包含如下几类信息。①问题实体和答案实体之间的谓词路径;②答案实体对应的实体类型;③和答案实体相连或者和谓词路径上的 CVT节点相连的实体。例如,答案候选Michelle Obama对应的子图如下所示:
    在这里插入图片描述
    如上图所示,1992.10.03这个节点之所以被加到子图中来,是因为问题中提到了 1992.

    最后,答案候选排序模块计算输入问题和每个(候选)答案(实体对应)子图之间的相似度,用来对子图对应的答案候选进行打分。这背后的思路是:如果一个答案候选所在的知识库上下文(即答案子图)和问题的相似很高,那么该答案候选极有可能就是问题对应的答案。不同的特征可以用来计算问题和对应答案子图之间的相关度。例如,问题和核心路径之间的相似度特征。核心路径在这里特指问题实体
    和答案候选实体之间的谓词路径。例如上图中是问题实体 Barack Obama 和答案候选实体 Michelle Obama 对应的核心路径。该相似度可以采用类似 CDSSM 方法[18-20]进行计算。此外,与核心路径上的实体直接连接并且出现在问题中的实体数目也是一个非常重要的特征,例如上例中的 1992. 一个子图中越多的实体出现在问题中,该子图对应的答案候选就越有可能是问题对应的答案。

    4. 基于向量表示的答案排序

    基于向量表示的方法[21,22]将输人问题Q和答案候选A分别表示为两个向量f(Q)和g(A),并在向量空间上计算Q和A的距离S(Q,T),用于对不同的答案候选进行打分。
    在这里插入图片描述
    f(Q)=WTϕ(Q)f(Q)=W^T\phi(Q)表示问题向量,g(A)=WTϕ(A)g(A)=W^T\phi (A)表示答案向量,WTRk×NW^T\in R^{k\times N}表示转化矩阵(模型参数),用于将问题Q和答案候选A转化为对应的向量表示,k表示问题或答案向量的维数,该参数在训练模型之前预先设定好,N=NWord+NEntity+NpredN=N_{Word}+N_{Entity}+N_{pred}表示全部单词、知识库实体和知识库谓词的总数,W中的第i行表示某个元素(单词、知识库实体或知识库谓词)对应的向量表示。ϕ(Q)RN\phi(Q)\in R^N表示问题对应的稀疏向量,该向量中每个位置的值表示对应的单词是否在Q中出现:出现设置为该词在Q中出现的次数(或者1),否则设置为0. ϕ(A)RN\phi(A)\in R^N表示答案对应的稀疏向量,该向量可以采用如下三种方式表示:

    • 单一实体表示法。该方法将ϕ(A)\phi(A)中答案候选实体A对应位置的值设定为1,其他都是0.
    • 路径表示法。该方法将ϕ(A)\phi(A)中问题实体、答案候选实体以及连接问题实体和答案候选实体的谓词对应位置上的值设定为1,其他都是0.
    • 子图表示法。该方法除了使ϕ(A)\phi(A)包含路径表示法对应的信息外,还将知识图谱中和答案候选实体A直接相连的实体对应位置上的值设定为1.

    上述三种不同的向量表示对应了答案候选在结构知识库中的上下文信息的不断增加,该上下文信息和输入问题能够匹配上的越多,那么该答案候选就越可能是正确答案。

    给定训练数据D={(Qi,Ai)}i=1DD=\{(Q_i,A_i)\}_{i=1}^{|D|}该类问答方法通过最小化下述基于Margin的损失函数来学习模型中需要的参数(如上面的转化矩阵):
    在这里插入图片描述
    其中,(Qi,Ai)(Q_i,A_i)表示训练数据中的一个问题及其对应的正确答案,Aˉ\bar{A}表示QiQ_i对应的一个错误答案。该损失函数表达的含义是:问题QiQ_i和正确答案AiA_i之间的向量距离应该比QiQ_i和任意一个错误答案Aˉ\bar{A}之间的向量距离至少差m,m是预先设定好
    的Margin.

    Dong等人在上述工作的基础上[23],从三个不同的维度生成三个不同的答案向量,用于问题答案匹配:
    在这里插入图片描述
    g1(A)=Wpathϕpath(A)g_1(A)=W_{path}\phi_{path}(A)表示A对应的答案路径(answer path)向量,每个答案候选对应的路径由答案候选实体和问题实体之间的谓词路径表示;g2(A)=Wcontextϕcontext(A)g_2(A)=W_{context}\phi_{context}(A)表示A对应的答案上下文(answer context)向量,每个答案候选对应的上下文由和该答案候选、答案路径之间相连的全部实体和谓词组成;g3(A)=Wtypeϕtype(A)g_3(A)=W_{type}\phi_{type}(A)表示A对应的类型(answer type)向量,每个答案候选对应的类型由知识库提供。

    5. 基于记忆网络的答案排序

    基于记忆网络(memory networks)的问答模型[24-28]由记忆模块和问答模块两部分构成:记忆模块负责读取外部数据并将其转化为向量化的记忆单元集合;问答模块负责基于给定问题从记忆模块中存储的记忆单元集合中寻找与问题相关的信息,进而生成最终的答案。按照是否支持推理机制,记忆网络又分为单层(single-layer)和多层(multi-layter)记忆网络两类。

    从单层记忆网络开始介绍,在单层记忆网络中,记忆模块负责读取一组输入数据{xi}i=1N\{x_i\}_{i=1}^{N}并将每个输入数据xix_i转化为对应的输入记忆单元向量mim_i和输出记忆单元向量cic_i。(输入数据可以理解为知识图谱中的三元组的集合;也可以理解为段落上下文中的句子集合)。
    在这里插入图片描述
    每个xi=xi,1,...,xi,nx_i=x_{i,1},...,x_{i,n}表示第i个输入句子,xi,jx_{i,j}表示xix_i中的第j个单词。A和C分别表示一个Rd×VR^{d\times V}的参数矩阵(词嵌入矩阵),V表示记忆网络使用词汇表中包含的单词总数,d表示记忆单元向量的维数。词汇表中每个单词x对应一个整数标识符/索引IDx[1,V]ID_x\in [1,V],不同单词对应的标识符不同,这样就可以将每个单词x表示为一个稀疏向量vxRV×1v_x\in R^{V\times 1},该向量在维度等于IDxID_x(单词x在词汇表中的位置索引)上的值是1,其他维度上的值是0(one-hot表示).这里,将每个输入数据分别表示为一个输入记忆单元和一个输出记忆单元的目的是将信息查找过程和答案生成过程分开对待。

    在记忆模块完成对输入数据的读取和存储后,给定输入问题Q,神经网络模块通过如下步骤从记忆模块中搜寻问题对应/相关的信息并生成答案(工作流程示意图如下图所示)。

    • 问题表示,将问题Q=Q1,...,QlQ=Q_1,...,Q_l转化为对应的向量表示u:
      在这里插入图片描述
      和A、C类似,B表示一个Rd×VR^{d\times V}的参数矩阵(词嵌入矩阵),vQjv_{Q_j}表示单词QjQ_j对应的稀疏向量(one-hot)。
    • 问题证据查找,计算u和记忆模块中每个输入记忆单元向量mim_i之间的相关度,并通过 softmax操作将该相关度(相似度得分)转化为一个概率pip_i(其实就是一个attention机制,输入问题的向量表示作为query,每个输入记忆单元向量作为key,query和每个key一次做计算(最简单的方式是直接做内积,如下式所示)得到分数,在通过softmax得到每个记忆单元对应的权重(概率)):
      在这里插入图片描述
      这步骤对应信息查找过程:从全部记忆单元中查找和问题相关的证据/信息。
    • 输出向量生成,基于问题在输入记忆单元上的相关度概率/权重分布计算输出向量表示o:
      在这里插入图片描述
      该步骤对应答案生成过程:基于问题在全部输入记忆单元上的相关度概率/权重分布,在输出记忆单元上计算一个输出向量用于答案生成。(每个输出记忆单元向量作为value,和对应的权重进行加权求和,得到一个输出向量)
    • 答案生成,假设每个问题对应的答案一定来自输入数据{xi}i=1N\{x_i\}_{i=1}^{N},通过在词汇表上进行 softmax 操作就可以得到最终的答案输出:
      在这里插入图片描述
      W表示一个RV×dR^{V\times d}的参数矩阵,每行向量对应一个答案候选。

    下图给出单层记忆网络的工作流程示意图。单层记忆网络对记忆单元仅进行一次查找操作,因此适用于回答单关系的问题。对于更复杂的多关系问题,则需要进行多次信息查找才能达到“推理”的效果。这就是多层记忆网络。
    在这里插入图片描述
    基于单层记忆网络的问答模型对记忆单元中存储的数据仅进行了一次查找操作,因此只适用于回答单关系的问题。对于更复杂的多关系问题,需要对知识数据进行多次查找才能达到推理效果,这就对应了多层记忆网络。

    基于多层记忆网络的问答模型通过迭代的方式执行多次单层(记忆)神经网络:在第k次输出向量表示oko_k生成后,对第k+1次输入问题向量表示uk+1u^{k+1}进行更新:
    在这里插入图片描述
    上面这个向量相加相当于使用上一次从记忆模块中查找出来的信息更新问题(表示),从而从记忆模块中找到更多的证据/信息用来完成推理。在最后一次迭代完成后,答案输出是:
    在这里插入图片描述
    下图给出基于多层记忆网络的问答模型工作流程示意图:
    在这里插入图片描述
    Miller等人提出基于“键值记忆网络”(key-valye memory network)的问答模型[29] (如下图所示).和记忆网络相比,键值记忆网络最大的特点是将外部输人数据分为“键”和“值”两部分{(ki,vi)}i=1N\{(k_i,v_i)\}_{i=1}^N,拿知识图谱为例,每个三元组{si,pi,oi}\{s_i,p_i,o_i\}中主语实体和谓词si+pis_i+p_i对应kik_i,宾语实体oio_i对应viv_i.输入记忆单元向量mim_i和输出记忆单元向量cic_i不再基于同一个输入数据计算,而是分别基于kik_iviv_i计算:
    在这里插入图片描述
    如何定义kik_iviv_i的向量表示Φ(·)有很多种不同的方法,这里就不再做过多介绍。
    在这里插入图片描述

    总结

    这两篇博客系统介绍了两类知识图谱问答方法:基于语义分析的方法和基于答案排序的方法。

    在基于语义分析的方法中,将自然语言转化成机器能够理解和执行的语义表示是最核心的任务。由于带有语义标注的数据集非常有限,再加上现有知识图谱的覆盖度还很低,目前的语义分析系统还无法在开放领域数据上取得令人满意的效果。因此,如何有效地构建带有语义分析的数据集,以及如何自动抽取高质量、高覆盖度的知识图谱,成为语义分析研究的关键。

    在基于答案排序的方法中,计算输入问题和答案实体候选之间的相关性是最核心的任务。采用<问题,答案>对数据集直接训练该类问答模型能够在现有数据集上取得很好的效果,但这种方法需要较强的约束条件,并不像语义分析方法那样具有普适性。此外,在深度学习快速发展的今天,大多数知识图谱问答方法都采用神经网络进行黑箱式模型训练。如何使模型具有可解释性,如何在模型中加入推理机制,以及如何将神经网络/深度学习模型和已有语言学知识相结合,是目前的一个研究热点。

    参考文献

    [1] Mark Steedman.Surface Structure and Interpretation[M].The MIT Press,1996.
    [2]Mark Steedman.The Syntactic Process[M].The MIT Press,2000.
    [3]Luke Zettlemoyer,Michael Collins.Learning to Map Sentences to Logical Form:Structured Classification with Probabilistic Categorial
    Grammars[C].UAI,2005.
    [4]Tom Kwiatkowski,Luke Zettlemoyer,Sharon Goldwater,etc.Lexical Generalization in CCG Grammar Induction for Semantic Parsing[C].
    EMNLP,2011.
    [5]Yue Zhang,Stephen Clark.Shift-Reduce CCG Parsing[C].ACL,2011.
    [6]Dipendra K.Misra,Yoav Artzi.Neural Shift-Reduce CCG Semantic Parsing[C].ACL,2016.
    [7]Wenduan Xu.LSTM Shift-Reduce CCG Parsing[C].EMNLP,2016.
    [8]Yoav Artzi,Kenton Lee,Luke Zettlemoyer.Broad-coverage CCG Semantic Parsing with AMR[C].EMNLP,2015.
    [9]Siva Reddy,Mirella Lapata,Mark Steedman.Large-scale Semantic Parsing without Question-Answer Pairs[C].TACL,2014.
    [10]Junwei Bao,Nan Duan,Ming Zhou,etc.Knowledge-Based Question Answering as Machine Translation[C].ACL,2014.
    [11]Yuk Wah Wong,Raymond J.Mooney.Learning Synchronous Grammars for Semantic Parsing with Lambda Calculus[C].ACL,2007.
    [12]Junhui Li,Muhua Zhu,Wei Lu,etc.Improving Semantic Parsing with Enriched Synchronous Context-Free Grammar[C].EMNLP,2015.
    [13]Jonathan Berant,Andrew Chou,Roy Frostig,Percy Liang.Semantic Parsing on Freebase from Question-Answer Pairs[C].EMNLP,2013.
    [14]Xuchen Yao,Benjamin Van Durme.Information extraction over Structured Data:Question Answering with Freebase[C].ACL,2014.
    [15]Xuchen Yao. Lean Question Answering over Freebase from Scratch [C].NAACL,2015.
    [16]Jonathan Berant,Percy Liang.Semantic Parsing via Paraphrasing[C].ACL,2014.
    [17]Wen-tau Yih,Ming-Wei Chang,Xiaodong He.etc.Semantic Parsing via Staged Query Graph Generation:Question Answering with
    Knowledge Base[C].ACL,2015.
    [18] Jianfeng Gao,Patrick Pantel,Michael Gamon,etc.Modeling interestingness with deep neural networks[C].EMNLP,2014.
    [19] Yelong Shen,Xiaodong He,Jianfeng Gao,etc.A Latent Semantic Model with Convolutional-Pooling Structure for Information Re-
    trieval[C].CIKM,2014.
    [20] Yelong Shen,Xiaodong He,Jianfeng Gao,etc.Learning Semantic Representations using Convolutional Neural Networks for Web
    Search[C].WWW,2014.
    [21]Antoine Bordes,Jason Weston,Sumit Chopra.Question Answering with Subgraph Embeddings[C].EMNLP,2014.
    [22]Antoine Bordes,Jason Weston,Nicolas Usunier,etc.Open Question Answering with Weakly Supervised Embedding Models[C].ECML-
    PKDD,2014.
    [23]Li Dong,Furu Wei,Ming Zhou,etc.Question Answering over Freebase with Multi-Column Convolutional Neural Networks[C].ACL,2015.
    [24]Jason Weston,Sumit Chopra,Antoine Bordes.Memory Networks[C].ICLR,2015.
    [25]Antoine Bordes,Nicolas Usunier,Sumit Chopra,etc.Large-scale Simple Question Answering with Memory Network[C].ICLR,2015.
    [26]Sarthak Jai.Question Answering over Knowledge Base using Factual Memory Networks[C].NAACL,2015.
    [27] Jason Weston,Antoine Bordes,Sumit Chopra,etc.Towards AI Complete Question Answering:A Set of Prerequisite Toy Tasks
    [C].arXiv,2015.
    [28]S.Sukhbaatar,A.Szlam,J.Weston,etc.End-To-End Memory Networks[C].NIPS,2015.
    [29]Alexander Miller,Adam Fisch,Jesse Dodge,etc.Key-Value Memory Networks for Directly Reading Documents[C].arXiv,2016.

    展开全文
  • 本篇博客主要基于微软亚洲研究院段楠老师的《智能问答》第四章 知识图谱问答 进行整理。 知识图谱问答,又称 Knowledge-based QA 或 KBQA,是一种基于结构化知识库(即知识图谱)的智能问答方法。给定自然语言问题,...

    本篇博客主要基于微软亚洲研究院段楠老师的《智能问答》第四章 知识图谱问答 进行整理。

    知识图谱问答,又称 Knowledge-based QA 或 KBQA,是一种基于结构化知识库(即知识图谱)的智能问答方法。给定自然语言问题,该类方法基于知识图对问题进行理解,并根据问题理解的结果从知识图谱中查找或推理出问题对应的答案。

    知识图谱问答分为**基于语义分析的方法(Semantic Parser)和基于答案排序的方法(Information Retrieval)**两类。基于语义分析的方法是首先将输入问题转化为知识图谱能够理解和执行的结构化查询(即语义表示),然后在知识图谱上直接执行该结构化查询得到问题对应的答案。基于答案排序的方法是首先基于输入问题从知识图谱中快速找到少量答案候选,然后采用排序模型对不同答案候选进行打分,并选择得分最高的答案候选集合作为问题对应的答案。

    基于语义分析的方法(Semantic Parser)

    给定知识图谱和自然语言问题,基于语义分析的知识图谱问答方法通过如下两步完成问答任务:①使用语义分析器将问题转化为机器能够理解和执行的语义表示。②使用该语义表示作为结构化查询语句查询知识图谱,并将查询得到的实体集合作为答案返回。由于语义表示结果的正确与否直接决定答案的对错,因此该类问答方法的核心任务就落在语义分析任务上,即如何生成自然语言问题对应的语义表示。

    这里把语义分析方法分为基于文法的语义分析方法和基于神经网络的语义分析方法两类。

    基于文法的语义分析方法通过三步完成语义分析任务:第一步,从带有语义表示的标注数据中抽取符合特定文法的语义分析规则集合。该集合中每条规则至少包含自然语言和语义表示两部分对应的信息;第二步,采用基于动态规划的解析算法(例如CYK 算法和 ShiftReduce算法)产生输入句子对应的语义表示候选集合。该类算法按照自底向上(CYK)或自左向右(Shift-Reduce)的方式,合并相邻两个短语对应的语义表示生成较长短语对应的语义表示,直至覆盖全句时终止;第三步,基于标注数据训练排序模型,对不同语义表示候选进行打分,并返回得分最高的语义表示候选作为结果。

    基于神经网络的语义分析方法将语义分析任务看做是一个端到端的序列生成任务,并采用类似神经机器翻译(NMT)的方法,完成从自然语言(源语言)到语义表示(目标语言)的转换任务。

    接下来将介绍四种不同的语义分析方法,前三种方法分别基于三种不同的文法:CCG、SCFG和DCS,最后一种方法基于NMT技术。

    终结符与非终结符:
    终结符,通俗的说就是不能单独出现在推导式左边的符号,也就是说终结符不能再进行推导/分解。不是终结符的都是非终结符。非终结符可理解为一个可拆分元素,而终结符是不可拆分的最小元素。

    1 基于CCG的语义分析

    组合范畴文法(combinatory categorial grammar,CCG)[1,2]是一种类型驱动的文法。本小节将从三个方面介绍基于CCG的语义分析方法,包括 CCG语义分析规则、CCG语义分析算法以及CCG语义分析的模型训练。

    CCG语义分析规则由词汇部分、句法类型和语义类型三部分信息构成。这里使用一个例子说明上述三部分信息的含义和作用:
    在这里插入图片描述
    border是CCG语义分析规则中的词汇部分。该部分信息对应一个自然语言单词或短语,用于在语义分析中匹配输入的自然语言句子。

    (S\NP)/NP是CCG语义分析规则中的句法类型。该部分信息由五种句法类型(S、N、NP、ADJ和PP)和两种连接符(/和\)组成。其中,S表示句子,N表示名词,NP 表示名词短语,ADJ表示形容词,PP表示介词短语,/和\用于判断相邻两个句子片段是否能够合并以及如何进行合并。例如,(S\NP)/NP 表示当前片段需要先从右边(由/指示)合并一个类型为NP的短语,再从左边(由\指示)合并另一个类型为NP的短语,才能完成分析任务并生成全句对应的分析结果。

    λx.λy.Border(x,y)\lambda x.\lambda y.Border(x,y)是CCG语义分析规则中的语义类型。该部分信息通常使用λ\lambda-算子表示词汇部分对应的语义表示。

    Zettlemoyer和 Collins提出一种基于统计的CCG语义分析规则获取方法[3]。该方法首先定义函数 GENLEX(S,MR),该函数负责返回从句子S及对应语义表示MR中抽取出来的 CCG 语义分析规则候选集合:{x:=yxW(S),yC(MR)}\{x := y|x\in W(S),y\in C(MR)\}.其中,W(S)表示S中包含的连续单词序列集合,C(MR)表示从MR 中抽取出来的语义表示片段集合。如果W(S)中包含n 个元素,C(MR)中包含m个元素,那么抽取出来的CCG语义分析规则候选数目就是n×mn\times m个。这里,下表给出C(MR)的从MR中抽取类型部分用到的全部十条规则:
    在这里插入图片描述
    例如,给定句子 Utah borders Idaho 及语义表示 borders(utah,idaho),根据上表中的规则能够抽取得到如下类型部分:
    在这里插入图片描述
    由于上述语义表示并未包含单个参数部分(双参数谓词),因此规则2、3、6、9、10并未被使用。

    在组合x:=y的过程中,由于x和y是通过枚举方式进行配对的,因此会产生大量不合理的规则候选。针对上述问题,该工作采用一种迭代优化方法对规则候选集合进行过滤和选择,该方法通过在标注数据上循环执行PARSE函数和ESTIMATE 函数 T轮完成。

    • PARSE(Si,MRi)PARSE(S_i,MR_i)函数基于规则集合λ=Λ0GENLEX(Si,MRi)\lambda = \Lambda_0 \cup GENLEX(S_i,MR_i)θˉt1\bar{\theta}^{t-1}SiS_i进行语义分析,并返回能够正确生成MRiMR_i所用到的规则子集λi\lambda_i。其中,Λ0\Lambda_0表示一个少量高质量的初始CCG语义分析规则集合,θˉt1\bar{\theta}^{t-1}表示第t-1轮训练得到的规则权重向量。当对标注数据集中每个(Si,MRi)(S_i,MR_i)标注对都完成上述操作后,更新生成第t轮迭代对应的规则集合Λt=Λ0(i=1nλi)\Lambda_t = \Lambda_0 \cup (\bigcup\limits_{i=1}^n\lambda_i)
    • ESTIMATE(Λt,θˉt1,D)ESTIMATE(\Lambda_t,\bar{\theta}^{t-1},D)函数基于Λt\Lambda_tθˉt1\bar{\theta}^{t-1},使用随机梯度下降(SGD)算法在标注数据上最大化下述似然函数O(θˉ)O(\bar{\theta}),从而更新生成第t轮的权重向量θˉt\bar{\theta}^{t}.
      在这里插入图片描述
      T表示能够正确生成MRiMR_i的CCG 语义分析树,P(MRi,TSi;θˉ)P(MR_i,T|S_i;\bar{\theta})可以进一步分解为:
      在这里插入图片描述
      fˉ(MRi,T,Si)\bar{f}(MR_i,T,S_i)函数将每个(MRi,T,Si)(MR_i,T,S_i)三元组映射到一个特征向量。 该方法将CCG语义规则被用到的次数作为特征,因此θˉ\bar{\theta}中对应位置的值可以看成是该特征的权重。当T轮训练迭代完成后,返回ΛT\Lambda_TθˉT\bar{\theta}^T作为最终的CCG语义分析规则集合。

    CCG语义分析算法采用自底向上的CYK算法,对输人句子进行语义分析。该过程中,下述四类基本操作用于完成相邻片段的语义表示合并任务。

    1. 应用(application)操作。该操作包含下述两条合并规则:
      在这里插入图片描述
      第一条规则表示如果左右两个相邻短语片段对应的CCG 类型分别是B:g和A\B:f,那么二者能够进行合并,合并后短语对应的CCG类型为A:f(g).第二条规则与第一条规则类似,只是方向不同;(:前是句法类型,后是语义类型)

    2. 组合(composition)操作。该操作包含下述两条合并规则:
      在这里插入图片描述
      和应用操作不同,组合操作合并的是两个函数类型语义表示,而应用操作合并的是一个函数类型语义表示和一个实体类型语义表示;

    3. 类型转化(type shifting)操作。该操作通过在语义分析过程中添加或减少信息来保证语义分析能够顺利完成。例如,句子 flights boston to new york(从波士顿到纽约的航班)省略了单词from,其省略的语义信息可以通过 type shifting方式扩展生成回来。
      在这里插入图片描述
      上例中使用的type shifting 规则是NP:cNN:λf.λx.f(x)p(x,c)NP:c \Longrightarrow N\N:\lambda f.\lambda x.f(x) \land p(x,c)。句子American Airlines from New York 对应的CCG语义分析过程如下:
      在这里插入图片描述
      上例中使用的type shifting 规则是KaTeX parse error: Undefined control sequence: \lambdax at position 27: …rightarrow N:f(\̲l̲a̲m̲b̲d̲a̲x̲.true).该规则将函数f(x)从短语 from New York 对应的语义表示中移除了。

    4. 并列(coordination)操作。该操作采用交操作或并操作,对满足并列关系的相邻短语片段进行合并。

    本小节介绍了一种最基本的 CCG语义分析方法[3]。该研究方向在近年来出现很多相关工作,分别从不同角度推进基于CCG的语义分析研究。Kwiatkowski等人提出改进的规则抽取方法用于抽取规则模板[4],能够提升CCG句法分析器的鲁棒性。Zhang、Clark 等人使用基于 Shift-Reduce 的语义分析算法[5-7],能够提升CCG语义分析器的处理速度。Artzi 等人使用AMR(abstract meaning representation)替换λ\lambda-算子表示 CCG语义分析规则中的语义类型[8].Reddy等人基于CCG分析结果提出一种基于图的语义分方法[10],用于知识图谱问答任务。

    2 基于SCFG的语义分析

    基于同步上下文无关文法(synchronous context-free grammar, SCFG)的语义分析规则具有如下形式:
    Xα,β X \rightarrow \langle \alpha,\beta\rangle
    α\alpha表示自然语言部分,β\beta表示α\alpha对应的语义表示部分,X表示当前规则的类型和α,β\alpha,\beta均允许包含非终结符,并且满足如下三个条件:①α\alphaβ\beta中的非终结符数目相同②α\alpha中每个非终结符对应一个规则类型③α\alphaβ\beta中的非终结符存在一一对应的关系。下面通过四条 SCFG语义分析规则实例进行具体说明。

    1. PERSON \rightarrow <Tom Hanks,/m/0bxtg>。 该规则将自然语言短语 Tom Hanks 映射到语义表示/m/0bxtg,并指明规则类型是 PERSON.
    2. FILM\rightarrow <movies,λx.Type(x,Film)\lambda x.Type(x,Film)>。该规则将自然语言短语 movies 映射到语义表示λx.Type(x,Film)\lambda x.Type(x,Film),并指明规则类型是 FILM.
    3. FILM\rightarrow<starred by PERSON1PERSON_1,λx.StarredBy(x,#1)\lambda x.StarredBy(x,\#_1)>.该规则将自然语言短语 starred by PERSON1PERSON_1映射到语义表示λx.StarredBy(x,#1)\lambda x.StarredBy(x,\#1)并指明规则类型是FILM. PERSON1PERSON_1#1\#_1是(对应的)非终结符,脚注表示非终结符之间的对应关系。在使用SCFG规则进行语义分析的过程中,如果某个规则的自然语言部分包含一个非终结符并且该非终结符(的类型)和另一个规则的类型相同,那么这两个规则可以进行合并(比如规则3和规则1)。
    4. FILM \rightarrow <FILM1FILM2FILM_1FILM_2,#1#2\#_1 \land \#2>。给定两个相邻的 FILM类型非终结符(规则2、3的自然语言部分),该规则通过交操作(\land)对二者对应的语义表示进行合并(规则2、3的语义表示部分)。

    给定上述四条规则,这里用一个简单的例子介绍基于SCFG的语义分析是如何工作的。给定自然语言问题 movies starred by Tom Hanks(Tom Hanks主演的电影),首先使用规则1 和规则2将问题中的短语 Tom Hanks 和 movies分别映射到语义表示/m/0bxtg 和λx.Type(x,Film)\lambda x.Type(x,Film)。由于规则1的类型是 PERSON,规则3中自然语言部分包含相同类型(PERSON类型)的非终结符,因此可以对规则1和规则3进行合并,生成短语 starred by Tom Hanks对应的语义表示λx.StarredBy(x,/m/0bxtg)\lambda x.StarredBy(x,/m/0bxtg)。在这个合并过程中,使用规则1中(自然语言部分)Tom Hanks对规则3中(自然语言部分)非终结符PERSON1PERSON_1进行替换,使用规则1中(语义表示部分)/m/0bxtg对规则3中(语义表示部分)非终结符#1\#_1进行替换。最后,规则4通过合并 movies和starred by Tom Hanks 的语义表示,生成整个问题的语义表示λx.Type(x,Film)StarredBy(x,/m/0bxtg)\lambda x.Type(x,Film) \land StarredBy(x,/m/0bxtg).下图给出上述过程的图形化描述:
    在这里插入图片描述
    和CCG语义分析方法类型一样,SCFG 语义分析方法也包含下述三个任务:SCFG语义分析规则获取、SCFG语义分析的算法以及SCFG 语义分析的模型训练。

    常见的规则获取方法分为如下两类:

    第一类方法基于知识图谱(结构化)和文本形式的语料(非结构化)抽取短语级SCFG语义分析规则。首先,基于给定知识图谱中的一个谓词p和所有满足该谓词的实体对,对语料中的句子进行实体回标,并保留至少包含一个实体对的句子。然后,对每个保留下来的句子,将回标实体对之间的上下文c看作是谓词p对应的自然语言表示。该过程基于如下假设:如果满足谓词p的两个实体同时出现在一个句子中,那么该句子的上下文c很有可能在描述该谓词p.例如,给定谓词 FounderOf 和 满足该谓词的一个实体对<Bill Gates,Microsoft>,首先对句子 Bill Gates is the founder of Microsoft 进行实体回标,并抽取出谓词 FounderOf 对应的上下文短语(自然语言表示)is the founder of.然后,根据谓词和上下文短语的对应关系以及回标实体的类型,生成如下四条SCFG语义分析规则。

    1. PERSON \rightarrow <Bill Gates,Bill Gates>
    2. ORGANIZATION \rightarrow <Microsoft,Microsoft>
    3. PERSON \rightarrow <is the founder of ORGANIZATION1ORGANIZATION_1,λx.FounderOf(x,#1)\lambda x.FounderOf(x,\#_1)>
    4. ORGANIZATION \rightarrow <PERSON1PERSON_1 is the founder of,λx.FounderOf(#1,x)\lambda x.FounderOf(\#_1,x)>

    最后,基于全部抽取结果对应的统计信息,对每个(c,p)对进行置信度打分,并基于置信度较高的{(ci,pi)}\{(c_i,p_i)\}集合生成带有权重信息的SCFG语义分析规则。

    第二种方式基于搜索引擎查询日志抽取句子级 SCFG 语义分析规则。首先,使用知识图谱对日志中的查询问题进行实体链接,并保留仅包含一个实体(提及)的查询问题。然后,将保留下来问题中的实体替换为对应的非终结符(即该实体在知识图谱中的类型,如把Bill Gates替换为Person),生成句子级问题模板。最后,对高频问题模板进行人工谓词标注,得到句子级SCFG语义分析规则。例如,给定查询问题 who is founder of Microsoft,按照上述过程能够抽取出来的SCFG规则是:PERSON \rightarrow <who is founder of ORGANIZATION1ORGANIZATION_1,λx.FounderOf(x,#1)\lambda x.FounderOf(x,\#_1)>.

    上述两种规则抽取方法各具特点:方法一通过自动的方式进行规则抽取,抽取结果是短语粒度的规则。从不同句子中抽取出来的SCFG规则能够通过组合的方式对未见过的问句进行语义分析,因此基于该类规则构建的语义分析器鲁棒性更好。但由于该类方法抽取得到的规则中包含噪音并且数目通常很大,因此无法直接进行人工标注;方法二通过自动加人工的方式进行规则抽取,抽取结果是句子粒度的规则。每个规则都来自于一个完整的查询问题,一旦和输入问题匹配成功,对应生成的语义表示质量很高,因此在实际产品中这类规则的使用最多。不过,该类规则一旦和输入问题匹配失败,整个语义分析就失败了。

    和基于CCG的语义分析算法相同,基于 SCFG的语义分析算法采用自底向上的 CYK 算法进行语义分析,并将每个SCFG语义分析树对应的模型得分表示成一组特征的加权求和。不同特征的权重通过在标注数据上使用梯度下降算法得到[10-12]

    3. 基于DCS的语义分析

    依存组合语义(dependency-based compositional semantics,DCS)[13]是由斯坦福提出的一种语义表示方法。

    DCS拥有和λ\lambda-算子类似的表示能力,但该形式语言的定义更贴近知识图谱的存储结构。关于DCS相关的部分概念(包括连接、交、并、否定和特殊的高阶函数操作)再上一篇博客中已经介绍过了,这里再介绍一种特殊的操作--桥接。

    桥接(bridging)操作把两个独立的语义表示片段连接起来。在语义分析过程中,句子中不同片段对应的语义表示可能无法直接进行合并。为了保证语义分析能够尽量完成,需要尽可能连接这些离散的语义表示片段,这就是引入桥接操作的目的。当然,并不是任意两个语义表示片段都能够通过桥接操作建立联系,对于那些在知识图谱中存在谓词关联并满足上述类型约束的语义表示片段,可以采用桥接操作将二者连接起来。该操作主要针对语义分析中经常遇到的表达省略问题。DCS采用三种桥接技术:

    • 第一种桥接操作作用于一个一元语义表示u(实体),将其转化为类型为t的语义表示b.u。该操作中谓词b需要满足的条件是:其右端的宾语实体类型必须是t.
    • 第二种桥接操作作用于两个类型分别为t1t_1t2t_2的一元语义表示u1u_1u2u_2,将其转化为类型为t1t_1的语义表示u1b.u2u_1\sqcap b.u_2。该操作中谓词b需要满足的条件是:其左右两端的两个实体类型必须是t1t_1t2t_2,这是因为只有类型相同的两个一元语义表示才能够通过交操作(\sqcap)进行合并。
    • 第三种桥接操作作用于两个语义表示b1.b2.ub_1.b_2.u'和u,将其转化为语义表示b1.(b2.ub.u)b_1.(b_2.u'\sqcap b.u).该操作需要满足的条件是:①谓词b左右两端的两个实体类型必须是t和t1t_1②u的类型必须是t ;③谓词b2b_2的类型必须是(,t1)(*,t_1)、*表示 u’的类型。下图给出采用桥接操作进行语义分析的例子。
      在这里插入图片描述
      语义表示 Type.University \sqcapEducation.BarackObama中的谓词Education 在输入问题 Which college did Obama go to?中并没有显示的对应。由于 Type.University 对应的类型是 University,BarackObama 对应的类型是 Person,而谓词 Education 左右两端的实体类型分别为Person 和 University,可以应用第二类桥接操作引入谓词 Education 对 Type.University 和 BarackObama 进行合并,生成类型为University 的语义表示。

    与基于CCG和SCFG的语义分析算法类似,基于DCS的语义分析算法采用自底向上的CYK算法生成输入问题对应的语义表示候选集合。

    基于DCS的语义分析模型采用对数线性形式对不同语义表示候选进行打分:
    在这里插入图片描述
    该模型的训练采用弱监督(weak supervision)的方式。该方法基于训练数据中每个问题的答案从该问题对应的语义表示候选中进行正例选择,即保证每个正例(语义表示)都能基于知识图谱推导出正确答案。然后,基于该类标注出来的正例和余下的负例进行特征权重更新,使得每个问题的正例语义表示候选对应的得分尽可能比负例候选对应的得分高。

    DCS语义分析器用到的特征包含下述几类:对齐特征,包括自然语言短语r1r_1在抽取中对应的实体对数目 F(r1)F(r_1)、谓词r2r_2在知识库中对应的实体对数目F(r2)F(r_2)F(r1)F(r_1)F(r2)F(r_2)交集中包含的实体对数目;词汇特征,表示r1r_1r2r_2作为对齐对的可能性;文本相似度特征,表示r1r_1是否是r2r_2的前缀、子集、后缀或者完全相等;跳词特征,DCS 允许语义分析过程中跳过一些停用词或系统无法识别的单词或短语。跳词特征用来表示生成某个语义表示究竟忽略了多少问题中出现的单词。直观上,该特征值越大,说明对应的语义表示候选越不可靠,因为它忽略了问题中出现的很多单词;问题词特征,该特征基于规则方式,将一些经常出现的问题词短语映射到对应的知识库谓词上面去。例如,where 可以映射到 Type.Location上去、how many可以映射到Count 上去等;操作特征,该特征表示在生成当前语义表示候选过程中,使用到的交操作、合并操作和桥接操作的数目。

    总体来说,基于CCG、SCFG 和DCS 的语义表示方法具有相同的系统模块,包括语义规则的抽取、语义分析算法和语义分析模型训练。三种方法最大的不同在于使用的形式语言表示各具特点。这三类方法都需要借助特定的文法作为桥梁连接自然语言和语义表示。

    4. 基于NMT(神经机器翻译)的语义分析

    如果把自然语言对应的语义表示看成是一种特殊的语言,那么语义分析任务可以看成是一个翻译任务:将自然语言序列(源语言)翻译到对应的语义表示序列(目标语言)。

    本小节介绍基于神经机器翻译(neural machine translation,NMT)技术的语义分析方法。给定自然语言问题q=x1,...,xqq=x_1,...,x_{|q|},基于 NMT的语义分析方法使用“编码器-解码器”框架将q转化为对应的语义表示a=y1,...,yaa=y_1,...,y_{|a|}:
    在这里插入图片描述
    yty_t表示第t时刻生成的语义表示单元,y<t=y1,...,yt1y_{<t}=y_1,...,y_{t-1}表示到第t时刻前已经生成的语义表示序列,P(yty<t,q)P(y_t|y_{<t},q)表示基于问题q和y<ty_{<t}生成yty_t的概率。编码器(encoder)负责将输入问题q转化为向量表示,解码器(decoder)负责将q的向量表示转化为对应的语义表示a.

    编码器采用一个 RNN 网络,将问题q中每个单词xix_i都转化为一个隐状态向量hih_i,该过程对应的数学描述如下:
    在这里插入图片描述
    上式给出基于 LSTM的编码器实现(这些式子对应LSTM单元中各种门的计算过程),xkx_k表示问题q中第k个单词,fk,ik,okf_k,i_k,o_k分别表示第k个LSTM单元对应的遗忘门、输入门和输出门,ckc_k表示第k个编码单元对应的信息,hkh_k表示xkx_k对应的隐层向量表示,Wf,Wi,Wo,W,Uf,Ui,Uo,UW_f,W_i,W_o,W,U_f,U_i,U_o,U对应不同参数矩阵。

    解码器采用另一个RNN网络,基于问题q的向量表示进行语义表示序列的生成,该过程对应的数学描述如下:
    在这里插入图片描述
    yq+ty_{|q|+t}表示输出序列a中生成的第t个符号,hq+th_{|q|+t}表示yq+ty_{|q|+t}对应的隐向量,q+t|q|+t代表隐向量表示的索引从输入端开始,cq+tc_{|q|+t}表示上下文向量,它在解码过程中根据当前已经生成的内容不断变化,其由hq+t1h_{|q|+t-1}和编码器中的全部隐向量共同决定(注意力机制,hq+t1h_{|q|+t-1}作为query,编码器中的全部隐向量作为key和value,query和key计算分数,再通过softmax转换为权重,再和value做一个加权求和,得到上下文向量。解码过程中,每一时刻的query是变化的,所以生成的上下文向量也是再不断的变化)。(下面的式子就是attention机制的计算过程)
    在这里插入图片描述
    解码器中在第t时刻输出的语义表示单元由下述方式决定:
    在这里插入图片描述
    上述操作基于hq+th_{|q|+t}WoW_o参数矩阵,使用softmax操作从词汇表中选择概率最大的单元作为第t时刻的输出。每个语义表示序列的前后端分别对应两个特殊符号,用来表示起始和结束位置。解码器一旦在某一时刻生成,则生成过程结束。

    上述过程是端到端的序列-序列(Seq-to-Seq)生成模型,该模型也是神经机器翻译的典型做法。但对于语义分析任务来说,语义表示中往往存在层次化概念(例如括号可以表示一个谓词的作用范围等),而Seq-to-Seq模型并没有任何机制保证输出(生成)序列具有层次化的特性。

    Seq-to-Tree模型对上述问题进行了改进,在该模型中,语义表示序列不是按从左到右的方式进行的(依次生成),而是按照从左向右加上自顶向下二者相结合的方式进行的。

    下图给出一个Seq-to-Tree 的具体示例。 在编码器完成问题编码后,解码器会按照逐层的方式进行语义表示序列的生成。 对于每层生成的语义表示序列,其中允许包含一个或多个非终结符,每个非终结符表示此处需要进一步解码,生成一个语义表示子序列。该解码过程一直执行到没有任何非终结符生成为止。在上述层次化生成过程中,每个非终结符对应的向量表示会被作为条件,用于生成其对应的语义表示子序列。
    在这里插入图片描述

    展开全文
  • 知识图谱问答(KBQA)利用图谱丰富的语义关联信息,能够深入理解用户问题并给出答案,近年来吸引了学术界和工业界的广泛关注。KBQA 主要任务是将自然语言问题(NLQ)通过不同方法映射到结构化的查询,并在知识图谱中...

    原文地址

    1. 背景介绍

    知识图谱问答(KBQA)利用图谱丰富的语义关联信息,能够深入理解用户问题并给出答案,近年来吸引了学术界和工业界的广泛关注。KBQA 主要任务是将自然语言问题(NLQ)通过不同方法映射到结构化的查询,并在知识图谱中获取答案。

    小蜜团队研发的知识图谱问答系统(KBQA)目前已广泛应用于电信运营商、保险、税务等领域,但是在真实的客服场景中,KBQA 在处理复杂问句上仍然面临着挑战。

    用户在咨询问题时,倾向于表达非常具体的信息,以便快速的获得答案,比较常见问句类型的有:

    1)复杂条件句:“小规模纳税人季度销售额未超过 30 万,但是要开具 5 万元的专票,需要缴纳附加税费吗?”;
    2)并列句:“介绍下移动大流量和畅享套餐”;
    3)推理型问句:“你们这最便宜的 5G 套餐是哪个?”等,

    这给 KBQA 提出了新的挑战:如何有效地利用深度学习模型规模化地处理复杂句问答?

    为了应对该问题,我们调研了 KBQA 方向最近几年的关键进展,并着重关注了含有复杂句的数据集及相关的方法。

    本文会先介绍 KBQA 主流相关数据集,然后详细介绍两类在相关数据集上的典型方法以及每种方法的代表性模型,最后我们对 Semantic Parsing + NN 的方法进行一个系统性总结,并介绍小蜜团队的 Hierarchical KB-Attention Model。

    2. 数据集简介

    随着 KBQA 技术的发展,对应的数据集从简单的单跳问答向包含复杂问题转变;问答形式从单轮问答数据集,向面向对话的多轮问答数据集转变(HotpotQA [1] 和 CSQA [2])。表1 列举问答数据集部分属性,同时介绍了相关的三个典型通用知识图谱。

    在这里插入图片描述

    2.1 WebQuestions及其衍生数据集

    WebQuestions [3] 是为了解决真实问题构造的数据集,问题来源于 Google Suggest API,答案使用 Amazon Mechanic Turk 标注生成,是目前使用最广泛的评测数据集,但该数据集有 2 点不足:

    1) 数据集中只有问答对,没有包含逻辑形式;
    2) 简单问题占比在 84%,缺乏复杂的多跳和推理型问题;

    针对第一类问题,微软基于该数据集构建了 WebquestionsSP [4],为每一个答案标注了 SPARQL 查询语句,并去除了部分有歧义、意图不明或者没有明确答案的问题。

    针对第二类问题,为了增加问题的复杂性,ComplexQuestions [5] 在 WebQuestions 基础上,引入包含类型约束、显式或者隐式的时间约束、多实体约束、聚合类约束(最值和求和)等问题,并提供逻辑形式的查询。

    2.2 QALD系列(Question Answering over Linked Data)

    QALD 是 CLEF 上的一个评测子任务,自 2011 年开始,每年举办一届,每次提供若干训练集和测试集,其中复杂问题占比约 38% [6]。

    该数据集不仅包括多个关系和多个实体,如:“Which buildings in art deco style did Shreve, Lamb and Harmon design?”;还包括含有时间、比较级、最高级和推理类的问题,如:“How old was Steve Jobs’s sister when she first met him?”[7]。

    2.3 Large-Scale Complex Question Answering Dataset (LcQuAD)

    Trivedi [8] 等人在 2017 年公布了一个针对 DBpedia 的复杂问题数据集,该数据集中简单的单跳问题占比 18%,典型的问句形式如:“What are the mascots of the teams participating in the turkish handball super league?”。

    该数据集的构建,先利用一部分 SPARQL 模板,一些种子实体和部分关联属性通过 DBpedia 生成具体的 SPARQL,然后再利用定义好的问句模板半自动利用 SPARQL 生成问句,最后通过众包形成最后的标注问题。

    Dubey 等人也使用同样的方法,构建了一个数据量更大更多样的数据集 LcQuAD 2.0 [9]。

    3. KBQA核心方法介绍

    随着数据集的演变和 KBQA 技术的发展,我们认为 KBQA 当前主要面临两个核心挑战:

    1. 复杂问题理解难:如何更恰当地通过知识图谱建模并理解用户复杂问题,并增强方法的可解释性;
    2. 模型推理能力弱:如何减少对于人工定义模板的依赖,训练具备推理能力、泛化性强的 KBQA 深度模型;

    现在 KBQA 的主流方法主要分为两类:1) Semantic Parser + NN (SP);2) Information Retrieval (IR),因此我们总结了这两类方法中的一些经典论文在 WebQuestions 上的结果,图 1 所示, 从整体趋势来看,结合深度学习的 Semantic Parser 方法效果要略优于 IR 的方法。

    在这里插入图片描述
    从上图中我们可以看到,早期研究人员利用传统方法, 通过手工构建模板和规则的方式解析复杂问题,但是此类方法的不足在于需要较专业的语言学知识且可扩展性不强。

    随着深度学习在 NLP 领域的应用,研究人员将 QA 问题视为用户 Query 与答案的二分类或者排序问题(IR),利用不同的网络结构(CNN or Attention),并结合 KG 中不同的上下文信息来编码候选答案和 Query 的分布式表示,最后通过计算两者间的匹配度选出最终的答案。

    此类方法将语义解析问题转化为大规模可学习的匹配问题,它的优点在于减少了对于人工模板的依赖,而缺点是模型的可解释性不强且整体效果欠佳。

    与此同时,研究人员将 NN Based 的方法引入到 Semantic Parser 范式中来增强语义解析能力。早期比较主流的方法是利用查询图(Query Graph)生成过程来模拟语义解析过程,对问句进行解析。

    随着 Encoder-Decoder 模型在翻译领域的应用,也有研究人员试图将语义解析问题看做是翻译问题,通过设计不同的树形解码器来得到 Query 的语义表示。

    最近,借助 KV Memory Network 中的多个记忆槽来解决 KBQA 中多跳推理问题成为了一个趋势,它的优点在于不依赖于人工模板且可解释性较强,缺点是仍然不能很好地解析序数推理和显隐式时间约束的问题。

    同时,我们关注到最近出现了基于神经符号机 [10](Neural Symbolic Machine)的解决方案。接下来,我们将详细介绍这些主流方法。

    3.1 Semantic Parser

    基于 Semantic Parser 的方法通常将自然语言转化成中间的语义表示(Logical Forms),然后再将其转化为可以在 KG 中执行的描述性语言(如 SPARQL 语言)。

    3.1.1 传统方法

    传统的 Semantic Parser 方法主要依赖于预先定义的规则模板,或者利用监督模型对用户 Query 和语义形式化表示(如 CCG [11]、λ-DCS [12])的关系进行学习,然后对自然语言进行解析。

    这种方法需要大量的手工标注数据,可以在某些限定领域和小规模知识库(如 ATIS [13]、GeoQuery)中达到较好的效果,但是当面临 Freebase 或 DBpedia 这类大规模知识图谱的时候,往往效果欠佳。

    3.1.2 查询图方法(Query Graph)

    上述传统方法除了适用领域较窄外,大多没有利用知识图谱的信息来进行语义解析。论文 [14] 提出了一种基于 Semantic Parser 的知识图谱问答框架 STAGG (Staged Query Graph Generation)。

    该框架首先定义了一个可以直接转化为 Lambda 演算的查询图(Query Graph),然后定义了如何将 Semantic Parser 的过程演变为查询图生成过程(4 种 State+4 种 Action)。

    最后通过 LambdaRank 算法对生成的查询图进行排序,选出最佳答案。查询图生成过程一共有三个主要步骤:实体链接、属性识别和约束挂载。

    针对 Query:“Who first voiced Meg on Family Guy?”,查询图生成过程如图 2 所示:

    1. 实体链接部分采用论文 [15] 的实体链接系统得到候选实体和分数;
    2. 属性识别阶段会根据识别的实体对候选的属性进行剪枝,并采用深度卷积模型计算 Query 和属性的相似度;
    3. 约束挂载阶段会根据预定义的一些规则和匹配尝试进行最值、实体约束挂载;
    4. 最后会根据图本身特征和每一步的分数特征训练一个 LambdaRank 模型,对候选图进行排序。

    此方法有效地利用了图谱信息对语义解析空间进行了裁剪,简化了语义匹配的难度,同时结合一些人工定义的处理最高级和聚合类问题的模板,具备较强理解复杂问题的能力,是 WebQuestions 数据集上强有力的 Baseline 方法。

    而且该方法提出的 Semantic Parser 到查询图生成转化的思想也被广泛地采纳,应用到了 Semantic Parser+NN 方法中。

    在这里插入图片描述
    微软的论文 [5] 在此基础上,扩展了约束类型和算子,新增了类型约束、显式和隐式时间约束,更加系统地提出利用 Multiple Constraint Query Graph(MultiCG)来解决复杂问题的方法。

    同时也针对 WebQuestions 数据集复杂问题较少的问题,公开了一个复杂问题数据集 ComplexQuestions。该方法在 WebQuestions 和 ComplexQuestions 数据集上,表现都优于 STAGG 方法。

    IBM [16] 沿用 STAGG 的框架,针对属性识别准确率较低的问题,在属性识别阶段,将 Query 和属性名称的字和词 2 个维度进行编码,利用 Hierarchical Residual BiLSTM(HR-BiLSTM,图4所示)计算相似度,提升了属性识别关键模块的准确率,该方法在 SimpleQuestions 数据集上有着优秀的表现,很好地弥补了 Semantic Gap 问题,但是并没有在复杂问题地处理上进行过多地改善。

    在这里插入图片描述
    之前的几种方法虽然取得了不错的效果,但在 Query 与对应的 Query Graph 排序时,没有显式地将 Query Graph 利用神经网络进行泛化性强地语义特征提取,而是利用不同步骤的分数作为特征进行排序。

    论文 [17] 提出了一种 Semantic Matching Model(如图5),分别对 Query 和查询图进行编码。

    首先对去掉实体的 Query 利用双向 GRU 进行全局编码得到qtokq_{tok},然后对 Query 进行依存分析,并利用 GRU 对依存路径进行编码,收集句法和局部语义信息,得到qdepq_{dep},最后两者求和得到 query 编码KaTeX parse error: Expected '}', got 'EOF' at end of input: …{tok} + q_{dep]

    然后利用查询图中的所有属性名编码和属性 id(将属性名组合)编码,得到图的编码向量 qg=qw+qidq_g = q_w + q_{id}.最后利用 Cosine 距离计算 Query 与查询图的相似度:
    在这里插入图片描述
    该方法首次将 Query Graph 进行语义编码,计算与 Query 间的相关性程度,并以此作为匹配特征训练模型。该方法在 ComplexQuestions 数据集上的表现优于 MultiCG 的方法,但是依然不能很好地利用神经网络模型处理显隐式时间约束等复杂问题。

    在这里插入图片描述
    上述方法在对 Query Graph 进行编码的时候,因为最后使用了 Pooling,所以并没有考虑实体和关系的顺序问题,论文 [18] 提出 Tree2Seq 的方法,将 Query Graph 利用 Tree-based LSTM 进行编码,虽然并没有在 WebQuestions 等数据集上取得 SOTA 的效果,但是验证了 Query 结构信息在 QA 任务上的有效性。

    3.1.3 编码器-解码器方法(Encoder-Decoder)

    随着深度学习的方法和应用,NN-Based 的 KBQA 逐渐成为了一个重要的研究方向 [19],除了 STAGG 等方法中利用 CNN 来提升 Semantic Parser 中属性识别的效果外,基于翻译模型的 Seq2Seq 方法、Attention 机制和 Memory network 也被用来提升 KBQA 的效果。

    爱丁堡大学 [20] 提出了利用注意力机制增强的 Encoder-Decoder 模型,将 Semantic Parser 问题转化为 Seq2Seq 问题。

    该论文除了使用一个 Seq2Seq 模型来完成 Query 到 Logical Forms 的转化外,还提出了一个 Seq-to-Tree 的模型,利用层次的树形解码器捕捉 Logical Forms 的结构(如图 6 所示)。

    该文章主要贡献在于不依赖手工预定义的规则即可在领域数据集上取得 SOTA 方法,但是该方法需要大量的训练语料,因此并不适合通用知识问答数据集。
    在这里插入图片描述
    上述方法利用层次化树形结构优化了 Encoder-Decoder 模型的解码层,而论文 [21] 指出通用的序列编码器利用了词序的特征而忽略了有用的句法信息。

    该论文使用 Syntactic Graph 分别表示词序特征(Word Order),依存特征(Dependency)还有句子成分特征(Constituency),并采用 Graph-to-Seq 模型,利用图编码器将 syntactic graph 进行编码。

    然后利用 RNN 对每时刻的状态向量和通过 Attention 得到的上下文信息进行解码得到对应的 Logical Forms。尽管该方法验证了额外的句法信息引入有利于提升模型的鲁棒性,但是没有解决对于大量训练语料的依赖问题。

    3.1.4 Transition-Based 方法

    北大 [22] 提出了 State Transition-based 方法,通过定义 4 种原子操作(图7所示)和可学习的状态迁移模型,将复杂文图转化为 Semantic Query Graph(转化过程如图 8 所示)。

    该方法可以利用 BiLSTM 模型识别出多个节点(如多个实体),并用 Multi-Channel Convolutional Neural Network (MCCNN) 抽取节点间的多个关系,克服了查询图生成方法中假设只有一个主要关系和利用人工规则识别约束的缺点,具备更强的鲁棒性。

    同时该方法的状态迁移是个可学习的过程,而此前的查询图生成方法中状态迁移过程是预定义的。后续也有论文 [23] 采用 Stack-LSTM [24] 作为状态迁移模型进行语义解析工作。

    在这里插入图片描述
    在这里插入图片描述

    3.1.5 Memory Network方法

    随着机器阅读等技术的普及,近些年基于 Memory Network [25] 的方法也被用来解决复杂问题解析。

    论文 [26] 提出了 Key-Value Memory Network (KV-MemNN),此结构相比扁平的 Memory Network 结构,可以很好地存储具有复杂结构的数据(如 KG),并通过在多个记忆槽内的预测来进行浅层的多跳推理任务,最终生成相关子图路径。

    论文 [27] 用 KV-MemNN 来存储图谱中的三元组(SPO)信息,并提出了一个新的 Query Update 机制,实验验证该机制在更新时去掉 Query 中已经定位到的 Key 值,可以让模型能够更好地注意到下一步需要推理的内容。

    在答案预测阶段,论文实验了基于 Semantic Parser 和 IR 的两种方法,通过消融实验发现,利用 Semantic Parser 进行预测要明显优于 IR 方法,论文猜测因为 Semantic Parser 方法在每一步预测中都会选择最优的 key,比 IR 方法(只用最后一步的表示输出进行排序)利用了更多全局信息。

    该方法在不依赖于手工构造模板的情况下,在 WebQuestions 数据集上的效果超过了 SOTA 方法,而且该方法的框架和引入的 Stop、Query Update 机制让整个复杂问题的解析过程具备更好地解释性,我们认为这种利用 KG 进行层次化的解析方法是 KBQA 发展的趋势之一。图 9 为该方法模型结构图。

    在这里插入图片描述

    本章中,我们介绍知识图谱问答中 Semantic Parser 这类方法,分别介绍了4种具体方法:

    1)语义解析(Semantic Parser)过程转化为查询图生成问题的各类方法;
    2)仅在领域数据集适用的Encoder-Decoder模型化解析方法;
    3)基于 Transition-Based 的状态迁移可学习的解析方法;
    4)利用 KV-MemNN 进行解释性更强的深度 KBQA 模型。

    3.2 Information Retrieval

    基于搜索排序(IR)的知识图谱问答首先会确定用户 Query 中的实体提及词(Entity Mention),然后链接到 KG 中的主题实体(Topic Entity),并将与 Topic Entity 相关的子图(Subgraph)提取出来作为候选答案集合,然后分别从 Query 和候选答案中抽取特征。

    最后利用排序模型对 Query 和候选答案进行建模并预测。此类方法不需大量人工定义特征或者模板,将复杂语义解析问题转化为大规模可学习问题。

    依据特征表示技术不同,IR 方法可以分为基于特征工程的方法和基于表示学习的方法。

    3.2.1 基于特征工程的方法

    论文 [28] 是该类方法的基础模型,文章首先对问句进行句法分析,并对其依存句法分析结果提取问题词(qword)、问题焦点词(qfocus)、主题词(qtopic)和中心动词(qverb)特征,将其转化为问句特征图(Question Graph,图10)。

    然后利用 qtopic 在 KG 内提取 Subgraph,并基于此生成候选答案特征图(图11);最后将问句中的特征与候选特征图中的特征进行组合,将关联度高的特征赋予较高的权重,该权重的学习直接通过分类器来学习。

    在这里插入图片描述
    在这里插入图片描述

    3.2.2 基于表示学习的方法

    上述方法有两点不足:第一,需要自行定义并抽取特征,而且问句特征和候选答案特征组合需要进行笛卡尔乘积,特征维度过大;第二,该类方法难以处理复杂问题。为了解决这些问题,学术界利用表示学习方法,将问句和候选答案转换为同一语义空间的向量,将 KBQA 看成是问句与候选答案的表示向量进行匹配计算过程。

    1. Embedding-Based方法

    论文 [29] 率先将问句以及 KG 中的候选答案实体映射到同一语义空间,其中候选答案实体利用三种向量进行表示:1) 答案实体本身;2) 答案实体与主实体关系路径;3) 与答案实体相关 Subgraph。然后利用 Triplet loss1 对模型进行训练,模型结构如图 12 所示。

    在这里插入图片描述

    1. CNN and Attention方法

    上述模型针对问句编码采用词袋模型,没有考虑词序对句子的影响,以及不同类型属性的不同特性。论文 [30] 提出 Multi-Column Convolutional Neural Networks (MCCNNs) 如图13所示。

    利用CNN分别对问句和答案类型(Answer Type)、答案实体关系路径(Answer Path)和答案实体一跳内的 Subgraph (Answer Context) 进行编码,以获取不同的语义表示。该方法验证了考虑词序信息、问句与答案的关系对 KBQA 效果的提升是有效的。

    在这里插入图片描述
    但是论文 [30] 对于不同答案,将问句都转化成一个固定长度的向量,这种方法不能很好地表达问句的信息。针对该问题论文 [31] 提出了 Cross-Attention based Neural Network(图14 所示)。

    将候选答案分成四个维度:答案实体 aea_e、答案实体关系路径ara_r 、答案类型 ata_t和答案上下文(与上述论文相同)aca_c,然后利用注意力机制动态学习不同答案维度与问句中词的关联程度,让问句对不同答案维度根据注意力机制学习权重,有效地提升问答效果。

    论文 [32] 提出了Attentive RNN with Similarity Matrix based CNN(AR-SMCNN,图15所示)模型,利用带有注意力机制的 RNN 来对问句和属性间关系进行建模,并采用 CNN 模型捕捉问句与属性间的字面匹配信息。

    该论文验证了字面匹配信息能带来效果上的提升,而实验结果显示,以上两种网络模型对于复杂问题的处理能力依然不足。

    在这里插入图片描述
    在这里插入图片描述

    1. Memory Network方法

    与 Semantic Parser 方法相同,Memory Network (MemNN) 因为其良好的可扩展性以及对于强弱监督 [33] 的适用性,被广泛应用于 KBQA 中。论文 [34] 是将其结合 KG 中三元组信息来解决 KBQA 中简单问题(单跳),同时构建了 SimpleQuestions 数据集。

    该论文首先将 KG 中的知识存储到 MemNN 中,然后采样正负例 Query 和正负例的 Answer,两两组合形成多任务,利用 Triplet loss 训练 MemNN。

    模型首先通过输入模块(input module)将用户问题、三元组信息转化为分布式表示加入到 Memory 中;然后利用泛化模块(Generalization module)将新的三元组信息(来自 Reverb)加入到 Memory 中。

    输出模块(Output module)从 Memory 中选择一些与问题相关性高的三元组信息;回复模块(Response module)返回从输出模块中得到的答案。该论文是 MemNN 在 QA 上的首次尝试,虽然擅长解决简单问题,但是思路为后续的 KBQA 研究工作奠定了基础。

    基于上述论文,Jain [35] 提出了一个 L 层的 Factual Memory Network 来模拟多跳推理过程,每层以线性链接,并以上一层输出作为本层输入。

    第一层的输入是候选三元组和问句。对问句编码时,为弥补词袋模型无法考虑词序的问题,为每一个词 xix_i的不同维度 j 设计一种位置编码(Position Encoding)
    在这里插入图片描述
    其中 d 是词向量维度。最后使用位置编码更新句向量q=i=1qlixiq = \sum_{i=1}^{|q|} l_i \odot x_i 。据我们所知,这是首次利用深度模型结合 KG 信息层次化地进行复杂问题的语义解析工作,不仅在 WebQuestions 上验证了这种结构的有效性,也为深度学习模型带来了更好地解释性。

    其中 d 是词向量维度。最后使用位置编码更新句向量 。据我们所知,这是首次利用深度模型结合 KG 信息层次化地进行复杂问题的语义解析工作,不仅在 WebQuestions 上验证了这种结构的有效性,也为深度学习模型带来了更好地解释性。

    尽管如此,上文提到的方法在编码阶段,将问句和 KG 三元组信息分别进行映射,没有考虑两者间的交互关系。

    基于此论文 [36] 提出 Bidirectional Attentive Memory Network (BAMnet) 模型, 主要通过 Attention 机制来捕捉 Query 与 KG 信息间的两两相关性,并以此利用相关性增强 Query 的表示,希望能结合到更多的 KG 信息,提升针对复杂问题的处理能力,该方法包含 4 个模块:

    1)输入模块采用 Bi-LSTM 对问句进行编码;
    2) 记忆模块(Memory module)针对 KG 信息(答案类型hth_t 、答案实体关系路径hph_p 、答案上下文hch_c )进行编码存入 Memory network 中;
    3)推理模块分为一个两层的 Bidirectional Attention Network 去编码问句和 KG 中信息间的相互关系和泛化模块(Generalization module)。

    模型中 Primary attention network 中的 KB-aware attention module(图17所示)会根据 KG 信息关注问句中的重要部分;Importance module 利用注意力机制计算 KG 中信息与问句的相关程度(比如简单问题对于答案上下文关注度就会降低);

    然后在 Enhancing module 中利用 Importance module 计算的相关度权重矩阵,重新更新问句表示和 Memory 中的 Key 值表示,完成第二层 Attention Network;

    最后在泛化模块中选取 Memory 中对与问句表示有价值 value,利用 GRU 进行编码,链接到原有问句表示;

    4) 回复模块(Answer module)通过计算问句信息和 Enhancing module 中更新过的 KG 信息来得到最后答案。具体见图 16。

    该方法与众多 IR 方法一样,在不依赖于人工构建模板的情况下,依靠 Attention 机制和 MemNN,效果比大多数 IR 方法更好,但是并没有比引用了 PE 机制的论文 [35] 效果好,我们猜测如果利用 Transformer [37] 的思想,引入词语位置信息,也许可以取得不错的效果。

    在这里插入图片描述
    在这里插入图片描述
    综上所述,我们可以看出仅仅利用 CNN、Attention 等机制对 Query 与 KG 信息进行简单地端到端模型尽管可以避免大量构造人工模板,但并不能有效解决复杂问题,且部分方法的可解释性不强。

    综合 Semantic Parser 方法的实验结果,选用层次化方式建模,并选取有效的网络结构存储复杂的 KG 信息,也许是解决 KBQA 中复杂问题理解和避免人工模板构造的出路之一。

    3.3 其他方法

    近些年也出现了一些新的方法,不能被简单地归类到上述两类方法中。例如:论文 [38] [39] [40] 尝试使用自动或半自动从 KB 或者 QA 语料中学习模板,并利用模板将问句拆解成Logical Forms 或者理解其意图。

    论文 [41] 尝试将一个复杂的问句拆解成几个简单的问句,并从多个简单问句的答案中找出最终的复杂问句答案。

    2019年以来,我们也发现有论文尝试利用 Message Passing NN [42] 和 Stepwise Reasoning Network [43] 等方法对于复杂问题进行解析。

    最近也有一些研究人员采用神经计算与符号推理相结合的方法进行语义解析。论文 [10] 提出的神经符号机 Neural Symbolic Machine (NSM) 包含 3 个部分,经理(Manager)进行远程监督,利用执行结果对于过程进行指导,提供输入问题和执行的奖赏。

    程序员(Neural Programmer)使用 Key-Variable Memory 增强的 Seq2Seq模 型将问句变成程序,符号计算机(Symbolic Computer,如 Lisp Interpreter),利用内置的函数和 Code-Assist(用于将在句法和语法上无效的候选删除)生成一个领域相关的语言,然后执行该语言获得最终的结果。

    神经符号计算初步探索了利用神经网络模拟符号推理的过程,使得实现大规模可解释的知识推理与问答成为了可能,我们认为这个方向的发展还有更多探索和尝试的可能。

    4 前沿趋势分析

    4.1 更关注复杂问题解析

    近些年来,尽管有论文指出 KBQA 中简单问题已经基本被解决 [44],但是在不少论文和我们的实验中显示,实体识别和属性识别一直是影响复杂问题准确率的重要因素。

    所以我们认为在对复杂实体链接和具有歧义的易混淆句子上的属性识别工作 [45] 是 KBQA 在工业界落地的一个重要方向。

    同时,随着数据集的发展,从 WebQuestions 到 ComplexQuestions、LcQuAD、QALD 等数据集的出现,现在学术界更关注解决包含多跳、聚合、比较或者显隐式时间推理的复杂问题,但是现有方法并没有针对这些具体问题在该类数据集上取得很好地效果。

    因此如何能设计更好地网络结构建模复杂问题的逻辑和语义结构、更好地融入 KG 信息解决复杂问题也是需要我们探索的方向。

    近来,刘康老师的报告中 [6] 也提到了, 利用神经网络符号计算解决复杂问题,我们也希望看到有研究工作可以利用神经网络对符号计算的模拟,实现解释性强的,可学习地大规模知识问答和知识推理。

    4.2 模型鲁棒性增强

    深度模型的黑盒不可解释性一直受到研究人员的诟病。论文 [46] 指出在阅读理解任务中,仅在段落中增加一些(干扰)句子,会使模型效果有大幅下降。我们在 KBQA 实际应用中发现,其对语料的泛化理解以及拒识能力不强,严重影响了 KBQA 模型在工业环境的落地。

    但我们没有看到在 KBQA 领域对于模型鲁棒性的研究工作,所以我们认为针对 KBQA 鲁棒性的研究应该是工业应用的重要趋势。论文 [47] 向我们建议了一种生成相反语义句子的方法 [48],感兴趣的读者或许可以尝试一下。

    4.3 从单轮问答到多轮交互

    真实场景下,用户经常连续询问多个问题,其中部分问题是对话相关,部分问题可以被映射到 KBQA 中。而现在的机器人通常是将问答和对话任务分开解决,我们认为有必要将两种任务统一设计建模,来解决真实场景下的此类问题。

    而现在的一些研究在复杂多轮问答(如 CSQA)上的准确率还明显不能落地,期待有更多地工作可以关注这个领域的研究。

    5 小蜜Conversational AI团队的KBQA

    小蜜团队持续深耕人机对话方向,打造了一套工业界成型的 KBQA 引擎并落地到真实业务场景中。通过对线上日志的分析,同时参考学术界问题分类的标准,我们总结出小蜜 KBQA 要解决的问题类型:

    在这里插入图片描述
    在 KBQA 典型应用领域,例如:电信运营商、税务领域、保险领域,其中包含很多实体以及条件约束,如电信运营商领域,不同流量 (M)、价位 (N) 的各类套餐 (L) 的取消方式都不一样,如果使用 FAQ 方法,会产生 MNL 个知识点,造成知识库冗余,而且不能精准地回答用户问题。

    我们采用的 KBQA 方案不仅可以精准回答用户问题,还能对 FAQ 知识库进行知识瘦身,减少人工维护成本。

    经过分析,在上述几个典型场景中,适合 KBQA 解决的问题占比为 30%~40%,图 18 给出了这些问题不同类型的详细占比。

    可以看出,简单问题占比达到 60%,说明大多用户还是希望解决自己的真实问题,而不是考察机器人的能力,但是复杂问题(多跳和推理)也占到了 40%,说明在该类场景的业务也是具备一定复杂程度,如何更精准地回答用户对于这类业务的问题,优化客户人机交互体验,是我们要解决的问题。

    在这里插入图片描述
    我们通过构建面向垂直领域的问答知识图谱,帮助企业挖掘业务知识背后内在的结构化信息,将零散的非结构化知识(石墨)变成有机的结构化知识(钻石),提升领域知识的含金量。

    基于领域知识图谱,我们参考学术界方法,研发了基于 MultiCG的Semantic Parser 算法(如图19)对业务中的复杂问句进行解析,并利用Dependency parser模型对约束属性进行消歧,在真实业务场景下,端到端的效果达到 80% 以上,同时也帮助企业的 FAQ 知识库缩容近 10 倍。

    在这里插入图片描述
    在第五部分的前沿趋势分析中,我们指出在真实场景下复杂实体和属性识别是我们亟需解决的问题。在实体识别阶段,因为领域 KG 内实体类别较少,实体消歧工作不是我们关注的重点,但是在用户表述中可能会出现不连续实体或者嵌套实体的问题,如“飞享 18 元 4g 套餐”对应的实体为“飞享套餐”。

    为了更好地识别用户问句中的 mention 并链接到图谱中的实体,减少用户对同义词的配置,我们提出了一个 Search and Rank 框架(如图20),利用匹配和保序相似度等方法对句子中的 mention 和实体进行匹配,再通过排序模型选出最优实体或者进行实体推荐。

    在这里插入图片描述
    针对属性识别方法,我们提出了一个 Multi-point semantic representation 框架,将每个属性拆解成细粒度的四种因子信息(topic、predicate、object/condition和query type)用以区分易混淆属性,然后利用 Compositional Intent Bi-Attention(CIBA,如图21)将粗粒度的属性信息和细粒度的因子信息与问句表示相结合,增强问句的语义表示。

    在这里插入图片描述
    实验结果表明(表3和表4),我们提出的方法可以通过属性因子分解减少易混淆属性的错误数量,并在整体分类效果上取得性能提升。相关工作发表在 AAAI 2020 Multi-Point Semantic Representation for Intent Classification 上。

    在这里插入图片描述
    针对模型鲁棒性和表示能力弱,部分约束识别借助人工模板的问题,我们借鉴最近两年 Semantic Parser + NN 方法中 KV-MemNN 的建模思想,我们提出了 Hierarchical KB-Attention Model。

    对 Query 与 KB 之间的交互进行了细粒度的建模,以捕捉问句内部核心成分之间的修饰关系,来强化 Query 的层次化语义理解,在效果上超过了 MultiCG 的方法,并且具备更强的复杂问题解析能力和更好的可解释性。

    6 总结

    本综述围绕 KBQA 中复杂问题解析的研究进展做了一个详细的介绍,归纳了现有 KBQA 方法面临的两大核心挑战:1) 复杂问题理解难;2) 模型推理能力弱,并针对这两个挑战介绍了 KBQA 主流的两种方法:1) Semantic Parser;2) Information Retrieval。

    Semantic Parser 方法中,针对复杂问题理解,我们介绍了利用查询图生成、Encoder-Decoder 和 KV-MemNN 的方法来进行语义解析的方法。

    Information Retrieval 方法中我们介绍了利用 Subgraph Embedding、CNN 、Attention 和 Memory Network 机制对 Query 和 KG 不同结构信息进行建模和匹配的方法,此类方法减少了人工模板的依赖,但是可解释性不强,且在现有的数据集结果上效果不佳。

    然后我们结合目前 KBQA 的发展,提出了自己对于 KBQA 未来发展趋势的分析。

    最后我们对阿里巴巴-达摩院-小蜜 Conversational AI 团队目前在 KBQA 方向上的进展做了一个简明的介绍,输出了我们对于 KBQA 的问题分类、业务场景分析和核心算法概述。希望本篇进展研究可以对读者的研究工作带来一定的启发和帮助。

    参考文献

    [1] Yang Z, Qi P, Zhang S, et al. Hotpotqa: A dataset for diverse, explainable multi-hop question answering[J]. arXiv preprint arXiv:1809.09600, 2018.
    [2] Saha A, Pahuja V, Khapra M M, et al. Complex sequential question answering: Towards learning to converse over linked question answer pairs with a knowledge graph[C]//Thirty-Second AAAI Conference on Artificial Intelligence. 2018.
    [3] Berant J, Chou A, Frostig R, et al. Semantic parsing on freebase from question-answer pairs[C]//Proceedings of the 2013 conference on empirical methods in natural language processing. 2013: 1533-1544.
    [4] Yih W, Richardson M, Meek C, et al. The value of semantic parse labeling for knowledge base question answering[C]//Proceedings of the 54th Annual Meeting of the Association for Computational Linguistics (Volume 2: Short Papers). 2016: 201-206.
    [5] Bao J, Duan N, Yan Z, et al. Constraint-based question answering with knowledge graph[C]//Proceedings of COLING 2016, the 26th International Conference on Computational Linguistics: Technical Papers. 2016: 2503-2514.
    [6] 刘康,面向知识图谱的问答系统. AI前沿讲习班第8期PPT
    [7] 赵军, 刘康, 何世柱, 陈玉博. 知识图谱[B]. 2018.
    [8] Trivedi P, Maheshwari G, Dubey M, et al. Lc-quad: A corpus for complex question answering over knowledge graphs[C]//International Semantic Web Conference. Springer, Cham, 2017: 210-218.
    [9] Dubey M, Banerjee D, Abdelkawi A, et al. Lc-quad 2.0: A large dataset for complex question answering over wikidata and dbpedia[C]//International Semantic Web Conference. Springer, Cham, 2019: 69-78.
    [10] Liang C, Berant J, Le Q, et al. Neural symbolic machines: Learning semantic parsers on freebase with weak supervision[J]. arXiv preprint arXiv:1611.00020, 2016.
    [11] Steedman M. A very short introduction to CCG[J]. Unpublished paper. http://www. coqsci. ed. ac. uk/steedman/paper. html, 1996.
    [12] Liang P. Lambda dependency-based compositional semantics[J]. arXiv preprint arXiv:1309.4408, 2013.
    [13] Dahl D A, Bates M, Brown M, et al. Expanding the scope of the ATIS task: The ATIS-3 corpus[C]//Proceedings of the workshop on Human Language Technology. Association for Computational Linguistics, 1994: 43-48.
    [14] Yih S W, Chang M W, He X, et al. Semantic parsing via staged query graph generation: Question answering with knowledge base[J]. 2015.
    [15] Yang Y, Chang M W. S-mart: Novel tree-based structured learning algorithms applied to tweet entity linking[J]. arXiv preprint arXiv:1609.08075, 2016.
    [16] Yu M, Yin W, Hasan K S, et al. Improved neural relation detection for knowledge base question answering[J]. arXiv preprint arXiv:1704.06194, 2017.
    [17] Luo K, Lin F, Luo X, et al. Knowledge base question answering via encoding of complex query graphs[C]//Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing. 2018: 2185-2194.
    [18] Zhu S, Cheng X, Su S. Knowledge-based question answering by tree-to-sequence learning[J]. Neurocomputing, 2020, 372: 64-72.
    [19] Wu P, Zhang X, Feng Z. A Survey of Question Answering over Knowledge Base[C]//China Conference on Knowledge Graph and Semantic Computing. Springer, Singapore, 2019: 86-97.
    [20] Dong L, Lapata M. Language to logical form with neural attention[J]. arXiv preprint arXiv:1601.01280, 2016.
    [21] Xu K, Wu L, Wang Z, et al. Exploiting rich syntactic information for semantic parsing with graph-to-sequence model[J]. arXiv preprint arXiv:1808.07624, 2018.
    [22] Hu S, Zou L, Zhang X. A state-transition framework to answer complex questions over knowledge base[C]//Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing. 2018: 2098-2108.
    [23] Cheng J, Reddy S, Saraswat V, et al. Learning structured natural language representations for semantic parsing[J]. arXiv preprint arXiv:1704.08387, 2017.
    [24] Dyer C, Ballesteros M, Ling W, et al. Transition-based dependency parsing with stack long short-term memory[J]. arXiv preprint arXiv:1505.08075, 2015.
    [25] Weston J, Chopra S, Bordes A. Memory networks[J]. arXiv preprint arXiv:1410.3916, 2014.
    [26] Miller A, Fisch A, Dodge J, et al. Key-value memory networks for directly reading documents[J]. arXiv preprint arXiv:1606.03126, 2016.
    [27] Xu K, Lai Y, Feng Y, et al. Enhancing Key-Value Memory Neural Networks for Knowledge Based Question Answering[C]//Proceedings of the 2019 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long and Short Papers). 2019: 2937-2947.
    [28] Yao X, Van Durme B. Information extraction over structured data: Question answering with freebase[C]//Proceedings of the 52nd Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers). 2014: 956-966.
    [29] Bordes A, Chopra S, Weston J. Question answering with subgraph embeddings[J]. arXiv preprint arXiv:1406.3676, 2014.
    [30] Dong L, Wei F, Zhou M, et al. Question answering over freebase with multi-column convolutional neural networks[C]//Proceedings of the 53rd Annual Meeting of the Association for Computational Linguistics and the 7th International Joint Conference on Natural Language Processing (Volume 1: Long Papers). 2015: 260-269.
    [31] Hao Y, Zhang Y, Liu K, et al. An end-to-end model for question answering over knowledge base with cross-attention combining global knowledge[C]//Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers). 2017: 221-231.
    [32] Qu Y, Liu J, Kang L, et al. Question answering over freebase via attentive RNN with similarity matrix based CNN[J]. arXiv preprint arXiv:1804.03317, 2018, 38.
    [33] Sukhbaatar S, Szlam A, Weston J, et al. Weakly supervised memory networks[J]. CoRR, abs/1503.08895, 2.
    [34] Bordes A, Usunier N, Chopra S, et al. Large-scale simple question answering with memory networks[J]. arXiv preprint arXiv:1506.02075, 2015.
    [35] Jain S. Question answering over knowledge base using factual memory networks[C]//Proceedings of the NAACL Student Research Workshop. 2016: 109-115.
    [36] Chen Y, Wu L, Zaki M J. Bidirectional attentive memory networks for question answering over knowledge bases[J]. arXiv preprint arXiv:1903.02188, 2019.
    [37] Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]//Advances in neural information processing systems. 2017: 5998-6008.
    [38] Reddy S, T_ckstr_m O, Collins M, et al. Transforming dependency structures to logical forms for semantic parsing[J]. Transactions of the Association for Computational Linguistics, 2016, 4: 127-140.
    [39] Abujabal A, Yahya M, Riedewald M, et al. Automated template generation for question answering over knowledge graphs[C]//Proceedings of the 26th international conference on world wide web. 2017: 1191-1200.
    [40] Cui W, Xiao Y, Wang H, et al. KBQA: learning question answering over QA corpora and knowledge bases[J]. arXiv preprint arXiv:1903.02419, 2019.
    [41] Talmor A, Berant J. The web as a knowledge-base for answering complex questions[J]. arXiv preprint arXiv:1803.06643, 2018.
    [42] Vakulenko S, Fernandez Garcia J D, Polleres A, et al. Message Passing for Complex Question Answering over Knowledge Graphs[C]//Proceedings of the 28th ACM International Conference on Information and Knowledge Management. 2019: 1431-1440.
    [43] Qiu Y, Wang Y, Jin X, et al. Stepwise Reasoning for Multi-Relation Question Answering over Knowledge Graph with Weak Supervision[C]//Proceedings of the 13th International Conference on Web Search and Data Mining. 2020: 474-482.
    [44] Petrochuk M, Zettlemoyer L. Simplequestions nearly solved: A new upperbound and baseline approach[J]. arXiv preprint arXiv:1804.08798, 2018.
    [45] Zhang J, Ye Y, Zhang Y, et al. Multi-Point Semantic Representation for Intent Classification[J]. AAAI. 2020.
    [46] Jia R, Liang P. Adversarial examples for evaluating reading comprehension systems[J]. arXiv preprint arXiv:1707.07328, 2017.
    [47] Chakraborty N, Lukovnikov D, Maheshwari G, et al. Introduction to Neural Network based Approaches for Question Answering over Knowledge Graphs[J]. arXiv preprint arXiv:1907.09361, 2019.
    [48] Ribeiro M T, Singh S, Guestrin C. Semantically equivalent adversarial rules for debugging nlp models[C]//Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers). 2018: 856-865.

    展开全文
  • 基于复旦大学的知识图谱问答系统实现,主要是通过复旦算法思想实现中文开放问答
  • 本文将介绍如何从零开始搭建知识图谱问答

    ownthink通用知识图谱问答系统

    本文基于ownthink 1.4亿条三元组,从零开始搭建一种通用知识图谱问答,包括数据预处理、知识图谱构建、问题训练集生成、命名实体属性识别、问答意图分类、实体链接与消歧、问答流程、相似实体、问题推荐和模型部署上线等内容,具体详见每章节内容。

    (二)数据预处理

    数据预处理是对于给定的1.4亿三元组(ownthink知识库文件),处理得到对应较为标准的三元组知识,需要做实体统计、属性统计、属性映射、城市映射等工作。

    • 实体统计

      统计文件中各实体出现次数,用以查看是否有可合并实体。

      统计代码:

      import collections
      import os
      import csv
      
      dir_path = os.getcwd()
      all_entity_file = open(dir_path + '/data/record_data/entity/allEntitySort.txt', 'a', encoding='utf-8')
      # 使用依赖库collections自带统计函数
      with open(dir_path + '/data/ownthink_v2.csv', 'r', encoding='utf-8') as ownfile:
          reader = csv.reader((line.replace('\0', '') for line in ownfile))
          entity_col = [row[0] for row in reader if len(row) == 3]
          word_counts = collections.Counter(entity_col)
          allEntity_counts_dict = dict(word_counts.most_common())
          for keys, index in allEntity_counts_dict.items():
              temp_str = keys + ":" + str(index) + "\n"
              all_entity_file.write(temp_str)
          all_entity_file.close
      
      # 附本人自写词频统计函数
      class WordCount(object):
          def listWordCount(wordlist:list):
              ans = dict()
              wordlist_len = len(wordlist)
              for i in range(wordlist_len):
                  if wordlist[i] not in ans:
                      ans[wordlist[i]] = 1
                  else:
                      ans[wordlist[i]] = ans[wordlist[i]] + 1
         		# 排序
              sim_dict_order = sorted(ans.items(),key=lambda x: x[1],reverse=True)
              res = dict(sim_dict_order)
              return res
      
      

      说明:该统计仅仅用于分析使用,’\0’去除一些none知识

    • 属性统计

      属性统计即统计三元组中各个属性出现的次数,用以做属性映射、问题集生成和训练集分类。

      属性统计代码:

      import collections
      import os
      import csv
      import re
      import pickle
      import build_prop_dict
      from tqdm import tqdm
      from wordCount import WordCount
      dir_path = os.getcwd()
      
      all_prop_file = open(dir_path + '/data/record_data/property/allPropSort.txt','w',encoding='utf-8')
      
      with open(dir_path + '/data/ownthink_v2.csv','r',encoding='utf-8') as ownfile:
          reader = csv.reader((line.replace('\0','') for line in ownfile))
          # 去除一些非法字符
          prop_col = [ (re.sub(r'[;::;、,,.。%【】、`?*①②③④◇●/(& --·)\\()“”〗""》〖《\s\d]','',row[1])).replace('\u200b','').replace("[",'').replace("]",'')
                      for row in reader if len(row) == 3]
          allProp_counts_dict = WordCount.listWordCount(prop_col)
          for keys,index in allProp_counts_dict.items():
              temp_str = keys + ":" + str(index) +"\n"
              all_prop_file.write(temp_str)
          all_prop_file.close
      

      注意:通过多次统计,本文发现三元组属性数据中包含大量的非法字符,需要用正则表达式予以去除,得到较为精确的属性统计,这里的’\u200b’为不可见字符,也需要去掉。

    • 属性词云

      根据统计得到的属性词频,生成属性词云图,用以直观分析。

      词云代码:

      import csv
      import os
      import re
      import collections
      # import numpy as np
      # from PIL import Image
      from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator
      
      dir_path = os.getcwd()
      
      # black_mask = np.array(Image.open(dir_path + '/data_process/black_mask.png'))
      with open(dir_path + '/data/ownthink_v2.csv', 'r', encoding='utf-8') as ownfile:
          reader = csv.reader((line.replace('\0', '') for line in ownfile))
          print('预处理结束')
          prop_col = [(re.sub(r'[;::;、,,.。%【】、`?*①②③④◇●◆/(& --·)\\()“”〗""》〖《\s\d]', '', row[1])).replace('\u200b', '').replace("[", '').replace("]", '')
                      for row in reader if len(row) == 3]
          print('属性列表已生成,开始统计词频并生成top10000词云')
          word_counts = collections.Counter(prop_col)
          prop_word_counts_top10000 = dict(word_counts.most_common(10000))
          wc = WordCloud(
              font_path=dir_path + '/fonts/STXINGKA.TTF',  # 字体路劲
              scale=12,
              # collocations=False,
              background_color='white',  # 背景颜色
              width=1000,
              height=600,
              max_font_size=50,  # 字体大小
              min_font_size=10,
              # mask=black_mask,  #背景图片
              max_words=1000
          )
          wc.generate_from_frequencies(prop_word_counts_top10000)
          wc.to_file(dir_path + '/data/record_image/propCiyunPicture.png')
      

      得到的属性词云图如下:

    在这里插入图片描述

    • 标签属性值
      生成标签属性值词云图,分析数据中都包含哪些类型的数据。
      标签值生成方法同属性词频、词云,标签词云图如下:

    在这里插入图片描述

    通过标签内容,可将数据集大致分为人物,小说,机构,作品,产品,地理,行业等几大类,并可再具体细分,本文对已有数据集做如下分类:
    在这里插入图片描述

    • 属性相似度计算

      统计完属性词频后,需要规范属性名称,对一些出现频次较少、属性名相似度较高的属性予以合并,统一规范属性名称。

      属性相似度计算,本文使用word2vec计算TOP500各属性的相似度,使用方法见word2vec链接介绍(本文不再给出),统计结果如下(展示一部分):

      属性名 出现频次 TOP10相似度统计
      标签 32534392 标签类型,0.92|类型标签,0.92|产品标签,0.91|国际标签,0.91|通用标签,0.91|文学标签,0.91|图书标签,0.90|应用标签,0.90|文章标签,0.90|特征标签,0.90|内容标签,0.89|标签显示,0.89|标签结构,0.89|相关标签,0.89|标签类别,0.89|标签内容,0.89|文化标签,0.89|本文标签,0.89|作品标签,0.88|词条标签,0.88
      描述 15277103 描述者,0.99|描述方,0.99|描述人,0.98|描述对像,0.97|后其描述,0.97|细描述了,0.96|构字描述,0.94|中国描述,0.94|描述的是,0.93|理论描述,0.92|统计描述,0.91|相关描述,0.90|描述内容,0.90|定义和描述,0.90|内容描述,0.90|表现描述,0.90|定位描述,0.89|结构描述,0.89|设计描述,0.89|描述特征,0.89
      歧义关系 15085783 歧义,0.89|歧义权重,0.85|同名歧义词,0.84|关联关系,0.83|关系词,0.81|关联字,0.81|关联,0.80|关联体,0.80|关联名,0.80|关联篇,0.80|关联图,0.79|关联作,0.79|关联人,0.78|关联者,0.78|关系微妙,0.78|渊源关系,0.78|句子关系,0.78|关联地,0.78|关系区分法,0.78|序关系,0.78
      歧义权重 15085783 歧义,0.92|歧义关系,0.85|同名歧义词,0.83|消歧义错词,0.81|溢价含义,0.71|副词含义,0.71|外生变量含义,0.70|成本含义,0.69|加权含义,0.69|直接含义,0.68|异动含义,0.68|指数含义,0.67|暗盘含义,0.67|表达式含义,0.67|公式含义,0.67|戒体含义,0.67|原因含义,0.67|结果含义,0.67|插补含义,0.67|三实含义,0.67
      中文名 6777128 中文名斑,1.00|门中文名,0.99|科中文名,0.99|目中文名,0.99|组中文名,0.99|种中文名,0.99|系中文名,0.99|接中文名,0.99|中文名夜,0.99|鱼中文名,0.99|界中文名,0.99|度中文名,0.99|另中文名,0.99|中文名侧,0.99|中文名亮,0.98|中文名也称,0.98|超族中文名,0.97|更多中文名,0.96|中文名简称,0.94|中文名全称,0.92

      分析统计结果,可以生成如下属性映射,将第一个属性词之后的所有属性映射为第一个属性(映射阈值:相似度>0.85 and counts <15),本文映射结果如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

    • 城市标准化

      对于一些城市名称,统一使用简称,如:浙江,杭州,上海,北京等,相对简单,这里不再给出处理代码。

    • 带有单位的属性值标准化

      对于比如身高、体重、压力、压强等带有单位的数据,在属性值基础之上加上规范单位,需提前根据属性统计结果,用程序将属性中的比如身高cm、体重kg,处理为身高、体重,在属性值上规范属性值+单位。

    展开全文
  • 本篇博客主要基于微软亚洲研究院段楠老师的《智能问答》第四章 知识图谱问答 进行整理。 本篇博客我们将介绍一下知识图谱的基本概念以及基于知识图谱的语义表示方法。 知识图谱可以看做是对现实世界中客观存在的事实...
  • 电影知识图谱问答系统项目总结-附件资源
  • (六)实体链接与消歧 由于通用知识图谱知识量...由于通用知识图谱问答具有数据量庞大、知识内容繁多、问题种类复杂等特点,无法通过完全建立指称-实体字典的形式完成实体链接,本文借助ownthink知识库中自带实体的歧义
  • 一种改进的基于序列到序列框架的知识图谱问答方法,刘彦志,程祥,知识图谱问答系统能根据图谱中的结构化知识回答自然语言问题。在知识图谱问答系统中,将自然语言问句映射为结构化查询语句是关键
  • 知识图谱问答系统发布时间:2018-06-19 05:32,浏览次数:6061. 前言知识图谱(knowledge graph),是下一代搜索引擎、问答系统等智能应用的基础设施,目前出现的产品有:百度“知心”、搜狗“知立方”等。本篇将介绍...
  • 知识图谱 问答系统

    2018-03-27 20:39:26
    肖仰华-大规模概念图谱构建与...腾讯-大规模知识图谱的构建与应用-苏州大学 KG Refinement by Knowledge Intensive Crowdsourcing 面向智能问答的知识获取 陈虹-知识图谱及其变种在行业实践中的应用与思考-ZTE中兴
  • 基于mongodb存储的军事领域知识图谱问答项目,8大类,100余小类,共计5800项的知识库,该项目不使用图数据库进行存储,通过jieba进行问句解析,问句实体项识别,基于查询模板完成多类问题的查询,主要是提供一种工业...
  • 基于分层注意力机制的知识图谱问答方法,郎爽,朱署光,知识图谱问答能够根据知识图谱中的结构化知识回答自然语言问题。由于自然语言与结构化查询难以直接对应,该映射过程成为知识图谱
  • 果然,功夫不负有心人,找到了中科院软件所刘焕勇老师在github上的开源项目,基于知识图谱的医药领域问答项目QABasedOnMedicaKnowledgeGraph。用了两个晚上搭建了两套,Mac版与Windows版,哈哈,运行成功!!!从无...
  • (二)构建知识图谱 知识图谱构建使用neo4j作为图谱数据库,因数据量庞大(4572万个实体,1.41亿条关系),需使用neo4j-admin import工具导入,导入前需准备节点和关系的文件。 节点数据格式 neo4j节点数据使用以下...
  • 随着越来越多的语义数据在网上发布,网络用户如何访问到知识本身变得尤为重要。与日俱增的在交互模块的研究让终端用户能够在标准的语义网表达中获取方便的查询方式。尤其是自然语言接口,获得了极大的关注,因为它们...
  • 知识图谱问答系统.zip

    2021-03-10 08:50:33
    中文简介:随着知识图谱的迅速发展,面向知识图谱的中文领域问答系统已成为目前最新最热的研究方向之一,对于提高专业领域服务智能化程度具有较高的意义和价值。本系统针对中文口语语义表达多样化、不符合语法规范...
  • QAonMilitaryKG - 基于mongodb领域知识图谱问答项目,该项目不使用图数据库进行存储,通过jieba进行问句解析,问句实体项识别,基于查询模板完成多类问题的查询,主要是提供一种工业界的问答思想demo。
  • 作者|付彬、唐呈光、李杨、余海洋、孙建单位|阿里巴巴达摩院小蜜ConversationalAI团队背景介绍知识图谱问答(KBQA)利用图谱丰富的语义关联信息,能够深入理解用户问题并给出...
  • 本文是段楠《智能问答》一书第五章“知识图谱问答”的笔记。(其中有略的部分。同时夹私货。)本文和姊妹篇《知识图谱问答的思路 – 笔记1》是两本书的笔记,不是前后两部分。二者思路有同有异,可搭配食用。) 本文...
  • 对于输入的自然语言问句,问答系统分别进行实体属性识别、意图分类、图谱查询、相似度计算、答案筛选和结果返回六个部分,下面就每个部分的功能和逻辑进行说明,具体代码部分请参考主程序。 实体属性识别 NER识别...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,146
精华内容 458
关键字:

知识图谱问答