近年来,随着人工智能技术在科研和实践中的广泛发展和应用,知识图谱(Knowledge Graph)作为人工智能的重要课题也得到迅速发展。

包含上亿条事实的公开知识图谱已经非常常见,并且不同的数据源又互相联结相通,形成了数以百亿计的超大规模知识图谱。与此同时,随着自然语言处理、深度学习等技术的发展,知识图谱的抽取技术也在不断进步,增量的知识图谱数据不断汇入。

一方面,知识的普遍性和关联性等特点决定了知识图谱只有在到达一定的数量级和覆盖率时才能真正发挥其能量;另一方面,常用知识表示方法(比如三元组)的灵活性和碎片化等特点,也让知识图谱数据的管理变得困难。在知识图谱数据库已经成为一个不断快速生长的庞然大物的背景下,如何让海量知识变得可用且好用已经成为当前知识型应用的紧迫需求。

同一套知识图谱数据可以在不同应用中通用,同时对于用户而言,构建一套全新的数据系统是一项冗余和繁杂的工作。因此,为知识型应用提供在线可用或下载即可用的数据服务成为一种知识图谱的高效应用方式。本文中,我们将这种在线或离线提供知识图谱数据服务的方式称为“知识图谱即服务”(KGaaS)。

本文将从数据、应用及挑战等角度详细阐述如何高效地管理和服务超大规模知识图谱数据,并分享一些机构在设计和实现百亿量级知识图谱实时服务中的一些案例经验。

知识图谱:图视角下的知识

英国哲学家弗朗西斯·培根有句名言:“知识就是力量”。Stuart

J.Russell 和 Peter Norvig

在《人工智能:一种现代方法》一书中指出,人工智能包括自然语言处理、知识表示、自动推理、机器学习、计算机视觉以及机器人技术。知识表示对于人工智能的重要性不言而喻。实际上,机器学习得到的模型也是一种用计算结构和数值表示的知识。

在众多知识表示方式中,知识图谱作为一种语义网络拥有极强的表达能力和建模灵活性:首先,知识图谱是一种语义表示,可以对现实世界中的实体、概念、属性以及它们之间的关系进行建模;其次,知识图谱是其衍生技术的数据交换标准,其本身是一种数据建模的“协议”,相关技术涵盖知识抽取、知识集成、知识管理和知识应用等各个环节。

知识图谱是一种特殊的图数据,它是语义的和可复用的:知识图谱数据一经获取即可被多领域应用重复使用,这也是知识图谱服务的构建动机。那么,知识图谱具体来说是什么呢?

首先,知识图谱是一种特殊的图数据。具体来说,知识图谱是一种带标记的有向属性图。知识图谱中每个结点都有若干个属性和属性值,实体与实体之间的边表示的是结点之间的关系,边的指向方向表示了关系的方向,而边上的标记表示了关系的类型。例如,“大豆期货”和“大豆现货”是两个实体,“交割”则是这两者之间的关系。两个实体分别对应着现实世界中的合约和商品,而边则对应了它们所表示的期货和现货之间的现实关联。前者是关系的起始结点,后者是关系的目标结点。实体“大豆期货”具有“交易单位”等属性,其“交易单位”属性值为“10吨/手”等。

其次,知识图谱是一种人类可识别且对机器友好的知识表示。知识图谱采用了人类容易识别的字符串来标识各元素;同时,图数据表示作为一种通用的数据结构,可以很容易地被计算机识别和处理。

再次,知识图谱自带语义,蕴涵逻辑含义和规则。知识图谱中的结点对应现实世界中的实体或者概念,每条边或属性也对应现实中的一条知识。在此之上,我们可以根据人类定义的规则,推导出知识图谱数据中没有明确给出的知识。比如,已知“大豆是一种商品”,我们就可以根据“商品都有生产,都有消费,都有库存”等规则得到很多新知识,而无需在知识图谱中逐条给出。再比如,“期货”的“买卖权利”是“期货期权”,据此可以推导出很多实体之间的亲属等关系。

下面介绍一下广泛使用的知识图谱表示框架和查询语言:资源描述框架

(Resource Description Framework, RDF) 和 SPARQL 查询语言 (SPARQL Protocol

and Query Language, SPARQL) 。

资源描述框架中的基本元素格式为:

<主, 谓, 宾> 或 。它采用主语、谓词和宾语的方式来表示和陈述一条知识,这种表示方式简单且灵活。由于资源描述框架的英文缩写为

RDF,知识图谱数据集也经常被称为RDF数据集,而其管理工具通常被称为RDF Store或Triple

Store。在RDF中,我们可以用“<大豆,合约,大豆期货>”和“<大豆期货,交易所,大商所>”等来表示实体“大豆期货”的关系和属性。一个

RDF 数据可以分为两个部分:

一:显式三元组。这部分由数据集直接给定。例如:

<大豆期货, 现货, 大豆>

<豆粕期权, 底层资产, 豆粕期货>

二:隐含三元组。这部分由推理规则隐含表示。规则可作用于显式三元组,其推导出的三元组数量可能巨大,甚至超过原始数据数倍。例如:

如果?x 是一种?y, 而?y是?z的子类型,那么?x 也是一种?z: (?x, IsA, ?y) & (?y, SubclassOf, ?z) => (?x, IsA, ?z)

如果?y是?x的朋友,那么?x 是?y的朋友: (?x, Friend, ?y) => (?y, Friend, ?x)

代表性的

RDF 数据集包括

Freebase、DBpedia、WikiData、Yago2、Cyc、PubChemRDF以及UniProt等。已有知识图谱数据中的数据量已达到空前规模,例如

Freebase 包含大约19亿的三元组,DBpedia 包含大约30亿三元组,而 Bio2RDF

拥有约100亿三元组。这些数据集因为链接开放数据倡议 (Linked Open Data initiative, LOD)

而互相连通,形成了一个超过1490 亿三元组的超大知识图谱。如果算上它们遵循标准规则集 (如ρdf, RDFSPlus, RDFSFull,

OWL DL 等) 可得的隐含三元组,实际的数据量将更为庞大。

SPARQL是一种广泛使用的知识图谱查询语言。它的主要功能是做声明式的子图匹配,即只描述最终需要的结果模式,而具体执行的过程由底层数据管理系统决定。一个

SPARQL 查询的主要组成部分是基本图模式,比如 (?s, p,

?o),三个元素分别对应主、谓、宾,其中需要匹配的元素用带问号的变量表示。通过集合交、并、差等操作符号实现组合逻辑。此外,其它的图查询语言比如

GraphQL 和Cypher 也可以用于查询知识图谱。

知识图谱应用

国内外各大公司、高校以及研究机构都对知识图谱进行了探索和构建,比如谷歌的

Google Knowledge Graph、微软的 Bing Knowledge Graph、搜狗的知立方、

百度知心、阿里巴巴的商品知识图谱、复旦大学的 CN-DBpedia、东南大学的 Zhishi.me、清华大学的 Xlore

以及开放中文知识图谱社区 OpenKG 的 cnSchema.org

等。知识图谱的发展同时也得到了政府的关注和支持,例如中国国务院在《新一代人工智能发展规划》 (国发〔2017〕35号)

一文中就明确提出了知识图谱相关的发展规划。

作为一种应用型技术,知识图谱支撑了很多行业中的具体应用。例如:

- 信息检索:搜索引擎中对实体信息的精准聚合和匹配、对关键词的理解以及对搜索意图的语义分析等(如各种搜索引擎);

- 自然语言理解:知识图谱中的知识作为理解自然语言中实体和关系的背景信息(如机器分析研报);

- 问答系统:匹配问答模式和知识图谱中知识子图之间的映射(如Siri);

- 推荐系统:将知识图谱作为一种辅助信息集成到推荐系统中以提供更加精准的推荐选项(如各种视频网站的根据爱好推荐视频);

- 电子商务:构建商品知识图谱来精准地匹配用户的购买意愿和商品候选集合;

- 金融风控:利用实体之间的关系来分析金融活动的风险以提供在风险触发后的风险控制及补救措施(如澎博资管系统等);

- 公安刑侦:分析实体和实体之间的关系以获得线索等(如Palantir协助追捕本拉登);

- 司法辅助:法律条文的结构化表示和查询来辅助案件的判决等;

- 教育医疗:提供可视化的知识表示,用于药物分析、疾病诊断等;

……

那么知识图谱在这些应用中是如何被访问的呢?知识图谱的服务场景按照其对响应时间的要求可以大体分为在线查询和离线分析两类。

在线查询任务包括:1)针对实体的查询,如“底层资产为大豆的金融衍生品”;2)

针对属性的查询,如“大豆的价格历史波动率”;3) 针对关系的查询,通过多跳关系搜索实现知识图谱中的关系发现,如“大豆和豆粕的历史价差”;4)

针对子图结构的查询,用于查询具有某种特定关系的一系列实体,如“价差达到新高且价格相关性高于0.95的两种期货”;5)

针对查询的聚合,如“投资组合中价格创出新高的股票列表”。这类查询的特点是:响应延迟敏感,但数据吞吐量低。

离线分析任务包括:1) 基于图结构的计算,如:知识图谱向量化表示、知识图谱数据补全和实体排序等;2) 基于规则的推理;3) 基于整体信息的统计分析等。这类任务对响应时间要求低,但要求高数据吞吐量。

知识图谱服务的挑战

那么,构建知识图谱服务有什么难点呢?主要包括以下三点:

一:并行图处理。作为一类特殊的图数据,知识图谱的存储、查询以及计算都需要处理和图结构相关的如下三方面挑战:

图数据的复杂性。从数据访问的角度看,无论图数据如何表示,对一个图结点邻居结点的访问都会涉及到在连续存储空间中的“跳转”,即大量的随机数据访问。

大量程序优化技术依赖于数据的局部性和重用。大量随机数据访问会导致中央处理器的缓存在大部分时间里失效,进而导致系统性能急剧下降。从程序结构的角度看,图的非结构化特性使得并行处理十分困难。值得一提的是,切分图数据本身是一个

NP 难问题,这让分而治之方案的系统设计变得困难。

图结构和计算的多样性。图数据类型很多,图算法的性能会因为图特征不同而大相径庭。图计算的类型也有很多种,有针对性的系统优化适用面比较受限。

图数据规模越来越大。大规模的图数据让很多经典图算法因为低效而不可用。

二:隐含语义信息处理。例如,处理

(?x, Parent, ?y) => (?x, Father, ?y) UNION (?x, Mother, ?y) 和 (?x,

Niece, ?y) => (?x, Niece, ?y) UNION (?x, Spouse, ?z) AND (?z, Niece,

?y)

这类基于规则的推理将放大存储、查询代价。处理方法一般分为两类:一类是在查询之前就将所有隐含的三元组推导出来并作为正常三元组存储,这类方法会大量增加存储代价;另一类是在查询时,按照推理规则将一个查询重写成多个查询,最后汇总查询结果,这类方法会大大增加查询代价。而将两种方法融合的折中方法则会同时放大存储和查询代价。

三:复杂的数据模式。知识图谱的数据模式

(Schema)很复杂,如 ‘A dog can be also an actor’ (DEFINE ‘Actor SubClass

Person’?)(查找既是演员又是狗的实体(演员的定义是否包含了人类之外的实体?));实体可以多角色,如 ‘A director who is

also an actor, a singer, and a

writer’(查找一个同时是导演、演员、歌手、作家的实体);属性可以有多值或缺省,如 ‘An actor with many awards’

(查找多次获奖的演员)和 ‘A person entity without birthday data’

(查找没有生日数据的人)等。数据模式的复杂使得知识的物理存储和优化变得十分困难。

结合以上对数据特点、查询特点以及数据模式的分析,我们把一个知识服务系统所面临的挑战总结为以下四点:

- 系统架构:实现数据可扩展;

- 存储设计:处理随机数据访问;

- 数据访问:友好的访问接口;

- 高效查询:低延迟和/或高吞吐数据查询。

这四点汇集起来就是:多、快、好、省。

知识图谱服务的实现

我们先分析底层数据存储介质。常见的内存

(RAM) 和硬盘 (HDD)的响应速度级别分别为10的负7次方秒和10的负2次方秒,而数据吞吐量分别为3GB/s 左右和100MB/s

左右。传统硬盘由于其机械寻道机制的限制,数据的随机化和并行化读写性能差。为了满足高并行和随机化数据访问的需求,对延迟敏感的知识图谱应用一般都选择内存作为主要的存储介质。另一方面,由于单机内存容量的限制,向上扩展代价昂贵,我们更倾向于可扩展的内存云架构。

从存储架构角度看,单机存储系统主要为两类:一类是基于传统关系数据库构建的系统,如SW-Store、Triple

Tables 等;另一类是针对知识图谱数据定制的专用存储查询系统,如

RDF-3X、TripleBit等。分布式系统大致可以分为分布式文件系统、键值存储系统、中心化的存储以及混合存储这四种。

对于上层应用,系统需要提供细粒度的访问接口。原因如下:首先这些接口可以作为在线查询的轻量级工具,同时可以作为离线分析的并行化组件,真正实现将N

转换为1 + 1 + … + 1,其中 N

表示批量的操作,而1表示细粒度的操作。这样我们将这些1并行执行,就可以获得与批量处理相当的高吞吐量效果。反之,如果我们只支持批量处理,当系统响应多个细粒度操作时就会变成

N + N + … + N,从而导致资源的浪费和响应速度的下降。

数据存储和处理模块作为中间层,向下它基于底层存储架构(比如内存云),需要考虑存储代价敏感和随机访问友好两个特点;同时向上它需要提供细粒度且高效的访问接口。

数据存储和处理模块最核心的部分是知识图谱数据的物理表示。它负责实现存储、查询和更新在内的数据管理,需要解决的核心问题是管理一个可更新的超大规模稀疏三阶张量:如果将知识图谱数据的主语、谓词和宾语三个部分分别看作三个维度,每一个维度上的取值范围即知识图谱中对应位置出现的所有值,那么整个数据集就可以被一个稀疏的三阶张量表示,而知识图谱的存储问题也可以转换为对这个三阶张量的压缩和索引。这个三阶张量非常稀疏且分布不均匀,其中主语和宾语这两维的数量大,可以达到十亿量级,而谓词通常在几千到上万的量级。我们需要在存储和查询两个方面同时做到高效,并且支持对各个维度的自由更新。

具体的优化目标包括:首先是能够尽量缩小数据存储文件的大小;其次是能够快速地处理各类数据访问请求;最后是支持增量更新。鉴于物理存储模型的复杂性和灵活性,常见的一类方法是直接将这个三阶张量中的元素(即三元组)作为最小存储单元进行压缩表示并建立索引。这种方法对三个元素按位置进行排列组合进行多次存储,已达到空间换时间的目的。这种方法我们不妨称为零阶展平。另一类方法则将三阶张量按某一阶展平,如主语(图数据结构)或谓词(垂直划分、比特矩阵等)。最后一类同时按两阶来展平,如主语和谓词,这一类我们称为强类型的存储方案。前面提到的常见数据存储方案大多属于弱类型系统,如三元表(简单直接)或“谓词-宾语”键值列表等。相比于弱类型系统,强类型系统具有更小的数据存储和访问代价和更少的联结操作

(JOIN) 代价。

设计一个高效的大规模知识服务系统包含大量琐碎的细节。除了通用的系统优化技巧,如果需要把我们的经验总结为一条,那将是:强类型数据建模(软件)+ 分布式内存存储(硬件)。

— — — — — — E N D — — — — — —

往期文章:

Numpy处理tick级别数据技巧

真正赚钱的期权策略曲线是这样的

多品种历史波动率计算

如何实现全市场自动盯盘

AI是怎样看懂研报的

真格量化策略debug秘籍

真格量化对接实盘交易

常见高频交易策略简介

如何用撤单函数改进套利成交

Deque提高处理队列效率

策略编程选Python还是C++

如何用Python继承机制节约代码量

十大机器学习算法

如何调用策略附件数据

如何使用智能单

如何扫描全市场跨月价差

如何筛选策略最适合的品种

活用订单类型规避频繁撤单风险

真格量化回测撮合机制简介

如何调用外部数据

如何处理回测与实盘差别

如何利用趋势必然终结获利

常见量化策略介绍

期权交易“七宗罪”

波动率交易介绍

推高波动率的因素

波动率的预测之道

趋势跟踪面临的挑战

真格量化可访问:

https://quant.pobo.net.cn

真格量化微信公众号,长按关注:

遇到了技术问题?欢迎加入真格量化Python技术交流QQ群  726895887

如何让你的机器更加聪明?-知识图谱介绍与构建相关推荐

  1. 知识图谱入门一:知识图谱介绍

    知识图谱入门一: 一.知识图谱简介 1.1 引言 1.2 什么是知识图谱呢? 1.2.1 什么是图(Graph)呢? 1.2.2 什么是 Schema 呢? 1.3 知识图谱的价值在哪呢? 二.怎么构 ...

  2. Task 1 知识图谱介绍

    目录 Datawhale 知识图谱组队学习 之 Task 1 知识图谱介绍 目录 一.知识图谱简介 1.1 引言 1.2 什么是知识图谱呢? 1.2.1 什么是图(Graph)呢? 1.2.2 什么是 ...

  3. 知识图谱 Protege 本体构建

    知识图谱 Protege 本体构建 Protege 相关资源 Protege OWL Tutorial 官方教程 : http://owl.cs.manchester.ac.uk/publicatio ...

  4. 知识图谱研讨实录07丨肖仰华教授带你读懂知识图谱的众包构建

    以下文章来源于知识工场 ,作者知识工场 知识图谱是一种大规模语义网络,已经成为大数据时代知识工程的代表性进展. 知识图谱技术是实现机器认知智能和推动各行业智能化发展的关键基础技术.由复旦大学肖仰华教授 ...

  5. Datawhale 知识图谱组队学习 之 Task 1 知识图谱介绍

    Datawhale 知识图谱组队学习 之 Task 1 知识图谱介绍 知识图谱理论: 相关理论 知识图谱背景 早在 2010 年微软就开始构建知识图谱,包括 Satori 和 Probase:2012 ...

  6. 时序知识图谱的增量构建

    摘要 带有时序特征的知识图谱(KG)称为时序知识图谱,用来描述知识库中增量式的概念及其相互关系.知识随着时间推移而变化,将新增知识实时.准确地添加到时序知识图谱中,可以实时反映知识的演化更新.对此,给 ...

  7. 知识图谱Knowledge Graph构建与应用

    --- 关于举办 2022年数字信息化培训项目系列 --- 知识图谱Knowledge Graph构建与应用研修班线上课程的通知 各有关单位: 一.培训目标: 本次课程安排紧密结合理论与实践,深入浅出 ...

  8. 知识表示与知识图谱--介绍

    知识表示与知识图谱 知识支撑 人类理解需要 机器也需要 知识工程 手段:信息技术 特点:高效率.大容量 目标:获取并利用知识与信息的技术 例子 第一个专家系统:费根鲍姆 知识工程语言TUILI--19 ...

  9. Wikidata知识图谱介绍与数据处理

    1. Wikidata简介 Wikidata(维基数据)是一个自由开放的知识库,可以同时被人和机器阅读.编辑[1].根据官网介绍,Wikidata作为一种结构化数据的集中存储,为其他维基媒体(Wiki ...

最新文章

  1. 使用分层实现业务处理(二)
  2. BLE-NRF51822教程15-BLE地址
  3. zabbix 时间错误_一键部署Zabbix+Grafana+Icinga+SmokePing监控系统
  4. python变量类型字符串的内建函数使用
  5. php 绝对刷新,vue项目线上页面刷新报404 解决方法(绝对有用)
  6. 数据密集型应用系统设计--数据存储与检索
  7. @param注解什么意思_你对Java注解真的理解吗?
  8. 大学生创新创业训练计划讲解(大创)
  9. Pycharm中配置.ui转.py文件;.qrc文件转.py文件和Qtcreator
  10. Guiding Teacher Forcing with Seer Forcing for Neural Machine Translation翻译
  11. 微信小游戏马甲包过审(马甲包过包)
  12. python中mod是什么意思_【python中,mod_python到底做了些什么呢?】mod python 教程
  13. [转]在线生成条形码(39码、EAN-13)
  14. burp suite爆破模式操作心得
  15. 5G安全的全球统一认证体系和标准演进
  16. 2022年硝化工艺判断题及答案
  17. Mysql设计学生宿舍管理系统+考勤系统
  18. dfc trace performance anaysis
  19. 计算机应用基础实验指导实验八,计算机应用基础第八章上机实验
  20. 硬件设计实战+PCB资料分享

热门文章

  1. numpy、pandas
  2. 由网页假死现象查找到的资料
  3. C++ STL(28):逻辑运算(逻辑与、逻辑或、逻辑非)
  4. 关于单片机ADC采样参考电压应注意事项
  5. 使用JAF创建MIME消息
  6. Java-数组的定义与使用
  7. Python这个无所不能的全能选手的目前8大主要应用领域
  8. 谷歌/Chrome浏览器如何让搜索结果在新标签页中打开?
  9. Android OkHttp + Glide + RecyclerView + ButterKnife流行框架的综合实现
  10. 华泰证券软开23届提前批面经_笔经面经