简介
基于知识图谱的问答系统,即KBQA。其中一个简单的实现方法是根据用户输入的自然语言问句,转化为图数据库中的关系查询,最终将数据库中的实体及关系呈现给用户。
下面给出了一个KBQA的Demo。
实现依赖
- Python 3.6
- Apache Jena Fuseki
- SPARQLWrapper
- refo
- jiaba
实例数据
此知识图谱的主题为COVID-2019的知识查询。三元组数据来自OpenKG的新冠数据集。
实现流程
- 数据提取:下载OpenKG提供的json-ld数据,通过脚本将json-ld数据转化为RDF格式的数据,RDF数据已经上传至本实例中,用户可以直接使用。
- 数据存储:采用Apache Jena Fuseki,Apache Jena Fuseki是一个SPARQL服务,支持多种操作系统。可以存储RDF数据,并通过SPARQL查询语句查询数据库中的关系。这里将上面给出的RDF数据导入至Jena中。
- 规则编写:Python编写数据库查询语句与规则。规则采用refo,可以直接从Python中下载该包,这一步是自然语言转为结构化的规则的关键。
- 数据查询:通过refo生成的SPARQL查询语句传递到Jena中便可以查到相关的实体关系了,最终反馈给用户。
需要注意的是此代码实现仓促,编写的规则内容较少,没有对输出进行规范表示。
代码
https://github.com/xyjigsaw/COVID19-KBQA-DEMO
项目中包含了数据和代码,数据需要自己导入到Jena中。为了简便系统,这里没有给出前端代码。
前端代码如顶部图片所示。
参考
- https://blog.csdn.net/keyue123/article/details/85266355