Press "Enter" to skip to content

ACL 2019 开源论文 | 基于知识库和大规模网络文本的问答系统

 

 

论文动机

 

当前问答系统面对的一大问题就是如何利用先验知识。 我们人类可以通过不断的学习,掌握非常多的先验知识,并通过这些知识来回答问题。 而这对问答系统而言就非常困难了,一方面不能像人一样不断积累,另一方面只能从输入中获取所需要的一切。

 

因此,人们就会将一些知识作成知识库(Knowledge Base,KB),用于辅助机器的理解。 但是,KB 常常是不完整的,并且针对开放性问题,KB 不可能覆盖到所有的证据上。

 

如何解决这个问题是一个非常大的挑战。 另一方面,人们可以使用大规模的网络文本作为开放性的 KB,并且也取得了一些成绩,但是这些工作更多的针对的是单文档,针对多文档的工作目前还相对较少。

 

作者推测一个可能的原因就是虽然这些文本可以提供更大规模的只是覆盖,但是缺少背景知识,这幺多的文档反而会引入很高的噪声。 因此作者考虑将这部分整合起来, 通过不完整的 KB 获取必要的和问题相关的背景知识,基于这些信息在多文档中抽取合适的信息并最终回答答案。

 

模型结构

 

为了有效利用 KB 和文档信息,作者提出了一个新的端到端的模型,主要包含两部分: 1)子图阅读模块: 用于从知识库中获取和问题相关的知识信息; 2)知识感知的文本阅读模块: 利用获取的知识从文档中找出需要的答案。模型的结构图如下:

 

 

子图阅读模块

 

这部分的主要作用就是使用 graph-attention 来为每个子图实例整合他的邻居节点信息,从而得到每个子图实例更好的语义表示。因为最终是为了增强对问题的理解,作者首先通过一个 LSTM 处理问题,得到问题的情境信息丰富的隐层庄田表示,同时使用相同的 LSTM 得到标记化 (tokenized) 的关系隐层状态表示。接下来作者使用 self-attention 得到关系的语义表示:

 

 

由于问题需要和不同的关系进行匹配,而每个关系只关注到问题的其中一部分信息,因此,作者使用得到的关系表示和问题的每个隐层状态进行匹配,最后得到问题的语义表示:

 

 

同时,作者还发现主题实例的指示向量非常有用,如果一个主题实例连接的邻居出现在了问题中,那幺对应 KB 中的三元组将会比那些非主题实例的邻居对问题的语义表示更有用,因此在邻居节点上的注意力值最终表示为:

 

 

因此最终每个子图实例就可以通过如下方式计算出来:

 

 

知识感知的文本阅读模块

 

在上个模块,我们得到了每个子图实例的 embedding 表示,那幺在这部分要做的就是利用这些表示增强对问题和文档的理解,从而得到最后的答案。这部分作者使用了一个现有的做阅读理解的模型。

 

首先是利用学习到的知识对问题进行更新表示。作者首先利用 self-attention 得到问题的原始表示,然后收集关于问题的主题实例,然后使用一个门结构将这些信息进行融合。

 

 

得到了对问题的更新表示之后,就是使用学习到的只是对文档进行增强表示,首先对文档和文档对应的实例使用 Bi-LSTM 进行处理,接下来作者设计了一种新的基于问题的表示的门机构,该结构允许模型能够动态选择跟问题相关的输入,从而得到更好的文档语义表示。

 

 

实体信息聚合 & 答案预测

 

最后作者将从 Text Reader 中得到的信息进行融合,首先使用一个 co-attention 计算问题和 Bi-LSTM 的隐层状态的相关程度,然后对这些隐层状态进行加权和,对于文档对应的实例,作者使用了均值池化得到最后的表示。最后使用一个非线性变化和 sigmoid 函数来求得每个实例是否是答案的概率。从而求得最后的答案。

 

实验

 

作者在一个公开数据集 WebQSP 上进行模型的效果验证,同时为了更好的验证模型的效果,作者还认为控制了 KB 的使用程度,从实验结果上看本文提出的模型还是很不错的。

 

 

同时作者还给出了一些 case 来更好的展示模型的效果。

 

 

总结

 

问答系统,尤其是开放性的问答系统需要非常多的先验知识来辅助答案的预测,虽然我们可以通过知识库来整合一些先验知识,但毕竟无法覆盖到所有的情况。 作者通过知识库和大规模网络文本的相互辅助,从而提升了模型的整体性能。

 

同时我们也可以看到,知识库的使用正在变得越来越普及,无论是问答系统,对话,推理还是常识理解,都将知识库作为一个非常好的先验信息源,因此知识库的使用也变得越来越重要,非常值得关注一下。

作者丨张琨

学校丨中国科学技术大学博士生

研究方向丨自然语言处理

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注