【推荐算法】阿里大规模商品推荐算法

概述

本文为阿里2018年发表论文《Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba》的阅读笔记

论文中提出了淘宝的推荐系统面临的三个挑战:扩展性、稀疏性以及冷启动。文章中提出了改进的基于知识图谱的图表示学习技术解决这三个挑战。他们使用用户在淘宝中浏览商品的session构建知识图谱。然后利用基于游走的图表示学习算法对图谱的商品节点进行向量表示学习。最后计算商品节点之间的相似度用于推荐过程中。

为了解决冷启动和稀疏性问题,他们将边信息融入到图谱表示学习当中。

  • 扩展性:虽然目前很多推荐系统在小规模数据上取得很好的推荐效果,但是运用在大规模数据集上(10亿用户和20亿商品)没有效果。
  • 稀疏性:在大规模商品数据中用户感兴趣的商品只有少数,因此,构建精准的推荐模型非常困难。
  • 冷启动:对于一些新用户吗,在没有用户行为的情况下推荐商品非常困难。

为了解决这三个挑战,他们设计了一个分层模型:第一层为匹配;第二层为排序。在匹配层,主要是找出用户感兴趣商品的相似商品。在排序层,他们训练一个深度神经网络,根据用户的偏好为他们排出候选商品。在这篇论文中,只介绍了如何解决匹配层的问题。

在推荐系统的匹配层有三个重要的部分:

  1. 根据用户的的浏览商品的历史行为,使用启发式方法构建商品图谱。
  2. 使用三种图谱表示学习模型训练节点表示。
  3. 将其部署到实际应用当中验证其有效性
模型框架介绍

论文中使用了最为流行的图嵌入模型之一:DeepWalk。该模型的基本原理是通过随机游走算法生成节点序列,然后使用语言模型对节点序列训练生成节点的向量表示。详情参见博文《Graph Embedding模型【DeepWalk】学习笔记》。

构建商品图谱

如图所示,他们使用用户行为作为商品的连接关系构建商品图谱。论文表示之前的协同过滤仅仅只考虑了商品的共现性,忽视了商品的这种序列性。而这种由用户行为构建的商品序列更能表达用户的偏好。考虑到用户的行为有时效性以及计算量的问题,设置了一个时间窗口。只取1小时之内的用户行为,如图中(a)表示三个用户的行为序列,可以构建出图中(b)的商品图谱。图谱的边的权重则由用户数决定。具体地,如果一个商品到另一个商品的这个行为在同一个时间段有多个用户发生。则这两个商品的边权重就是所有发生这个行为用户的人数。最后过滤一些噪声数据,便形成了最终的商品图谱。
在这里插入图片描述
图表示学习模型

1、 Based Graph Embedding(基准)

论文使用的是DeepWalk模型学习图谱节点的向量表示。为了让模型能够训练带权图,对随机游走的转移概率进行了定义: P ( v j ∣ v i ) = { M i j ∑ j ∈ N + ( v i ) M i j , v j ∈ N + ( v i ) 0 , e i j ∉ ε P(v_j|v_i)=\begin{cases} \frac{M_{ij}}{\sum\limits_{j \isin N_{+}(v_i)}M_{ij}}, & v_j \isin N_{+}(v_i)\\ 0 &,e_{ij} \not \isin \large{\varepsilon} \end{cases} P(vjvi)=jN+(vi)MijMij,0vjN+(vi),eijε其中 N + ( v i ) N_{+}(v_i) N+(vi)表示 v i v_i vi节点的邻接节点, M i j M_{ij} Mij表示节点 i i i指向节点 j j j的边的权重矩阵。通过随机游走便可得到如图中(c)所示的节点序列。
在这里插入图片描述
得到节点序列之后,便可以运用Skip-gram模型学习向量表示,其优化目标: min ⁡ Φ − l o g P r ( { v i − w , . . , v i + w } \ v i ∣ Φ ( v i ) ) \min _{\Phi}-log Pr(\{v_{i-w},..,v_{i+w}\} \backslash v_i|\Phi(v_i)) ΦminlogPr({viw,..,vi+w}\viΦ(vi))其中 w w w表示序列中节点上下文窗口大小,根据独立分布假设 P r ( { v i − w , . . , v i + w } \ v i ∣ Φ ( v i ) ) = ∏ j = i − w , j ≠ i i + w P r ( v j ∣ Φ ( v i ) ) Pr(\{v_{i-w},..,v_{i+w}\} \backslash v_i|\Phi(v_i))=\prod_{j=i-w,j \not=i}^{i+w}Pr(v_j|\Phi(v_i)) Pr({viw,..,vi+w}\viΦ(vi))=j=iw,j=ii+wPr(vjΦ(vi))应用负采用算法可以将优化目标转化成: min ⁡ Φ l o g σ ( Φ ( v j ) T Φ ( v i ) ) + ∑ t ∈ N ( v i ) ′ l o g σ ( − Φ ( v t ) T Φ ( v i ) ) \min_{\Phi}log\sigma(\Phi(v_j)^T\Phi(v_i))+\sum_{t\in N(v_i)'}log\sigma(-\Phi(v_t)^T\Phi(v_i)) Φminlogσ(Φ(vj)TΦ(vi))+tN(vi)logσ(Φ(vt)TΦ(vi))其中 N ( v i ) ′ N(v_i)' N(vi)表示节点 v i v_i vi的负采样, σ ( ) \sigma() σ()表示sigma函数 σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{-x}} σ(x)=1+ex1。实验表明 N ( v i ) ′ N(v_i)' N(vi)越大,结果越好。

2、 Graph Embedding with Side Information(融入边信息)

上面的模型中可以学习商品的向量表示,获取用户行为序列中的高阶相似信息,解决了协同过滤方法的缺陷。但是还并不能解决冷启动问题。于是,在图表示学习中加入边信息。

其中边信息涉及到商品类别、价格、店铺等信息,这些信息之前都是推荐系统的第二步排序层的关键信息。使用这些关键的边信息融入模型训练之后得到商品的向量表示 W ⁡ \operatorname{W} W。具体地, W ⁡ v 0 \operatorname{W}^0_v Wv0表示节点 v v v没有融入边信息的向量表示, W ⁡ v s \operatorname{W}^s_v Wvs表示节点 v v v融入第 s s s类边信息训练得到的向量表示。有 n n n类边信息便可得到 n + 1 n+1 n+1个向量表示, W ⁡ v 0 , W ⁡ v 1 , . . . , W ⁡ v n ∈ R d \operatorname{W}^0_v,\operatorname{W}^1_v,...,\operatorname{W}^n_v \in \R^d Wv0,Wv1,...,WvnRd d d d表示向量维度。最后,将这些向量表示平均得到最终的商品向量表示: H v = 1 n + 1 ∑ s = 0 n W ⁡ v s H_v=\frac{1}{n+1}\sum_{s=0}^n\operatorname{W}^s_v Hv=n+11s=0nWvs

3、Enhanced Graph Embedding with Side Information(EGES)

上面的边信息融合方法并没有考虑边信息在实际应用情况中的贡献度,为了解决这个问题,在计算最终商品向量时引入边信息的权重: H v = ∑ j = 0 n e a v j W ⁡ v j ∑ j = 0 n e a v j H_v=\frac{\sum_{j=0}^n e^{a_v^j}\operatorname{W}_v^j}{\sum_{j=0}^n e^{a_v^j}} Hv=j=0neavjj=0neavjWvj其中 a v j a_v^j avj表示节点 v v v的第 j j j类边信息的权重。如图所示:
在这里插入图片描述

下面为EGES模型的算法:
对于节点 v v v和它的上下文节点 u u u的训练,使用 Z ⁡ u ∈ R d \operatorname{Z}_u \in \R^d ZuRd表示它们的向量表示, y y y表示标签。EGES的目标优化函数: L ( v , u , y ) = − [ y l o g ( σ ( H ⁡ v T Z ⁡ u ) ) + ( 1 − y ) l o g ( 1 − σ ( H ⁡ v T Z ⁡ u ) ) ] L(v,u,y)=-[ylog(\sigma(\operatorname{H}_v^T\operatorname{Z}_u))+(1-y)log(1-\sigma(\operatorname{H}_v^T\operatorname{Z}_u))] L(v,u,y)=[ylog(σ(HvTZu))+(1y)log(1σ(HvTZu))]它的梯度: ∂ L ∂ Z ⁡ u = ( σ ( H ⁡ v T Z ⁡ u ) − y ) H ⁡ v \frac{\partial L}{\partial \operatorname{Z}_u}=(\sigma(\operatorname{H}_v^T\operatorname{Z}_u)-y)\operatorname{H}_v ZuL=(σ(HvTZu)y)Hv对于第 s s s类边信息: ∂ L ∂ a v s = ∂ L ∂ H ⁡ v ∂ H ⁡ v ∂ a v s \frac{\partial L}{\partial a_v^s}=\frac{\partial L}{\partial \operatorname{H}_v}\frac{\partial \operatorname{H}_v}{\partial a_v^s}\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad avsL=HvLavsHv = ( σ ( H ⁡ v T Z ⁡ u ) − y ) Z ⁡ u ( ∑ j = 0 n e a v j ) e a v s W ⁡ v s − e a v s ∑ j = 0 n e a v j W ⁡ v j ( ∑ j = 0 n e a v j ) 2 \quad\quad\quad\quad\quad\quad=(\sigma(\operatorname{H}_v^T\operatorname{Z}_u)-y)\operatorname{Z}_u\frac{(\sum_{j=0}^n e^{a_v^j})e^{a_v^s}\operatorname{W}^s_v-e^{a_v^s}\sum_{j=0}^n e^{a_v^j}\operatorname{W}^j_v}{(\sum_{j=0}^n e^{a_v^j})^2} =(σ(HvTZu)y)Zu(j=0neavj)2(j=0neavj)eavsWvseavsj=0neavjWvj ∂ L ∂ W ⁡ v s = ∂ L ∂ H ⁡ v ∂ H ⁡ v ∂ W ⁡ v s \frac{\partial L}{\partial \operatorname{W}^s_v}=\frac{\partial L}{\partial \operatorname{H}_v}\frac{\partial \operatorname{H}_v}{\partial \operatorname{W}^s_v}\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad WvsL=HvLWvsHv = e a v s ∑ j = 0 n e a v j ( σ ( H ⁡ v T Z ⁡ u ) − y ) Z ⁡ u =\frac{e^{a_v^s}}{\sum_{j=0}^n e^{a_v^j}}(\sigma(\operatorname{H}_v^T\operatorname{Z}_u)-y)\operatorname{Z}_u\quad\quad\quad\quad\quad\quad =j=0neavjeavs(σ(HvTZu)y)Zu其整个模型算法如下:
在这里插入图片描述
在这里插入图片描述

总结

阿里这这篇论文解决了大规模数据的问题,冷启动的问题以及稀疏度的问题,它主要是靠随机游走获取节点序列,然后借鉴语言模型,相似的商品在同一向量空间的向量表示距离更接近,使用skip-gram模型训练节点序列。

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阿里社招推荐和NLP算法工程师的笔试中可能会出现的算法题有很多种,我将为你提供一个例子进行回答。 假设题目要求设计一个基于协同过滤的电影推荐系统,根据用户的历史观影记录,为用户推荐其可能喜欢的电影。 首先,我们需要建立一个电影评分矩阵。矩阵的行表示用户,列表示电影,每个位置的值表示用户对该电影的评分。该评分矩阵可以通过采集用户行为数据和问卷调查的方式得到。 接下来,我们需要计算用户之间的相似度,然后为用户推荐那些和他们之前喜欢的电影相似的电影。常用的相似度计算方法有余弦相似度和皮尔逊相关系数。 具体算法步骤如下: 1. 对于一个指定用户,找到与其有相似观影记录的其他用户。 2. 根据这些相似用户的观影记录,计算推荐列表。 3. 根据推荐列表和已观看的电影,为该用户生成最终的推荐结果。 这个算法题主要考察了协同过滤算法的应用,以及相似度计算的方法。同时,对于大规模的数据集,还可能需要考虑算法的优化和并行化处理。 总结起来,阿里社招推荐和NLP算法工程师笔试中的算法题目涉及多种多样的问题,需要候选人具备扎实的算法和数据结构基础,对相关领域的理论和实践有深入的了解,并能够灵活应用所学知识解决实际问题。编程能力和思维的严密性也是评估的重要因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值