如何构建知识图谱?
Posted
技术标签:
【中文标题】如何构建知识图谱?【英文标题】:How to build a knowledge graph? 【发布时间】:2015-06-10 05:57:04 【问题描述】:我制作了一个在我的电脑上运行的带有 pagerank 的小型搜索引擎的原型。我有兴趣在其上构建知识图谱,它应该只返回正确上下文中的查询网页,类似于谷歌如何找到搜索问题的相关答案。我看到很多关于知识图谱的宣传,但没有很多文献,几乎没有像构建指南这样的伪代码。有没有人知道关于这种知识图在内部是如何工作的很好的参考资料,所以不需要创建关于知识图的模型?
【问题讨论】:
【参考方案1】:知识图是一个流行词。它是模型和技术的总和,以达到一个结果。 您旅程的第一站从Natural language processing、Ontologies 和Text mining 开始。这是一个广泛的人工智能领域,去here进行该领域的研究调查。
在构建自己的模型之前,我建议您使用专用工具箱(例如 gensim)尝试不同的标准算法。您将了解 tf-idf、LDA、文档特征向量等。
我假设您想使用文本数据,如果您想使用其他图像进行图像搜索,那就不同了。音频部分也一样。
构建模型只是第一步,Google 知识图谱中最困难的部分是实际扩展到每天数十亿个请求...
可以在Apache Spark,“当前的 Hadoop”之上“轻松”构建一个好的处理管道。它提供了一个弹性分布式数据存储,如果您想扩展,这是必需的。
如果您想将数据保留为图表,如在图论中(如 pagerank),用于实时查询,我建议您使用Bulbs 这是一个框架,“就像图表的 ORM,但不是SQL,你使用图遍历语言 Gremlin 来查询数据库”。例如,您可以将后端从 Neo4j 切换到 OpenRDF(如果您使用本体,则很有用)。
对于图形分析,您可以使用 Spark、GraphX 模块或 GraphLab。
希望对你有帮助。
【讨论】:
我知道我迟到了两年...但是如果您想深入了解其中一些概念,您是否建议任何文献(书籍/期刊等...)? 答案中链接的文献调查是从 2009 年开始的……这真的是 2015 年的相关阅读吗?【参考方案2】:我知道我真的迟到了,但首先要澄清一些术语:知识图谱和本体是相似的(我说的是语义网范式)。在语义网络堆栈中,基础是 RDF,它是一种将图定义为三元组(主语、谓词、宾语)的语言。 RDFS 是 RDF 之上的一层。它定义了一个元模型,例如 rdf:type 等谓词和 rdfs:Class 等节点。尽管 RDFS 提供了元模型,但它没有逻辑基础,因此没有推理器可以验证模型或对其进行进一步推理。 RDFS 之上的层是 OWL(Web Ontology Language)。它具有由描述逻辑定义的形式语义,描述逻辑是一阶逻辑的可判定子集。它有更多预定义的节点和链接,例如 owl:Class、owl:ObjectProperty 等。因此,当人们使用术语本体时,他们通常表示 OWL 模型。当他们使用术语 Knowledge Graph 时,它可能指的是在 OWL 中定义的本体(因为 OWL 最终仍然是一个 RDF 图)或者它可能只是 RDF/RDFS 中的一个图。
我说过,因为 IMO 构建知识图谱的最佳方式是定义本体,然后使用各种语义 Web 工具将数据(例如,从电子表格中)加载到本体中。开始使用 IMO 的最佳工具是 Protege ontology editor from Stanford。它是免费的,并且是一个非常可靠和直观的免费开源工具。还有一个关于如何使用 Protege 和学习 OWL 以及 SPARQL 和 SHACL 等其他语义 Web 工具的很好的教程。该教程可以在这里找到:New Protege Pizza Tutorial(披露:链接到我的网站,我编写了教程)。如果您想进入图表的较低级别,您可能需要查看三元组。它是为 OWL 和 RDF 模型设计的图形数据库。 Franz Inc's AllegroGraph triplestore免费版使用方便,支持5M三元组。另一个免费和开源的优秀 Triplestore 是 Apache Jena framework 的一部分。
【讨论】:
以上是关于如何构建知识图谱?的主要内容,如果未能解决你的问题,请参考以下文章