携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第15天,点击查看活动详情
导语
最近在看KBQA的相关内容,这里简要记录一下知识图谱相关的学习笔记。本文主要介绍几个常见的知识图谱,如FreeBase、DBpedia和Wikidata。
知识库(Knowledge Base)与三元组
知识库(KB)用于存储各种各样的复杂信息,其中的数据通常以三元组形式形成,即
(主语,谓语,宾语)
也即
(subject, predicate, object)
其中的主语和宾语常被称为“实体”,谓语常被称为“关系”。
三元组示例
举个例子,假设一句话为“the capital of Canada is Ottawa”。我们可以将其转换为三元组
('Canada', 'capital is', 'Ottawa')
其中有两个实体"Canada", "Ottawa"和一个关系'capital is'。
常见知识库
如今,大型的知识库(Knowledge Base)包含非常多的三元组,例如维基数据就有超过139亿个三元组。所有的实体和关系都由唯一的国际化资源标识符(Internationalized Resource identifier, IRI)标识。以维基数据为例,维基数据中实体“Canada”的IRI为“www.wikidata.org/entity/Q16” 。
由于IRI太长,人们通常用缩写来表示这些前缀,如“wd:Q16”来表示“www.wikidata.org/entity/Q16” ,“wd:”是缩写来表示前缀“www.wikidata.org/entity/” 。
另一方面,大型KBs在资源描述框架(RDF)下发布,以支持结构化查询语言(通常为SPARQL) 。
Wikidata数据查询示例
Wikidata提供了SPARQL的查询接口,我们可以通过这个网址在线进行查询:
wikidata.demo.openlinksw.com/sparql
假设我们要查这样一个问题(该样例来自LC-QuAD 2.0测试集):
What is the name of the opera based on Twelfth Night ?
那么首先我们需要将问句中所涉及的实体和关系全部找出来,并且链接到对应的Wikidata的资源上。
在这个句子中存在两个实体:
- opera,对应资源为:wd:Q1344;
- Twelfth Night,对应资源为:wd:Q221211;
用到了两个关系,分为为:
- instance of,对应资源为:wdt:P31;
- based on,对应资源为:wdt:P144;
在获得以上信息后,我们编写对应的SPARQL查询语句为:
SELECT DISTINCT ?sbj WHERE
{
?sbj wdt:P144 wd:Q221211 .
?sbj wdt:P31 wd:Q1344
}
在SPARQL中,我们定义了一个查询变量 ?sbj 代表要查询的内容,在WHERE子句中,我们对查询条件进行约束。即这个要查询的变量应该 based on Twelfth Night并且还得符合是 instance of opera。
在Wikidata的查询网站进行查询
得到的结果如下:
点击查看详情后即可看到查询结果的详细信息:
总结
本文简要概述了知识库的相关内容,并且简要介绍了几个大型的知识库。最后,以LC-QuAD 2.0数据集上的一个样例作为参考,介绍了如何使用SPARQL语句在对应的知识库上进行查询得到答案。希望本文的内容对您有帮助。