Large-scale Collaborative Filtering with Product Embeddings阅读笔记

Posted zhongrui_fzr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Large-scale Collaborative Filtering with Product Embeddings阅读笔记相关的知识,希望对你有一定的参考价值。

embedding系列
2019 Amzaon融合协同过滤和注意力机制,学习物品向量,线上效果超过最优模型
没有找到代码地址
本文在隐式反馈协同过滤的框架下提出一种基于深度学习的方案解决大规模个性化推荐问题
该方法融合了深度注意力机制,以内容无关的历史行为权重,和表示学习技术,模型达到超高负载,并能方便融合新的信息,计算效率较高
离线实验和其他替代方案做了对比,结果表明有较大提升。线上表现与当前线上个性化物品推荐效果相当

传统的基于用户和物品隐向量的推荐系统最多只能扩展到用户和物品量级的线性级别,当用户和物品量级巨大的时候,基于矩阵分解的协同方法计算量和内存消耗是个难题
本文探索了大规模协同过滤隐式反馈下预训练物品隐向量的很多方法
本文仅基于用户和物品的交互历史数据学习物品的隐向量,物品向量的学习方法是基于2013年Mikolov的Word2vec方法(skip-gram),用排序过得用户行为代替单词序列
每个序列包含单个用户的购买,物品查看,数字视频和音乐流。有一个窗口在每个序列滑过,并记录窗口内的共现对。
对每个物品i,这样会产生一个共现上下文,即物品集合Si。除了共现上下文的正样本集合Si,还在物品中根据某些分布随机采样了负样本集合Ni。
这样做的目的是希望学习到的隐向量能把频繁共现的物品映射到相似的位置,不相似的物品保有一定距离。
学习完隐向量后保持不变,作为后续模型和工作的直接输入。
使用预训练而不是联合学习的目的是简化问题,降低参数量,模型可以独立训练。这一点对于要求模型要持续更新的大规模推荐场景是非常重要的
尽管这一点会限制模型表达能力,但具体的限制程度不是很确定。使用固定隐向量也可以帮助确认实验效果是由于架构导致。

基于注意力的协同过滤

很多大规模电商数据集用物品类型和分类表示用户交互特征。对于判断一个给定物品是否和某个用户相关的任务,可以假设只有用户历史交互行为的子集能提供有用信息,而且这个近似子集可能会根据物品变化而变化。
对历史物品交互使用求和或取平均这样的静态联结操作所产生的表示,并不能有这样的选择性。本文使用另一种联结操作,独立于查询的权重平均(注意力),提供一个更近似的集合。

模型描述

本文使用概率的方法排序物品,目的是基于观测到的用户历史交互 对用户u可能与物品q产生交互的可能性建模。
模型的第一步是使用参数化的函数h和f分别转换候选物品q和每个之前观测到的物品i。
q转换后的表示和用户之前交互过的物品逐个点积比较。这些比较结果经过softmax函数的normalize后产生一个注意力权重向量
p i = s o f t m a x ( f ( x i ) T h ( x q ) ) , i ∈ A u p_i = softmax(f(x_i)^T h(x_q)), i \\in A_u pi=softmax(f(xi)Th(xq)),iAu
下一步, A u A_u Au中的物品向量经过转换函数g被约减到单个d维向量,然后根据权重 p i p_i pi取凸组合
z = ∑ i ∈ A i p i g ( x i ) z=\\sum_i\\in A_i p_i g(x_i) z=iAipig(xi)
这一系列组合成多层操作。通过将query和注意力机制的输出相加并将其结果作为下一层的query
K层结果可以写为:
z 0 = h ( x q ) z^0 = h(x_q) z0=h(xq)
p i k = s o f t m a x ( ( f k ( x i ) ) T z k − 1 ) p_i^k = softmax((f^k (x_i))^T z^k-1) pik=softmax((fk(xi))Tzk1)
z k = z k − 1 + ∑ i ∈ A u p i k ( g k ( x i ) ) z^k = z^k-1 + \\sum_i\\in A_u p_i^k (g^k (x_i)) zk=zk1+iAupik(gk(xi))
k=1, … , K
得到的联合结果表示 z : = z K z := z^K z:=zK 即query项q和用户的历史交互物品集合 A u A_u Au被约减为一个分数
r ( q , A u ) = σ ( ϕ T z ) r(q, A_u) = \\sigma(\\phi^T z) r(q,Au)=σ(ϕTz) , σ ( ∗ ) \\sigma (*) σ()是logistic函数,$ \\phi \\in R^d’$是所有用户-查询query对共享的权重向量

f, g, h函数的使用使得物品的隐向量可以被用于各种用途,而不必每次重新学习海量物品的表示
层与层之间的参数不共享,所以每层可能关注的是不同方面的相似度。
在本文的实验中,f,g,h使用的是单层线性神经网络的形式
f k , g k , h : R d ⟶ R d ′ f^k, g^k, h: R^d \\longrightarrow R^d' fk,gk,h:RdRd
f k ( x ) = B f k x + c f k f^k(x) = B_fkx + c_fk fk(x)=Bfkx+cfk
g k ( x ) = B g k x + c g k g^k(x) = B_gkx + c_gk gk(x)=Bgkx+cgk
h ( x ) = B h x + c h h(x) = B_h x + c_h h(x)=Bhx+ch

目标函数

为了优化模型,本文把用户的交互项集合 A u A_u Au分解成未来和观测到的物品交互。根据历史交互预测未来交互把整个问题化简成多标签分类问题,这样就可以通过最小化负log似然解决
L ( θ ) = − ∑ u ∈ U ∑ q ∈ A [ I q ∈ S u l o g γ ( q , τ ) + I q ∈ A \\ S u l o g ( 1 − γ ( q , τ u ) ) ] L(\\theta) = -\\sum_u\\in U \\sum_q\\in A[\\mathbb I \\q\\in S_u\\log\\gamma (q, \\tau) + \\mathbb I \\q\\in A \\backslash S_u \\ log(1-\\gamma(q, \\tau_u))] L(θ)=uUqA[IqSulogγ(q,τ)+IqA\\Sulog(1γ(q,τu))]
但是实际应用中 ∣ A ∣ |A| A会很大,这样以来将所有物品相加的计算量就会很大。本文采用了负采样技术来缓解这个问题。对于每个用户根据平滑的经验分布 P γ P_\\gamma Pγ采样一个负样本集合, N u ⊂ A , N u ⋂ S u = ∅ N_u \\subset A, N_u \\bigcap S_u = \\varnothing NuA,NuSu=
为了能在训练过程中采样,本文采用了替代方法,以O(1)的时间根据类别分布采样。损失函数中给每个训练实例中的正负样本相同的权重方案,这样可以保持损失规模和每个实例中的正负样本数目无关。
这也使得调参更加容易。因此得到以下损失函数:
L ^ = − ∑ u ∈ U [ 1 2 ∣ S u ∣ ∑ q ∈ S u l o g γ ( q , τ u ) + 1 2 ∣ N u ∣ ∑ q ∈ N u l o g ( 1 − γ ( q , τ u ) ) ] \\hat L = -\\sum_u\\in U [\\frac12|S_u| \\sum_q\\in S_ulog\\gamma(q, \\tau_u) + \\frac12|N_u|\\sum_q\\in N_ulog(1-\\gamma (q, \\tau_u))] L以上是关于Large-scale Collaborative Filtering with Product Embeddings阅读笔记的主要内容,如果未能解决你的问题,请参考以下文章

Neural Collaborative Filtering阅读笔记

Neural Collaborative Filtering阅读笔记

搜广推 召回模型 协同过滤(Collaborative Filtering) - UserCF, ItemCF

协同过滤 Collaborative Filtering

论文阅读|深读LINE: Large-scale Information Network Embedding

The Anatomy of a Large-Scale Hypertextual Web Search Engine