知识图谱问答的思路 -- 笔记2

首发地址:https://zhuanlan.zhihu.com/p/144311555

本文是段楠《智能问答》一书第五章“知识图谱问答”的笔记。(其中有略的部分。同时夹私货。)本文和姊妹篇《知识图谱问答的思路 – 笔记1》是两本书的笔记,不是前后两部分。二者思路有同有异,可搭配食用。)

本文(确切的说是这本书的这一章)的信息量很大,一定要先把握大逻辑之后,再细扣具体的实现方式。

本人水平有限(。。真的。。)导致书中好几处不懂的,大佬读到我下文说没看懂的地方,还请告知的评论区,真的谢谢了!

1、知识图谱和语义表示

1.1、知识图谱

知识图谱的基本单元是三元组(triple),形式为<实体, 谓词, 实体>,如<Barack Obama, PlaceOfBirth, Honolulu>。每个三元组对应一个全局唯一标识符(GUID)。

需要注意一种特殊节点CVT(compound value type),用于连接本来连不上的多个节点。如书中例子,各种关系中没有一种关系能够连接Barack Obama节点和Michelle Obama节点,所以在二者之间加入CVT节点,变成<Barack Obama, Marriage, CVT, Spouse, Michelle Obama>,达到了连接的目的,同时该CVT节点还可以连接别的关系和节点,如日期作为结婚日期。

1.2、语义表示

1.2.1、一阶谓词逻辑(first-order preicate logic)

命题(sentence)
谓词(predicate):属性property,关系relation
函数(function)
对象(object):包括常量constant,变量variable,符号函数functional symbol
连接符号(connectibe):交(且) ∧,并(或) ∨,否定 ¬, 当 ⇒,当且仅当 ⇔
等号(equality)
限量词(quantifier):全称量词 ∀,存在量词 ∃
高阶函数,count、argmin、argmax、sum等
举例:Barack Obama was born in Honolulu on Augest 4th,1961 的语义表示是

PlaceOfBirth(Barack Obama, Honolulu) ∧ DateOfBirth(Barack Obama, 1961-08-04)

1.2.2、高阶谓词逻辑(higher-order predicate logic)

略(不是我略,是书略。。。)

1.2.3、λ-算子(lambda calculus)

陈述句的予以可以采用一阶谓词逻辑表示,问句的语义则通常采用λ-算子表示。

举例:Where was Barack Obama born ? 的语义表示是

λx.PlaceOfBirth(Barack Obama, x)

(私货:一阶谓词逻辑和λ-算子是对应的,一个陈述,一个查询。二者写法除了λ和x貌似没有区别。)

1.2.4、λ-DCS

DCS是指“依存组合语义”(Dependency-Based Compositional Semantics)。

λ-DCS的作用和λ-算子相同,但是其格式更简洁且更适应于知识图谱。

(私货:看了后面的例子就回会发现,λ-算子像是“面向过程的”都是“函数”,λ-DCS像是“面向对象的”都是对象的“方法”。多神奇又形象的比喻。)

λ-DCS的操作和上面的“一阶谓词逻辑与λ-算子”的区别是交操作的符号,一阶谓词逻辑和λ-算子是∧;λ-DCS是⊓。

举例:the area of the largest state in US 对应的

λ-算子的表示:argmax(λx.Type(x, USState) ∧ λx.λy.Area(x, y))

λ-DCS的表示:argmax(Type.USState, Area)

后面两部分是说怎么把自然语言转化为语义表示,以达到在知识图谱中查找的目的。

2、基于语义分析的方法

大思路分成两种:

基于文法的语义分析方法(后文CCG、SCFG、DCS),将过程当做白箱,拆开后对应,对应完了再拼成整个的结果;

基于神经网络的语义分析方法(后文NMT),将过程当做黑箱,端到端直接输出结果。

2.1、基于CCG的语义分析

组合范畴文法(combinatory categorial grammer, CCG)。该方法貌似始自1995年。略。

2.2、基于SCFG的语义分析

同步上下文无关文法(synchronous context-free grammar, SCFG)。该方法貌似始自2007年。略。

2.3、基于DCS的语义分词

依存组合语义(dependency-based compositioan semantics, DCS)。2013年提出。略。

2.4、基于NMT的语义分析

神经机器翻译(neural machine tranlation, NMT)。核心就是把自然语言转换成语义表示的过程当做一个翻译的过程,建模为序列标注Seq2Seq问题。书中的标准做法是LSTM做encoder和decoder。

为了解决Seq2Seq没法层次化的问题(私货:这一点我存在疑问,觉得是可以的把层次化的小括号也作为输出的一部分一起训练一起预测就可以。),书中提到Seq2Tree模型,在encoder完成编码后,让decoder按照逐层的方式解码出语义表示的序列。

(私货:该书成书于2018年,不知是在bert之前还是之后,也有可能是bert之后也不愿意大改了。现在的做法肯定不会止步于此。)

(私货:计划探索并尝试一下这个思路下,在现在的前沿技术的处理方式,找个数据集真实的干一次。先挖坑,做出来之后也在这个专栏内更新文章。)

3、基于答案排序的方法

基于答案排序(answer ranking)的知识图谱问答方式将该问题看成一个信息检索任务。对训练数据的要求大幅度降低。

(私货:对比本文最上的链接“笔记1”的“2”部分一起食用,挺有意思。其中的“实体的表示”和“排序”部分还可以对比下面的链接“实体链接”一问,也有相似的地方。都是用搜索而非解析的思路,在知识图谱里找东西。)

通用步骤 具体分成四个步骤:

(第0步、先明确定义。“问题实体”是说,一个自然语言的问题是关于若干个概念的,即实体提及,这若干个实体提及对应在知识图谱中的若干个实体就称作“问题实体”。)

(私货:另外需要注意“候选实体”是指第1步实体链接阶段的“问题候选实体“,还是2~4步的“答案候选实体”。)

  • 第1步、问题实体识别模块:输入是自然语言,输出是问题实体。通过实体链接技术做到。详见:【知识图谱应用】实体链接的思路
  • 第2步、答案候选检索模块:输入是一个问题实体,输出是一堆答案候选实体。常用方法是,在知识图谱上,与问题实体最多通过两个为此谓词的知识库实体。以此保证二者相距不会太远。
  • 第3步、答案候选表示:输入是答案候选实体,输出是答案候选实体的向量表示。由于无法直接比较自然语言的问题和答案候选实体,所以通过答案候选实体在知识图谱上的上下文生成对应的向量。那么问题就从“输入问题和答案候选实体之间的相关程度”变成了“计算输入问题和答案候选实体的向量表示之间的相关程度”。
  • 第4步、答案候选排序:输入是输入问题 & 若干个答案候选实体的向量表示,输出是答案。打分、排序、超过阈值的第一名作为答案输出。
    以上是通用思路,以下是具体的解决方式。

3.1、基于特征的答案排序

3.1.1、问题特征

疑问词特征 Q-word:人工规则,如“谁、为什么、怎么、如何”等。
问题实体特征 Q-entity:就是问题实体,可能是一个,也可能是多个。
问题类型特征 Q-type:通过规则处理句法树得到,如 “名字、时间”等。(ps:就是直接出现这个词。)
问题动词特征 Q-verb:问题的核心动词,与知识图谱的谓词联系紧密。
问题上下文特征 Q-context:问题中除了上述特征之外的词或n-gram。

3.1.2、答案特征

谓词特征 A-pred:知识图谱上,连接问题实体于答案候选实体的谓词路径。最关键因素。与 Q-verb 和 Q-context 对应。
类型特征 A-type:该答案候选实体在知识图谱上的类型。与 Q-word 和 Q-type相对应。
上下文特征 A-context:知识图谱中实体也有上下文啊!就是和该答案候选实体直接相连的若干谓词及若干实体。与 Q-context 相对应。

3.2、基于问题生成的答案排序

上文3.1的思路是将自然语言问题和答案候选实体都转换成特征作比较。3.2的思路是用知识图谱中的知识信息将答案候选实体(反向)转化成自然语言问题,(如同欧阳锋筋脉逆行)然后任务就变成了“计算输入问题和每个答案候选实体对应的生成问题之间的相似度”的任务,简言之“文本相似度”的任务。

3.2.1、问题生成
整本书的例子全是英文,咱们做的时候也可以做一套类似的中文模板。
上图左列中的缩写表(CCG部分提到的):S 句子;N 名词;NP 名词短语;ADJ 形容词;PP介词短语。

(私货:具体的生成过程,我在书里没读明白,如果我后来明白了我会再补上。)

3.2.2、输入问题与生成问题的相似度计算

将二者之间的每一个短语对当成一个复述短语对。

(私货:后面的过程,貌似是如何如何转化成词向量。我也没读明白。)

(私货:我猜测,用现在的常见思路,会想办法将两个问句都通过迁移模型变成词向量。)

3.3、基于子图匹配的答案排序

该方法为每个答案候选实体从知识图谱中抽取一个子图(sub-gragh),将“为答案候选实体打分和排序”的任务转化为“计算输入问题和每个答案候选实体对应的子图之间的相似度”。

其转化方法是,在知识图谱中找到问题实体和答案候选实体之间的路径,子图具体体现为路径上的三项:

谓词(一个或两个)
答案候选实体的实体类型
与路径上CVT节点相连的实体
示例:奥巴马是问题实体,他媳妇米歇尔是答案候选实体,大的蓝范围是子图。
在这里插入图片描述
得到子图之后,对于输入问题和子图之间做相似度匹配的方式,书中提及是用的CDSSM模型。

(私活:书中没说更具体的实现方式,我也懒的再查原始论文了。不过DSSM一系列的模型确实应该学学了,如果学了会更新新的知乎文章。)

(私活:感觉3.3和3.2的前半部分处理是一样的,都是在图谱中找到二者实体之间的联系(路径或子图);分歧是找到之后怎么处理。3.2是生成句子,然后做句子相似度;3.3不生成句子,而是更“白箱”一些,直接做句子和子图的上述三项之间的匹配。)

3.4、基于向量表示的答案排序

将输入问题 Q 和答案候选实体 A 分别表示为向量 f(Q) 和 g(A),然后计算 f(Q) 和 g(A) 两个向量的相似度。Φ

然后问题又分为三步:

3.4.1、如何得到向量 f(Q) :

[公式]

式中,在这里插入图片描述是根据Q中的词做 one-hot 或者 tf 得到的稀疏向量;[公式]是人工设定的,将高维稀疏向量转化为低维向量的矩阵。T是转置的意思。

3.4.2、如何得到向量 g(A) :

[公式]

式中, [公式] 是根据A得到的高维稀疏向量; [公式] 是待训练的,将高维稀疏向量转化为低维向量的矩阵。T是转置的意思。

而得到[公式],又有三种方式:

  • 单一实体表示法:将“答案候选实体A”的位置设为1,其它是0;
  • 路径表示法:将“问题实体、答案候选实体、二者之间谓词”的位置设为1,其它是0;
  • 子图表示法:在路径表示法的基础上,将和答案候选实体A直接相连的所有实体的位置设为1。

3.4.3、计算 f(Q) 和 g(A) 两个向量的相似度

书中方式是直接相乘: [公式] ,S(Q,T)作为Q和A的距离。

另外对 S(Q,T) 还提出了另一种方法,略。

3.4.4、通过训练计算[公式]

设定损失函数在这里插入图片描述
(私货:对于解决问题,我原有思路是将问题建模为一个经典的机器学习问题,比如分类、回归、聚类、序列标注、文本相似度等,然后用标准做法就算解决了;而这部分要处理的问题是“文本与知识图谱中实体”的相似度,而这东西很难建模为经典问题,因为虽然是向量和向量的相似度,但是二者因为来源不同,所以不能直接做比较,所以只能自己再建“新”模,其中核心就是做一个新的适合本问题的损失函数用来训练。)

3.5、基于记忆网络的答案排序

记忆网络(memory networks)

(私货:读了好几遍,我也没找到它和知识图谱有什么关系,略。)

总结:

  • 在基于语义分析的方法中,将自然语言转化为机器能够理解和执行的语义表示;
  • 在基于答案排序的方法中,计算输入问题和答案候选实体之间的相关性。

如果有错,请指正;如果觉得还行,请点赞!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值