知识图谱与推荐系统
什么是知识图谱
知识图谱是由Google公司在2012年提出的新概念。用信息可视化技术将知识以图的形式表示,图由节点和边构成,节点对应知识图谱的实体,自然界中的每个对象都可以称之为一个实体,例如人,公司,酒店,甚至酒店内的某个房间都可以称为实体;边对应知识图谱的关系,及实体之间的关系,比如酒店位于北京市,“位于”就是酒店和北京市之间的关系。
image.jpeg
google对于知识图谱有一个非常重要的定义,things not strings。过去人们通过搜索引擎获取大量信息,其中相当多是我们不想要的,当然也包括广告,甚至有一些噪音。
推荐系统为什么要知识图谱
传统的推荐系统会根据用户的历史行为,为用户打上隐形标签,并为用户推荐相关的产品。假设用户订购了普吉岛的旅游产品,比如自由行,用户的原因可能是喜欢旅游,喜欢海岛,于是推荐系统为该用户打上了“喜欢海岛”的标签,为该用户推荐了很多海岛的相关产品;有些用户可能喜欢普吉岛的某些服务,例如露天泳池,某家酒店等,推荐系统则引入酒店等一些特征加入推荐模型中;某些用户因为去普吉岛只需要落地签,不需要额外的手续,于是推荐系统加入了签证相关的特征;某些用户因为去普吉岛的机票打折,喜欢泰国的一些旅游景点,喜欢海鲜等,如果将这些特征全加入推荐系统,会发现推荐系统变得很困难。
酒店数据,机票数据,签证数据,景点数据等,每种数据都需要单独的数据库或者数据表去维护,将这些数据联合分析可能要做大量的BI工作,这些繁杂的分析都可以用知识图谱取代,这就是旅游业需要知识图谱的原因。
知识图谱怎么构建
1)定义schema,比如实体的类型,数据类型,属性类型,类别等
2)做一些知识采集的操作,从文本中抽取关系,从外部知识库补充一些已有的三元组
3)数据库迁移,从sql数据库中的数据迁移到知识库中,数据库备份,数据结构的转换
4)实时更新就是检查数据的一致性,对重复的内容做知识融合,比如china和中国,尽量保证实体的唯一性。
实现层,大概分成六个步骤,分别是知识获取、知识抽取、知识融合、知识存储、知识推理、知识建模和知识发现
- 知识获取是获取外部数据的方式,包括爬虫和实时入库的技术方法;
- 知识抽取就是,对三元组进行知识的抽取,包括实体抽取、关系抽取和属性的抽取;
- 知识融合就是,抽取出来之后,存在很多的数据冗余和噪声,要去做实体的消歧,数据的整合;
- 知识存储,刚才讲了,实际是要构建一个三元组RDF的数据结构,如果把所有的顶点和边构造出来之后,要对他进行图数据库的存储;
- 知识推理,刚才也讲到了,如果要做一些深层次的知识问答,就要做很多的训练,无论有监督的还是半监督的;知识建模更多的是去理解语义,涉及到属性的映射,实体的连接;
- 知识发现,两大主要的应用是知识的检索和知识的问答。这些构建了知识图谱的实现层。
图片.png另外还需要做的是实体对齐和实体消歧。
关于实体对齐。举例来说,比尔盖茨这四个字是中文名称,Bill Gates是他的英文名称,但其实这两个指的是同一个人。由于文本的不一样,开始的时候导致这是两个实体。这就需要我们对它进行实体对齐,把它统一化。
另外是实体消歧。举例来说,苹果是一种水果,但是在某些上下文里面,它可能指的是苹果公司。这就是一个实体歧义,我们需要根据上下文对它进行实体消歧。
图片.png
刚才多次提到三元组,到底什么是三元组,一部分是一些概念、实体、语义、内容、属性。我们对于语言的理解,主要还是通过主谓宾的方式去构建,主谓宾就是典型的一个三元组,把它应用到知识图谱就是RDF。RDF有非常多的构建方式,下面举了两种例子。一种是实体、关系、实体的方式,一种是实体、属性、属性值的方式。举个例子,某某法人京东,构建了一个非常简单的三元组,可以理解某某是京东的法人。
这里对图数据库的存储结构做简单的展示,目前主流的图数据库是通过RDF的方式去构建,GraphX把顶点和边分别存储,属性和属性值和点边产生依赖。TITAN把顶点、边和属性全部拆分开去构建。Neo4j是RDF去构建,通过指针跳转的方式去连接,各有千秋。
怎么跟推荐系统结合
知识图谱一般不用于基于特征的推荐系统,一般用于基于路径的推荐,分为两种meta-path和meta-graph,用户喜欢普吉岛的酒店,喜欢spa服务和泳池,可以建立这样的一条路径作为推荐系统的特征,参与计算。缺点:需要提前设定这样的路径,不支持自动搜索路径。知识图谱特征学习,将特征转化为向量的形式,辅助推荐。应用于embedding,协同过滤中只考虑user特征和item特征,可以利用知识图谱作一些特征,embedding有很多方法,深度学习。