摘要:
作为人工智能时代最重要的知识表示方式之一,知识图谱能够打破不同场景下的数据隔离,为搜索、推荐、问答、解释与决策等应用提供理解支撑,目前已经成为人工智能研究中越来越重要的领域。目前对于知识图谱理论和算法层面研究的相关资料非常丰富,但是对于知识图谱系统构建的设计以及工程实现的痛点和难点的介绍,则相对缺乏。本文结合vivo知识图谱工程团队近一年的探索和研究,总结自身在系统设计和实现中的经验和成果,希望能对读者提供帮助
简介:
知识图谱以结构化形式构建和存储客观世界中存在的概念,常识,类别,实体,属性,关系,并进一步为上层应用提供数据和算法能力
vivo知识图谱-领域知识数据
vivo知识图谱-关系立方图
vivo知识图谱团队在成立一年多的时间里搭建了自有的知识图谱构建系统,实现了覆盖71个领域,1.6亿实体,50亿三元组,7亿关系的通用领域知识库的建设,同时研究相关算法能力,整合系统、数据、算法打造知识图谱中台,目前已经为vivo公司全局搜索、语音助手、i音乐、信息流、用户画像、智慧视觉等产品和平台提供服务支持
系统架构:
知识图谱构建系统的目标是对相同领域内来自不同数据源的数据进行处理,将不同数据源中相同的实体进行聚合,并对相关属性值进行融合,同时要对相同领域以及跨领域实体建立链接关系,构建图结构。在实体聚合时,需要注意同名不同实体的分别聚合。如下图所示,沈阳故宫和北京故宫聚合时需要进行区分。同时我们可以看到最终的展现结果中,故宫的图片,介绍,评分,分别来自不同的站点数据源.
为了实现目标,我们结合已有标准和资料,探索实现了vivo自有的知识图谱构建系统(下图所示)。vivo知识图谱构建系统由主流程(红框内)和辅助模块(蓝框内)构成,完成实现了无规则数据到图结构数据的制作流程,下面分别做一下详细介绍
vivo知识图谱-构建系统架构
主流程:
设计理念简介:
在介绍主流程的各核心模块实现之前,我先介绍一下我们整体的设计理念。我们的系统设计分为三层抽象,分别为任务层(Task),领域层(Domain)和类型层(Type)
Task:
Task对应每一个知识图谱数据制作任务,与任务运行的机器IP,是否并行化运行,并行的Core和分片数,数据的存储形式以及数据库地址等概念关联。一个Task指定一个Domain
构建系统设计-Task服务器配置
Domain:
Domain可以理解为顶层分类(人物,景点,商品),在系统中和实体属性名归一化配置,人工干预元数据,领域同义词库,领域实体ID库,实体聚合策略等概念相关。相同的Domain可以建立多个不同的Task
构建系统设计-领域同义词库
构建系统设计-领域实体ID库
Type:
Type是在领域下的二级或三级分类(如历史人物,歌手,演员,体育人物),与本体Schema,属性定义,属性继承关系(如歌手属于人物领域,继承人物如性别、血型等基本属性,同时也有歌手自己的属性如代表专辑、热门歌曲、获奖记录等)相关。一个Type属于一个Domain,相同的Domain会有多个不同的Type
构建系统设计-本体Schema
三层抽象的设计确保了任务调度,数据存储,主流程模块设计,配置文件加载的灵活性
主流程核心模块:
主流程的核心模块主要由源数据导入模块、预处理模块、标准化模块、实体聚合模块、实体融合模块、后处理模块、实体链接模块、数据存储模块构成
源数据导入:
源数据导入模块负责把来自海量网页库,合作方数据库,内部平台库的结构化以及非结构数据抽取及整理成统一数据格式之后,同步到知识图谱数据制作所在服务器。我们使用的数据格式是json格式(json数据格式可扩展性强,天然支持CVT(复杂数值型数据))
预处理:
预处理主要负责脏数据过滤,实体分类(根据实体描述数据或者属性字段确定实体二级或者三级分类,如含有代表影视剧属性,则该实体为演员类型),信息提取(主要负责地名提取以及模板抽取),属性名归一化(不同数据源对于同一个属性命名存在不一致情况,如民族属性字段在搜狗百科叫作民族族群,需要做归一化处理)
标准化:
标准化主要负责值型的处理(如枚举型需要指定值的集合,不在集合内的值认为是不合规的数值类型)和属性值的归一化(如日期型值有2021/3/9或者2021-03-09等表示形式,统一归一化为2021年3月9日)
标准化-属性(毕业院校)值的归一化配置
实体聚合:
实体聚合是主流程最重要的一个模块,主要由实体分桶、判负规则、判正规则,聚合绑定组成,目的是把不同数据源中的相同实体聚合在一起
实体分桶:
实体分桶结合领域同义词库把同名实体数据和同义词实体数据聚合在一个桶里进行成对运算(O(n2)时间复杂度),将相同实体分别进行聚合(以故宫为例,桶内会含有来自不同数据源的北京故宫以及沈阳故宫的数据)
判否规则:
如果两个实体在某个或多个重要属性值上存在不同,则认定这两个实体不是同一个实体(如沈阳故宫和北京故宫在景点所在城市属性上存在不同)
判正规则:
如果两个实体在一个或多个重要属性值上满足判正条件,则认为这两个实体为同一个实体,这两个实体合并为一组实体,整体进行下一轮迭代运算,一直迭代至不再有实体合并为止
在实体的判否判正实现上我们设计了大量的算子进行运算支撑:
字符型算子:如字符串匹配算子,编辑距离匹配算子等
统计型算子:熵算子(在一些特殊值上是否存在一致性),阈值算子(一个或多个属性上相同的值比例大于特定阈值)
模型算子:基于Bert对实体描述信息生成Sentence Embedding,进而计算语义相似度
实体绑定:
实体绑定集合前面介绍的领域实体ID库,将已经聚合好的实体进行绑定固化,直接进行下一轮聚合迭代运算,这样做的目的是为了保证聚合策略的优化是一个收敛的迭代过程(如果想要拆分聚合好的实体,只需要从领域实体ID库中删除对应数据即可)
实体融合:
实体融合模块主要负责将聚合好的不同数据源的实体属性值进行融合,融合策略主要有权威站点策略(来自特定站点的的值置信度高),投票策略(多个站点相同的值置信度高),属性互斥策略(如A不可能既是B的前妻又是B的妻子)。实体融合之后需要生成实体ID,此时需要结合已有的领域实体ID库,如果对应的实体已经在实体ID库中,则沿用已有的实体ID,保证上层应用实体ID的稳定性
后处理:
后处理模块主要是对融合后的实体进行人工干预以及内容挂载。其中在人工干预流程,我们会结合辅助模块中的人工干预编辑模块推送过来的人工干预元数据对实体进行删增改处理,目的是对热点实体的内容更新进行迅速响应(明星的结婚、离婚、去世信息。如吴孟达的去世消息目前我们的系统如果是纯粹的自动化更新,有T+1的延时,而通过人工干预编辑则可以实现T+0的延时)。在内容挂载流程中,我们通过实体ID将众包编辑的经过运营审核的内容和实体相关联,扩展了实体属性值的内容
实体链接:
实体链接是建立同领域和跨领域实体间的链接关系,进一步构建图的存储结构。在链接算法的设计中,我们主要引入了url链接,锚文本反向链接,自定义规则等主要策略和领域实体库中的实体进行链接,同时对实体链接的置信度进行评分。上层应用根据置信度筛选进行使用
url链接:
如果A实体中的属性值含有指向B实体的链接url,则可以通过url找到B实体ID,建立链接关系,此时链接置信度最高为10分
锚文本反向链接:
如果A实体中的属性值对应B实体中含有A实体名称的锚文本或A实体的url,则建立链接关系,此时链接置信度最高为8分
自定义规则:
如果A实体中的属性(姐姐)值为B且B对应的实体属性(弟弟或者妹妹)值为A实体的名称,则建立链接关系,此时链接置信度最高为5分
实体链接-自定义链接规则
数据存储:
最终将实体数据按照存储格式存入HIVE、ES或者是Neo4J(图数据库),同时数据会进入下游数据平台进行进一步抽取,筛选,为应用服务提供支持。同时我们整合了跨领域实体数据建设HIN(异构信息网)建设板块子图(娱乐子图,健康子图),为产品提供问答、搜索、推荐、分析服务
系统特点:
我们结合已有的资料和我们的系统做了对比,整理了我们自研系统的特点及亮点
分层设计:
三层结构的设计使得多个Task可以对相同的Domain进行知识图谱数据制作,并在不同的服务器上进行调度执行,以不同形式进行存储。如人物库我们针对热点娱乐人物和全量人物分别构建了任务,热点人物每天进行对数据源进行更新制作,保证热点人物数据的时效性,存入ES。全量数据则半个月到一个月更新一次,存入图数据库
算子设计:
如上文介绍,我们实现了大量的基础算子,如日期,地点提取算子,实体聚合时的比较算子,为图谱计算提供可插拔的服务支持
并行化设计:
在实现传统的串行制作的同时,我们结合spark设计了并行化执行的模式,在百万级数据的计算量下,性能提升70%左右
人工干预和众包编辑:
我们设计了人工干预元数据编辑模块和众包编辑模块,在后处理的时候通过删除、增加、修改等原子操作对热点实体数据进行实时的人工干预和资源挂载,实现热点实体数据的实时修复和更新
众包编辑
可视化操作:
我们设计了可视化的操作界面可以方便进行数据制作任务的操作
可视化操作界面
以上就是我们知识图谱团队在知识图谱建设层面的探索和总结,希望对大家有所帮助。未来我们知识图谱团队还会在知识中台建设,图谱算法,图谱应用等方面做出后续的技术分享,谢谢大家~
vivo人工智能技术
扫码|关注我们
微信扫一扫
关注该公众号