您的位置:首页 > 其它

Bridging Collaborative Filtering and Semi-Supervised Learning:paper翻译与解读

2017-11-27 11:39 429 查看
桥接CF和半监督学习的POI推荐方式。

是一个使用了神经网络进行POI推荐的工作。

文章中设计了一种叫做PACE的模型声称可以解决推荐问题中数据稀疏和存在一些相关的上下文(指的是某些关系会与推荐结果相关,称作上下文。例如社交关系可能对POI推荐带来影响)的问题。

模型输入:one-hot形式的user向量和POI向量

输出:

1. (user-POI)以0, 1的形式输出,来代表user是否偏好这个POI

2. user与user之间的社交关系

3. POI之间的地理关系

JP是监督学习,输入user-poi对,与现有的user-poi对的标签作比较

JC是无监督学习或者是应用于增强上下文圆滑性的正则化罚项

以上这俩合称半监督,就对应了标题中的内容。



以上是网络结构。

从下向上开始看:

1.最下边一层,对应于上文说的input,输入user和poi的向量表示。E是一个全连接embedding层。声称可以展示出user和poi的隐层因子。

2.然后分别进入S层,这里对应着前文中输出内容的两个上下文输出。两个都是softmax层。

3.将E层中的两个向量连起来,进入到H层。经过一些隐层的处理后,softmax层输出结果。



模型中训练这三个内容时把loss function加在一起进行优化。

JP是user-poi的loss function

JCu和JCp是上下文的,在这里是社交关系和地理位置。

λ代表权重

这个模型说的一点是,现有的模型都是专注于某些上下文,例如用某种特殊方式加入社交成分,用另一种方式加入位置成分,没有普适性;而此模型不会局限于这些,可以随意增加上下文。从以上公式可以看出,此模型把无论是什么上下文都加在一起,可能就是这样解决的普适性问题。

H层:

这个公式可以表示我们的最终预测。我们训练一个Eu和Ep作为user和poi的矩阵,里边每一行都是一个user和一个poi,他们的转置乘以模型的输入值也就是one-hot形式,就可以得到我们输入的那一个特定user和poi的向量。在θ参数的情况下,输入上述的向量,在H层的h函数的作用下,最终输出预测结果y_hat。

在这一步只是将两个向量单纯的相连,而不进行对应元素的相乘来融合两个向量。因为后者不能进行非线性的操作并且两者需要embedding在同一个空间。这里就说明user和poi是单独embedding的。



这是H层中每一个隐层的情况。q代表隐层数。x是上边讲的两个向量的连接。

根据论文中描述,隐层的激活函数是relu,然后最后一层再套一个sigmoid。



如何优化这个模型呢?文中设计了如下的loss function,是普通交叉熵的特例。



L+ 是labeled pairs 也就是说这个user喜欢这个poi, 而L-并不代表这个人不喜欢这个点,举个例子,假如说一个人在一个网站喜欢视频a, b, c,这三个视频组成L+数据集。但并不代表他不喜欢D,因为有可能在别的网站上关注,或者是他还没看过D。本文中的做法是在没有观测到的标签中均匀采样(我个人认为不是一个好的办法),数量和L+相同。

S层:

文中说E层和H层本质上就是用CF对之前的行为进行建模。

接下来说一说创新点。

文中定义一个上下文图来编码上下文信息作为实例之间的关系。

分别用图表示地理位置和社交关系。

地理位置图,v是地点集合,E是点与点之间的边,在这里是和实际距离有关

社交关系图,v是users集合,E是社交关系。





在这篇文章的实际实现中,为了简单,地理位置图通过特定的一个半径r过滤的均匀边构成(我的理解是实际距离小于一个数值的情况下就产生一条边)。

社交关系图的边是朋友。(也就是说是朋友关系才有边)

对于本文的loss function 我们可以把JC部分看作是一个(基于上下文图的)正则项。这个正则项是什么样的呢?





这个上下文关系和word2vec中的skipgram意思差不多,因此就使用它的loss function,word2vec具体知识详见http://blog.csdn.net/yinruiyang94/article/details/78324019

(应该就是一种graph embedding吧)

最后是算法



很简单 先采样user poi对训练JP,然后分别采样user和poi分别训练两个上下文网络,以上三步为一个循环,就这样一直循环下去。。。

看了一遍不知道我理解的对不对,大概就是在半监督学习中将上下文信息渐渐学到user和poi的向量表示中,然后用这个包含了上下文关系的进行一个多层的监督学习,得到(user, poi)的表现的一个输出。

文中声称‘While MF is an extremely simple version of PACE without con-

sidering any context’(引用原文),也就是说他的H层就做到了MF的效果。(简单来说是不是就是一个node2vec + MF呢)

才发现他是有源码的:https://github.com/yangji9181/PACE2017

大概看了一遍代码,差不多就是这个意思。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐