信息到推荐系统的模型

发布于 2020-12-01 18:11:41

**_

推荐系统中,协同过滤(Collaborative Filtering,简称CF)根据用户的历史交互数据,并根据用户的潜在共同爱好进行推荐。然而CF算法也有一些问题:用户数据稀疏(Sparsity),以及冷启动(Cold-start)问题。

_**

为了解决这些问题,研究者们提出在CF模型的基础上加入额外信息。比如社交网络、用户/商品属性、图片信息以及文字信息等。本文考虑将知识图谱(Knowledge Graph,KG)作为额外信息,融入到推荐系统中。

前人将KG融合到推荐系统的相关工作,主要分为两种类别:

embedding-based methods:万物皆可embedding
Deep Knowledge-aware Network (DKN)中,实体embeddings和词embeddings当做不同的通道,然后用CNN网络将他们两者结合到一起(用来新闻推荐)。

Collaborative Knowledge base Embedding (CKE)中,CF模型结合了知识embeddings、文本embeddings,图片embeddings。

Signed Heterogeneous Information Network Embedding (SHINE) 中,模型将情感网络、社会网络、个人网站都进行深度编码。模型用于名人推荐。

优点:embedding-based方法在利用KG辅助推荐系统表现出很高的灵活性

缺点:但这些方法中采用的KGE(Knowledge Graph Embedding)算法通常更适用于图形内链路预测应用(何为图内链路预测:通过已知的网络节点及网络结构等信息,预测网络中尚未产生连接的两个节点之间产生连接的可能性),而推荐场景我们需要更多的去发现潜在用户感兴趣的点,而不仅仅是利用当前也有的节点连接,所以学习好的实体embeddings对于表征实体间的关系作用不大。

path-based method:探索KG中各个实体之间的各种联系,为推荐系统提供额外的指导。
Personalized Entity Recommendation(PER)和Meta-Graph Based Recommendation 将KG视为异构信息网络(Heterogeneous Information networks,HIN),通过关系路径、图表的类型提取基于元路径/元图的潜在特征来表示user和item之间的连接。

优点:path-based 方法以更自然和更直观的方式使用KG。

缺点:但它们严重依赖于手动设计的元路径,这在实践中很难优化。 另一个问题是,在实体和关系不在一个域内的某些场景(例如,新闻推荐)中设计手工制作的元路径是不可能的。

为了解决前人方法中的问题,作者提出RippleNet:

思路:借鉴水波(Ripple)的传播,以user感兴趣的items为种子(seed),在商品知识图谱上,用seed items向外一圈一圈的扩散到其他的items上,这个过程称之为偏好传播(Preference Propagation)。该模型认为外层的items同样属于用户潜在的偏好,因此在刻画user的时候,需要将其考虑进去,而不能仅仅使用观测到的items去表示user偏好。

RippleNet与前人工作的差异:

(1)RippleNet通过偏好传播方法,很自然地将KGE方法融入到推荐系统中;

(2)RippleNet可以从用户历史的item中,发现用户到候选item的可能路径,不需要任何手工设计;

RippleNet 的贡献:

(1)首次将基于embedding-based和path-based的方法结合到基于知识图谱的推荐系统中;

(2)提出了RippleNet模型,这是一个利用知识图谱实现推荐系统的端到端框架,RippleNet通过在KG中偏好传播的方法,不断自动的发现用户的潜在的层级兴趣;

(3)对三个真实世界的推荐场景(电影、图书、新闻)进行了实验,结果证明RippleNet在几个最好的基线上都是有提高的。

模型介绍

知识图谱通常包含有较多实体和实体之间的联系, 例如如图3所示,电影“Forrest Gump”(阿甘正传)与“Robert Zemeckis”(导演)、“Tom Hanks”(明星)、“U.S.“(国家)和“Drama”(戏剧)联系在一起,而“Tom Hanks”则与他主演的电影“The Terminal”(幸福终点站)和“Cast Away”(荒岛余生)联系在一起。这些复杂的联系为我们提供了一个深刻而潜在的视角来探索用户喜好。 例如,如果用户曾经观看过“阿甘正传”,他可能会成为Tom Hanks(汤姆.汉克斯)的粉丝并对“The Terminal“或“Cast Away”也感兴趣。

图3:知识图谱在推荐上的示例
模型框图如图2所示:

图2:RippleNet模型框图
模型输入:一个user u与一个候选item v

模型输出:用户user u点击item v的概率值

图谱知识:提前构造好所有item的(h,r,t)图谱三元组:示例: <'Frost Gump', film.star, Tom Hanks>

第零阶段(seeds):构建用户的seed集合

  1. 先以用户u的历史点击的item作为seeds集合(用这些item作为用户的已有的偏好信息);
  2. 说明一下:用户u的seeds 跟 输入item v的关系,item v如果是seeds中的一员,那就当做训练数据的正例(点击该item概率为1),如果不是seeds的一员,那就是负例(点击该item概率为0),论文代码实现里随机选择除点击外的item作为负例。

第一阶段(Hop1):获取用户的第一次Ripple表示

1.构建与用户u相关的第一次偏好传播的Ripple set(以初始的seeds 集合向外扩展),用(h,r,t)表示。这里为了避免Ripple set 过大,一般都会设定最大扩展长度进行截断;另一方面,构建的知识图谱都是有向图,这里只考虑item点的出度。

  1. 根据embedding向量内积,计算item v与第一层Ripple set上的(h, r)的归一化相似度,根据归一化后相似度,对第一层Ripple set 的(t)进行加权求和,得到的结果作为这一层的输出o(本质上属于Attention,Q=v,K=h*r,V=t);这里用到了图谱假设hR=t。

第二阶段(Hop2):

  1. 重复Hop1过程,将第一层的Ripple set的tail作为第二层的head,先取出第二层的Ripple set,然后用用第二层的Ripple set跟item的相似度及加权表示作为输出o。

.......

第H阶段(Hop H):

  1. 重复Hop过程

预测阶段(predict probability):

  1. 最终的预测是通过item v的embedding和user u的表示进行内积得到,item embedding可以通过embedding 层查找得到。上面多次Ripple得到输出是作为用户的表示,可以把多次的Ripple输出o累加作为最终的用户表示。具体见图2中的多个绿色矩形相加得到。

示例说明:

接下来,我们以第一个绿色矩阵向量为例,来看一下具体是如何计算的。第一个绿色矩形表示的向量,需要使用的是1-hop(KG中第一次向外扩展的item set)的Ripple set,对于set中的每一个(h,r,t),用(h*r)与item v相乘得到item v与1-hop里每个(hi,ri)的相关性得分,再通过softmax进行相关性得分的归一化pi,相关性计算公式如下:

最后通过对所有t进行加权求和,就得到了第一个绿色矩形表示的向量,该向量表示用户在经过第一轮兴趣扩散后的得到的表示:

接下来,我们重复上面的过程,假设一共H次,将多次的兴趣扩散得到的表示进行相加最终user表示:

而最终的预测值是通过item的表示v与用户的表示u内积后再过一个sigmoid函数(sigmoid是为了得到概率),计算如下:

实验结果:

实验结果见表3

表3:实验结果
对三个真实世界的推荐场景(电影、图书、新闻)进行了实验,结果证明RippleNet在几个最好的基线上都是有提高的

RippleNet的代码实现

TensorFlow链接:hwwang55/RippleNet

pytorch链接:https://github.com/qibinc/RippleNet-PyTorch

下面主要以TensorFlow版本作为主要讲解对象。

工程README说明

  1. 数据预处理

原始数据

1)图谱数据:kg_part1_rehashed.txt 三列分别是head , relation , tail

2)用户对item打分数据:ratings.dat 三列分别是 user item rating

3) item与entity的对应表:item_index2entity_id_rehashed.txt ,这个数据是训练中有效的item与它对应的id。

在对数据进行预处理后,我们得到了两个文件:kg_final.txt和rating_final.txt

rating_final.txt数据形式如下,三列分别是user-id,item-id以及label(0是通过负采样得到的,正负样本比例为1:1)。

kg_final.txt格式如下,三类分别代表h,r,t(这里entity和item用的是同一套id):

  1. 代码实现:

网络输入
网络输入主要有item的id,label(0还是1)以及对应的用户u的多层ripple set(h,r,t):
介绍一篇好文章
{%08365c1f-0aef-43f1-8307-4af54f2c2b3b|The particle swarm - explosion, stability, and convergence in a multidimensional complex space|authstr mock|IEEE Trans. Evol. Comput.|2002|10.1109/4235.985692%}

0 条评论

发布
问题

0.062183s