介绍
Freebase 是一个由元数据组成的大型合作知识库,内容主要来自其社区成员的贡献。它整合了许多网上的资源,包括部分私人wiki站点中的内容。Freebase 致力于打造一个允许全球所有人(和机器)快捷访问的资源库,由美国软件公司Metaweb开发并于2007年3月公开运营。2010年7月16日被Google收购, 2014年12月16日,Google宣布将在六个月后关闭 Freebase ,并将全部数据迁移至Wikidata。Freebase的整体设计很有意思,在知识图谱设计上很具代表性。
数据结构
基础模型
- Topic:即实例或实体,每一条信息叫做Topic,比如:姚明等。
- Type:类型或概念,每个Topic可以属于多个Type,比如:人、运动员等。
- Domain:域,对类型的分组,便于schema管理,比如:人物。
- Property:属性,每个Type可以设置多个属性,其值默认可以有多个,可通过设置unique为true限制只能有一个值。比如:出生日期、所在球队等。
- 属性值类型可以是基本类型,比如:整型、文本等;也可以是另一个type,比如:所在球队、父母等,这种情况叫做CVT,compound value type 组合值类型,比如:所在球队就是一个CVT,它有自身结构化的属性,不仅仅只是一种简单的值。
- MID:实体编号。不考虑实体合并和分裂时,一个实体和一个MID是一一对应的;当考虑实体合并和分裂时,多个MID可能指代一个实体,但是只有一个MID是master,其他的MID通过一个特殊的属性(<人.运动员.replaced_by>)指向这个MID。
-
KEY:可以通过key来唯一确定一个实体,一个实体可以有多个key,每个key都属于一个namespace,比如: "/en/yao_ming"的namespace为"/en"、"/wikipedia/zh-cn_title/姚明" 的namespace为"/wikipedia/zh-cn_title"。对于平台基础模型的实体(Domain、Type、Property),Freebase会从Key中选一个值,作为该实体的ID。
- 属性约束:用于约束属性的取值范围,比如:类型约束(整型、文本、浮点型、datetime、CVT等)、条件约束(是否单值、是否去重、主属性、逆属性等)。
通过类型及其配置的属性,可结构化一个Topic,如果Topic属于多个Type,则其结构为这些Type属性的集合。如果属性是基本类型则存储在该topic本身;若是CVT则作为另一个topic存储,通过边进行关联。如下图:橙色部分为模型,蓝色部分为Topic。
Freebase本身就是进行模型schema管理和数据管理的,于是为了足够的灵活性,Freebase平台本身所需的基础模型(Type、Domain、Property、Object)也通过freebase进行自举配置,放在"/type"这个域下,在freebase中只要是"/type"这个域下的都是用于定义平台自身模型的数据,见下图表示的是平台所有类型的分类。
数据存储
整个Freebase数据存储是一张大图,每个点都使用type/object定义,边使用type/link定义,不管是模型还是Topic,其数据都作为点存储于图数据库中,通过边进行关联。
Freebase的后台数据库Graphd以点和点间关系(边)的图状结构来组织数据,通过二进制数据存储块(类似SQL中的BLOBs)来储存点和边,并以哈希表的方式存储组织数据,它在用户下载上传数据时的起到临时数据缓存器的作用,对数据进行检验处理后,再保存到Graphd中。
数据库中以数组的方式对点及其关系的元数据进行建模,以表格的形式进行存储,表格中的每条数据对应一个点边数组。点边数组一般由4个主要的数组成员组成,分别是源点、关系、目标点、源点值,于是点边表中就按这四个成员设定相应的四列。
Graphd的图是有向图,边的方向从源点指向目标点,但执行查询时,可向前或向后遍历所有边来获取结果。在属性定义时,可以将一个方向的属性定义为“主属性”(比如:父亲),反方向上定义为“逆属性”(比如:儿子),这两个属性成为互逆属性。
当用户输入问题时,数据库引擎会先分析出问题的主体和可能所处领域,在“源点”和主属性“关系”列中进行检索,然后将所匹配到的“目标点”列中的值反馈给用户;也会反向在“目标点”和逆属性“关系”列中进行检索,将结果中的“源点”列中的值反馈给用户。这种架构设计有效的保证了数据的查全率。
数据来源
- freebase提供页面功能,用户可进行数据添加和修改。
- 提供开放的API工具,进行大批量数据集成。
- 通过数据挖掘对网页进行结构化抽取,再通过MQL导入。
- 固定的数据提供方定期导入:wikipedia的数据每两周自动导入,Netflix每周自动导入,还有一些数据小组或社区定时导入。
下图是目前已集成的部分知名数据集。
数据查询
数据权限
Freebase对用户读取数据是完全开放并免费的,但是用户需要添加编辑数据时,就需要访问控制模块。平台通过“/type/user”、“/type/usergroup”以及“/type/permission”这几个属性实现用户的访问权限控制,每个对象都有一个“权限”属性,指向“/type/permission”。这个权限属性指定了用户组/type/usergroup,不同用户组成员可以操作的对象就不同。用户可以*更新freebase绝大部分的类型和实例,除/type下的平台基础模型外。
MQL
全称Metaweb query language,用于提供HTTP API来进行freebase的读写操作,其入参和反参都是json格式。mql查询需要对freebase内配置的模型有一定了解,有一定的专业性要求。下面会列举几个案例,详细可见freebase官网。
- 根据guid查询实例详情,并指定返回的哪些字段。
{ "query": [ { "limit": 1, "guid": "42caf4fa-4725-11e5-8fdc-f80f41fb03aa", "name": "", //超类object的字段名 "/tv/tv_actor/date:"" //类型tv_actor的属性出道时间date "/tv/tv_actor/tv_program": [ //类型tv_actor的属性出演电视剧,也是一个类型,嵌套指定该类型所需字段。 { "name": "", "limit": 3 } ] } ] }
- 根据类型的guid或ID查类型schema
{ "query": [ { "limit": 1, "guid": "42caf4fa-4725-11e5-8fdc-f80f41fb03aa", "type": "/tv/tv_actor" "/type/domain/types": "" } ] }
- 根据类型ID的实例列表,并指定需要字段列
{ "query": [ { "type": "/film/film", "guid": "", //需返回guid字段值 "name": "" //需返回name字段值 "limit": 20, //指定返回条数,若返回所有则不指定该字段 } ] }
另外,Freebase官网提供N-Triple RDF格式的数据压缩包的下载,整个压缩包30G,解压后300G+,下载后,可以用压缩软件解压,也可以通过编程工具(比如Java的GzipInuputStream)边读取边解压。下面列举一个姚明案实例,格式为:MID(比如:m.01jzhl)、属性(比如:type.object.name)、值(比如:姚明 或 另一个实例的MID:m.01445t)。
<m.01jzhl> <type.object.name> 姚明 . <m.01jzhl> <type.object.key> "/wikipedia/zh-cn_title/姚明" <m.01jzhl> <people.person.profession> <m.01445t> . <m.01jzhl> <people.person.date_of_birth> "1980-09-12"^^<http://www.w3.org/2001/XMLSchema#date> . <m.01jzhl> <people.person.education> <m.0n1k91v> . <m.01jzhl> <people.person.profession> <m.02h664x> . <m.01jzhl> <people.person.nationality> <m.0d05w3> . <m.01jzhl> <people.person.parents> <m.0g5bnz5> . <m.01jzhl> <people.person.place_of_birth> <m.06wjf> . <m.01jzhl> <people.person.spouse_s> <m.0j688yq> . <m.01jzhl> <people.person.parents> <m.0g5bnyy> . <m.01jzhl> <people.person.gender> <m.05zppz> . <m.01jzhl> <people.person.weight_kg> "141.0" . <m.01jzhl> <sports.pro_athlete.career_start> "1997"^^<http://www.w3.org/2001/XMLSchema#gYear> . <m.01jzhl> <sports.pro_athlete.sports_played_professionally> <m.0c55c2z> . <m.01jzhl> <sports.pro_athlete.teams> <m.0j_ny44> . <m.01jzhl> <sports.pro_athlete.teams> <m.0j2m__w> . <m.01jzhl> <sports.pro_athlete.teams> <m.0t_6b7s> .
应用及特性
特性
Freebase主要是从维基抽取结构化数据并发布成RDF,是完全结构化的,但数据来源不局限维基,还导入了数量众多的专业数据集,并提供数据查询和录入机制。DBpedia与Freebase类似,但DBpedia存在数据结构化程度低、数据不一致、数据质量低、数据权威性和规范性不高、对Wikipedia数据的更新存在滞后性等问题。两者的数据在08年11月通过内置OWL属性owl:sameAs进行互联,使得双方数据集关联更密切。
曾有人评价:Freebase是2007年迄今互联网上最激动人心的东西。Freebase最强大的地方就在于,它里面的元数据是可变的,具有弹性,这里的元数据包含Freebase自身平台所需的基础模型的元数据。Freebase的目标是结构化描述地球上的所有信息,难点其实不在于收集信息,而在于怎么结构化描述信息,所以Freebase通过众包模式进行信息结构化配置,才有了如此灵活可变的设计方案。我们可以借鉴,但也需要根据具体的业务场景做适当的调整。
Freebase不管模型还是实例都存储在图数据库中,优势在于灵活,劣势在于增加了图的复杂度和理解成本,所以可以发现网上有很多关于Freebase DUMP数据结构的解读,确实绕。还有一种设计方案:模型通过关系型数据库存储,实例通过图数据库存储,因为模型本身的特性和使用方式更适合于使用关系型数据库,而实例需要网状遍历、多跳查询需要使用图数据库。
应用
用户可以多角度来使用Freebase,它本身平台和数据都具备开放性,典型的应用有:
- 数据挖掘,各领域的应用都可以直接使用freebase的数据进行分析、挖掘,比如:自然语言搜索引擎会从freebase获取答案,微软收购的Powerset发展为微软必应搜索引擎,而Powerset的很多问题答案都是从freebase中获取的;谷歌收购freebase后也是利用其海量数据提升搜索质量。
- 数据共享和服务,可以利用freebase数据构建专业的数据集,比如电影、地区、人物、建筑、图书等等,也可以把数据应用于问答系统、语义标注等场景,freebase就是一个全网语义平台。
参考文献
赵军《知识图谱》