Neural Collaborative Filtering阅读笔记
Posted zhongrui_fzr
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Neural Collaborative Filtering阅读笔记相关的知识,希望对你有一定的参考价值。
2017-深度协同过滤
代码地址:pytorch版
https://github.com/hexiangnan/neural_collaborative_filtering
作者何向南
使用神经结构替换矩阵分解的内积
摘要
近几年来,深度学习在推荐系统领域应用不多,本文力争使用深度学习解决推荐系统领域的关键问题:隐式反馈的协同过滤
尽管最近也有一些工作将深度学习应用于推荐领域,但都主要集中在对辅助信息建模上,比如物品的文本描述、音乐的声学特征等等。
但对于协同过滤中的关键点,用户和物品的交互建模上仍然是矩阵分解MF,然后使用用户和物品的隐特征做内积。
本文提出了一种通用框架,NCF(Neural network- based Collaborative Filtering),基于神经网络的协同过滤,它把内积部分替换成了可以拟合任意函数的神经网络结构。
NCF是一个通用框架,可以表达并泛化到矩阵分解。为了提高NCF的非线性,本文提出使用MLP学习用户物品交互函数。最后在两个实际数据集上验证了NCF远优于sota方法。经验表明,使用深度神经网络能提供更好的推荐效果。
深度协同过滤
先说明如何使用强调隐式反馈二值性的概率模型学习NCF,再阐明NCF可以表达MF并泛化到MF。为了探索用于协同过滤的DNN结构,本文提出了一个NCF实例,使用MLP学习用户物品交互函数。
最后,本文提出一个在NCF框架下融合MF和MLP的新的深度矩阵分解模型,既有MF的线性优势,又利用MLP的非线性建模用户物品的隐特征。
通用框架
为了实现一个全神经网络的协同过滤,引入多层表示来建模用户物品交互,上一层的输出是下一层的输入。如下图所示,
- 最底层的输入input layer由两个描述用户和物品的特征向量
v
u
U
v^U_u
vuU和
v
i
I
v_i^I
viI组成,它们可以被定制成各种各样的用户物品模型,比如上下文感知,基于内容,基于近邻等等
鉴于本文集中于纯粹的协同过滤场景,只使用用户身份和物品独热编码的二值稀疏向量作为输入特征。使用通用特征表示作为输入的另一个好处是使我们的方法可以通过引入内容特征表示用户和物品来轻易解决冷启动问题。 - 输入层之上是embedding layer,这是一个全连接层,将稀疏表示映射为稠密向量。得到的用户/物品embedding可以看做是隐因子模型中的隐向量。用户和物品的embedding随后喂给一个多层神经网络结构,本文称之为深度协同过滤层,将隐向量映射到预测分数。
- Neural CF layers的每一层都可以定制化为挖掘用户物品交互的某种隐式结构。最后一层隐层X的维度决定了模型的表达能力。
- 最后是输出层output layer,预测分值
y
^
u
i
\\hat y_ui
y^ui,训练也是通过最小化
y
^
u
i
\\hat y_ui
y^ui和目标值
y
u
i
y_ui
yui之间的pointwise loss进行的。
我们注意到训练本文模型的另外一种方式是pairwise学习,比如使用贝叶斯个性化排序BPR和margin-based loss。由于本文的重点是神经网络建模部分,我们把pairwise learning的扩展部分作为未来工作。
现在NCF的预测模型可以表达为: y ^ u i = f ( P T V u U , Q T V i I ∣ P , Q , ⊝ f ) \\hat y_ui = f(P^T V_u^U, Q^T V_i^I|P, Q, \\circleddash_f) y^ui=f(PTVuU,QTViI∣P,Q,⊝f),其中 P ∈ R M X K P\\in R^MXK P∈RMXK和 Q ∈ R N X K Q\\in R^NXK Q∈RNXK,分别表示用户和物品的隐因子矩阵, ⊝ f \\circleddash_f ⊝f表示交互函数f的模型参数。
函数f是一个多层神经网络,可以描述为 f ( P T V u U , Q T V i I ) = ϕ o u t ( ϕ X ( . . . ϕ 2 ( ϕ 1 ( P T V u U , Q T V i I ) ) . . . ) ) f(P^TV_u^U, Q^TV_i^I) = \\phi_out(\\phi_X(...\\phi_2(\\phi_1(P^T V_u^U, Q^TV_i^I))...)) f(PTVuU,QTViI)=ϕout(ϕX(...ϕ2(ϕ1(PTVuU,QTViI))...)),其中, ϕ o u t \\phi_out ϕout和 ϕ x \\phi_x ϕx分别表示输出层和第x层深度协同过滤层,Neural CF共有X层。
学习NCF
现有的pointwise方法大部分都是使用平方损失回归学习模型参数:
L
s
q
r
=
∑
(
u
,
i
)
∈
y
⋃
y
−
w
u
i
(
y
u
i
−
y
^
u
i
)
2
L_sqr=\\sum_(u, i)\\in y\\bigcup y^- w_ui(y_ui - \\hat y_ui)^2
Lsqr=∑(u,i)∈y⋃y−wui(yui−y^ui)2,其中y表示Y中观测到的行为,
y
−
y^-
y−表示负样本,可以是所有没观测到的行为也是未观测行为的采样,
w
u
i
w_ui
wui是一个超参数,表示训练实例(u,i)的权重。然后平方损失的前提是观测数据是服从高斯分布的,本文认为这一点可能并不符合隐式反馈数据,因为隐式反馈的目标值
y
u
i
y_ui
yui是二分值0或1,表示u是否和i有交互。接下来,我们会提出一种学习pointwise NCF的概率方法,重点关注隐式反馈的二值属性。
鉴于隐式反馈的一元本质,可以把
y
u
i
y_ui
yui的值看做是标签,1表示物品i和用户u相关,0则无关。预测分数
y
^
u
i
\\hat y_ui
y^ui表示物品i和用户u的相关度。为了让NCF有这样的概率解释,需要限制输出
y
^
u
i
\\hat y_ui
y^ui的范围在[0,1]内,这一点使用概率函数(如Logistic函数或Probit函数)作为输出层
ϕ
o
u
t
\\phi_out
ϕout的激活函数非常容易做到。
由此,得到似然函数:
p
(
y
,
y
−
∣
P
,
Q
,
⊝
f
)
=
∏
(
u
,
i
)
∈
y
y
^
u
i
∏
(
u
,
j
)
∈
y
−
(
1
−
y
^
u
j
)
p(y, y^-|P, Q, \\circleddash_f) = \\prod_(u,i)\\in y\\hat y_ui \\prod_(u,j)\\in y^-(1-\\hat y_uj)
p(y,y−∣P,Q,⊝f)=∏(u,i)∈yy^ui∏(u,j)∈y−(1−y^uj)
取负的对数似然,得到:
L
=
−
∑
(
u
,
i
)
∈
y
l
o
g
y
^
u
i
−
∑
(
u
,
j
)
∈
y
−
l
o
g
(
1
−
y
^
u
j
)
L=-\\sum_(u,i)\\in ylog \\hat y_ui - \\sum_(u,j)\\in y^-log(1-\\hat y_uj)
L=−∑(u,i)∈ylogy论文笔记之Neural Collaborative Filtering
第九周.01.Neural Graph Collaborative Filtering
推荐算法论文:Neural Collaborative Filtering
Neural Collaborative Filtering(神经协同过滤)
论文笔记-Item2Vec- Neural Item Embedding for Collaborative Filtering
DNN论文分享 - Item2vec: Neural Item Embedding for Collaborative Filtering