知识图谱-基于ES(ElasticSearch)和gAnswer构建智能问答系统

2020-05-29 00:00:00 查询 系统 对话 实体 匹配

知识图谱-基于ES(ElasticSearch)和gAnswer构建智能问答系统

  • 主要介绍ES与gAnswer如何构建垂直领域内的智能问答系统,比如手动构建医疗影像类的知识库应用ES系统中。
  • ES简介:Elasticsearch是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎Apache Lucene 基础上的搜索引擎。但是Elasticsearch并不仅仅是Lucene那么简单,它不仅包括了全文搜索功能,还可以进行下面的工作:
    • 1.分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
    • 2.实时分析的分布式搜索引擎。
    • 3.可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
    • gAnswer简介: GAnswer系统是由北京大学计算机技术研究所数据管理实验室邹磊老师牵头开发的自然语言问答系统。gAnswer能够将自然语言问题转化成包含语义信息的查询图,然后,将查询图转化成标准的SPARQL查询,并将这些查询在图数据库中执行,终得到用户的答案 。具体的实现主要TKDE2018的论文

Answering Natural Language Questions by Subgraph Matching over Knowledge Graphs

该系统提供的两个版本:1、英文版本下载,依赖的知识库主要是DBpedia;2、中文试用版本,依赖知识库PKUBASE(该北大开发中文知识库),从该官网的介绍,暂时不支持jar部署,本人也试用过看,不支持。如下图是英文版本实例结果(Postman实验结果)、

环境搭建

ES(Elasticsearch)

  • ES7.4.0
  • IK分词器(7.4.0),版本需要与ES版本匹配,分词器也可以替换为Jieba分词器或者其他分词器库。
  • Postman
  • 插件:elasticsearch-head-master,可以安装Chrome的插件。

gAnswer

  • 英文版发布版本;中文版本使用版本
  • 解压Ganswer.jar包, 解压到主工程目录下,请保证Ganswer.jar文件与解压得到的文件处在同一路径下 。

java jar -xvf Ganswer.jar unrar x DBpedia2016.rar ./data/

运行

java java -jar Ganswer.jar

等待系统初始化结束,出现Server Ready!字样后,则说明初始化成功,您可以开始通过Http请求访问gAnswer的服务了 。

基于模板匹配的查询语言

  • ElasticSearch主要用于语义搜索领域,也可以构建问答系统,通过将自然语言转为对应的逻辑表达式以及查询语句,而自然语言对应的查询及语义检索主要分为四个方面:
  • 实体检索:特朗普是谁? 实体:特朗普
  • 实体属性检索:特朗普的身高?实体:属性 特朗普:身高
  • 实体属性的多跳检索:特朗普的女儿的丈夫 实体:属性:属性 特朗普:女儿:丈夫
  • 多种属性条件检索实体:身高大于180cm的中国作家或者每个作家:属性:>180,实体:国家 or 国家:职业:作家。
  • ElasticSearch模板、Cypher查询和SPARQL模板的区别是什么?
  • 基于REFO正则模板,SPARQL语言模板匹配。
  • 什么是SPARQL语言了? SPARQL即SPARQL Protocol and RDF Query Language的递归缩写,专门用于访问和操作RDF数据,是语义网的核心技术之一 ,主要有两个部分组成:协议与查询语言。
    查询语言:类似于关系型数据库中SQL语句
    协议:是指HTTP协议的客户端与SPARQL服务器(SPARAQL endpoint)之间传输查询,是基于图匹配的思维与RDF图进行匹配,并找到对应子图。
  • Cypher(主要针对于原生图形数据库Neo4j)/Gremlin查询(JenusGraph Titan支持较好),图形数据库属于NoSQL数据库分支,但是各图形数据库厂商都有自己的查询语言,没有标准统一的查询语言,支持较好的有SPARQL(大多数图形数据库都支持)、Grimlin、Cypher(由于Neo4J使用者较多)
  • Cypher:是一个描述图形查询语言,不必编写图形结构的遍历代码对图形存储数据进行高效的查询操作,Cypher一种申明式图形查询语言,使用相对简单的查询语法能够对图形数据库进行基本查询(MATCH 、INSERT等),目前该查询语言主要支持Neo4j图形性数据库,对于知识图谱存储图形数据库的内容下期专门出帖子,如下图所示
  • Grimlin查询语言: 数据以属性图的形式存在,可以认为是上面两种的混合体,属性仍然在表中,但是联接关系是直接以链接(比如指针)的形式存在的。查询的本质是图遍历,擅长解决求图的直径、点到点之间的路径,比如刘德华连接奥巴马需要几度关系
  • ElasticSearch查询表达式(Query DSL),主要支持ES系统
    • Match方式(单个匹配/多个匹配):对查询的语句进行分词,比如李白是谁?分词【李白 是 谁】从分词出来的字或者词进行匹配查询,并且还根据Lucened评分机制进行评分。当然还可以进行全匹配,比如Term关键字进行查询,但是此匹配方式不需要进行分词,文本中必须包含整个搜索词汇,其中还有Bool(must should must_not bool等)的联合查询方法。

问答系统的一些综述

  • 之前在基于医疗影像设备的知识图谱的问答系统中讲过部分流程,其实现在业界不管是基于模板匹配的方式还是采用端对端(单纯的根据对话语料库采用生成式方式,目前回答的效果不好,一般是采用检索式)的方式构建QA系统,都需要构建一个底层知识库,这种系统简称为KBQA系统或者KBDS,如下图非常简单的本体构建KBQA系统流程。
  • 什么是KBQA系统?KBQA系统实现有哪些方法?如何构建?与对话系统的区别是什么?

KBQA(Knowledge Base Question Answering),是基于知识库的问答系统,本质上KBQA系统反映一个简化的“问答-答案”的映射过程,需要对自然语言语义解析与理解后,进行结构化查询与推理,得出相应的答案。

上图来着刘康老师的报告

  • 与对话系统的区别是什么?

在对比对话系统之前,先来谈谈问答系统,问答系统是信息检索系统的形式,是以问题为驱动的信息获取过程,按QA类别可以分为WebQA(Web问答)、KBQA(知识库问答)、CQA(社区问答)和DBQA(阅读理解的QA系统,斯坦福的SQuAD),而对话系统主要关注对话过程,多采用多轮方式进行,主要分为开放闲聊的对话系统、任务驱动的对话系统、以知识获取的对话系统和信息推荐的对话系统,传统的对话系统主要由四个部分:NLU(自然语言生成)、DST(对话状态追溯)、PL(策略学习)和NLG(自然语言生成),目前,采用是端对端检索式与生成式的,但是精度较低。KBQA主要通过对自然语言进行语义解析与理解后,查询知识库,进行某一类事实问题进行回答(简单的BFQ或者复杂多跳转问题),答案是某一种实体或者实体的属性或者关系,而对话系统,句子级的对话,注重对话过程,回答的问题是一般是句子而不是简单的答案,类似人对话聊天。对话系统也可以结合知识库进行更加全面句子级答案生成(知识获取的对话系统)。如下图所示对话系统类别和对话系统框架。

  • KBQA系统实现有哪些方法?

传统的主要分为几类:

  • 基于语义解析的方法
    • 该方法是将自然语言转换为一系列形式化的逻辑表达式,利用知识库中语义信息将逻辑表达式转为知识库查询,终得到相应的答案。
    • Berant提出的方法,利用“问答/答案对”结合Freebase生成模板,不需要专家人工标注大量数据,并重点提出逻辑表达式生成过程主要由资源映射、桥接操作、组合操作和候选逻辑表达式。
  • 基于模板匹配的方法
    • 基于模板匹配的方法是通过预制模板匹配问题,代替本体映射,绕过语义解析脆弱性,一般使用该方法与结合语义解析+模板匹配查询的方法来解决工业界的问题,如基于模板匹配的查询语言章节讲的,但是此方法需要人工构建大量模板,只能解决简答的事实类型的问答,如下图所示的TBSL流程
  • 基于深度学习优化模板匹配的方法
    • 深度学习主要用来改进问答系统的流程,包括语义解析、实体识别、意图识别与分类和实体链接与消歧等,这类的算法很多,比如对于实体识别的LSTM+CRF、基于深度学习及概率图的实体消歧等,另一方,采用深度学习对问答对进行训练得到大量的模板,便于问题与知识库匹配,比如Wanyun Cui从百万个问答对的巨型问答语料库来学习、训练,得到数量巨大的谓词模板,如图所示
  • 基于信息抽取的方法
    • 该类方法通过提取问题中的实体(实体识别),通过在知识库中查询该实体可以得到以该实体节点为中心的知识库子图,子图中的每一个节点或边都可以作为候选答案 。 通过观察问题,依据某些规则或模板进行信息抽取,得到表征问题和候选答案特征的特征向量,建立分类器,通过输入特征向量对候选答案进行筛选,从而得出终答案 ,比如Xuchen Yao 。
  • 基于向量建模的方法
    • 该方法类似于信息抽取方法,不同的是对问题与答案进行向量化表达的转换,从而在低维空间内进行相似度计算,比如 Antoine Bordes 向量建模的经典方法
  • 其他还是有语义解析+深度学习的方法、向量建模+深度学习的方法、端对端的方法(下章单独总结KBQA/对话系统的综述和关键技术细节)

参考文献

基于ElasticSearch的问答系统(KBQA)

poemElasticDemo

Elasticsearch【快速入门】

Elasticsearch权威指南-中文.pdf,Elasticsearch 中文文档下载

目前常用的自然语言处理开源项目/开发包有哪些?

RDF查询语言SPARQL

[SPARQL By Example]

[Learn SPARQL]

图数据库查询语言Cypher、Gremlin和SPARQL

elasticsearch 查询(match和term)

KBQA 知识库问答领域研究综述

KBQA: An Online Template Based Question Answering System over Freebase

斯坦福DBQA:SQuAD

2019-06-17问答系统项目落地调研

KBQA: 基于开放域知识库上的QA系统

揭开知识库问答KB-QA的面纱专栏

度发布NLP模型ERNIE,基于知识增强,在多个中文NLP任务中表现超越BERT

相关文章