如何构建知识图谱和问答系统
前言
问答系统是NLP在业界最为重要的落地场景之一,但由于其全链路比较复杂,学习的时候难以入手。这是一个基础的图谱构建和问答系统的项目,为大家学习问答系统提供一个思路。
ps:之前断断续续写了知识图谱和问答系统的构建,干脆整合成一个完整的github项目,并对知识图谱进行系统性介绍
完整项目github地址:https://github.com/Chtholly1/KG-and-QA-demo
知识图谱搭建更加详细的介绍:https://blog.csdn.net/gzt940726/article/details/122884131
问答系统搭建更加详细的介绍:https://blog.csdn.net/gzt940726/article/details/123051808
主体
知识图谱的构建主要分为以下三个大的步骤:
- 结构化数据的获取
- 知识图谱(图数据库)的构建
- 问答系统的搭建
一.结构化数据
对第一步而言,如果只是想做个简单的练手项目,我们可以去网上下载一个现成的结构化数据(电影等),进一步的话可以自己去爬取结构化的相关数据(小心被封ip)。
但很多时候数据往往是非结构化的,这时候便要用到最经典的方法——信息抽取。信息抽取一般又分为三个方面:
1.实体链接
2.关系抽取
3.事件抽取
通过这些方法,我们就可以把结构化数据转化为非结构化的数据了。
本项目直接采用已有的结构化数据来构建知识图谱,如:
{
"source":"https://warcraft.huijiwiki.com/wiki/%E9%98%BF%E8%BE%BE%E7%BD%97%E6%A0%BC",
"中文名":"阿达罗格",
"状态":[
"副本首领 可击杀"
],
"种族":[
"烈焰猎犬"
],
"英文名":"Adarogg",
"身份":[
"怒焰裂谷首领"
]
}
二.知识图谱
这里直接摘抄知乎顾鹏的一段化来介绍知识图谱:
知识图谱在逻辑结构上可分为模式层与数据层两个层次:
数据层主要是由一系列的事实组成,而知识将以事实为单位进行存储。如果用(实体1,关系,实体2)、(实体、属性,属性值)这样的三元组来表达事实。可选择图数据库作为存储介质,例如开源的 Neo4j、Twitter 的 FlockDB、JanusGraph 等。
模式层构建在数据层之上,主要是通过本体库来规范数据层的一系列事实表达。本体是结构化知识库的概念模板,通过本体库而形成的知识库不仅层次结构较强,并且冗余程度较小。
个人理解这里的数据层指代的就是三元组信息。
而模式层就是所有三元组信息的表达方式,一般用RDF将信息序列化,常用的RDF方法有:
RDF/XML,N-Triples,Turtle,RDFa,JSON-LD
本项目中使用的是Turtle.
三.问答系统
目前,问答系统在本质上就是检索系统的进阶版(至少在强人工智能出现之前应该一直是)。
一般可以拆解为四部分:
- 让机器理解 用自然语言所进行的提问。
- 把问题进行拆解成多个简单问题。
- 对每个问题去图数据库中进行检索,得到答案。
- 把这些答案按合理的方式进行汇总,并返回最终答案。
本项目做的比较简单,默认提问是简单问题,所以只包含了1,3两个部分。
小结
在结构化数据和问答系统上能做的事情相当多,需要结合具体的业务进行技术的调研和落地。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)