百面深度学习 | 第十期:物品相似度模型

“百面深度学习”系列连载 第十期

物品相似度模型

引言

基于物品相似度的协同过滤算法最早提出于 Amazon 在 2001 年发表于 WWW 的论文 [1] 中。在其后很长的一段时间内,基于物品相似度的协同过滤推荐算法一直是工业界应用最广泛的算法之一;即使在深度学习广泛应用于推荐系统的今天,基于物品相似度的算法仍然具有计算快速、原理简单、可解释性强等其他算法难以比拟的优势。根据用户反馈数据计算两个物品间相似度的最简单方法是计算两个物品间的皮尔逊相关系数(Pearson Corelation)。从优化的角度来看,这一方法并没有显式地优化任何目标函数,一般不将其视为一种机器学习算法,因而我们也有理由相信,使用基于深度学习的算法计算两个物品的相似度,可以取得比上述方法更准确的结果。

问题

如何使用深度学习的方法设计一个根据用户行为数据计算物品相似度的模型?

分析与解答

针对这个问题,我们可以从无监督学习和监督学习两个不同的角度分析:

使用无监督学习的方法解决此问题,最常见的做法是:先构造出物品的低维稠密向量,然后再通过余弦相似度来刻画任意两个物品间的相似度。这类方法中通常借鉴自然语言处理(Natural Language Processing)、网络嵌入(Network Embedding)等领域的相关概念和算法,如 prod2vec [2]、Item2vec [3]、Graph Convolutional Neural Network [4] [5] 等。我们以 prod2vec 为例,来看一下自然语言处理中的算法可以如何应用到解决这一问题上。

百面深度学习 | 第十期:物品相似度模型

百面深度学习 | 第十期:物品相似度模型

Figure 1: 使用skip-gram计算物品相似度

和 word2vec 中的情形类似,若该计算中分母的求和式遍历所有物品,则直接计算复杂度过高,因而一般训练时采用负采样(negative sampling)或层次 softmax(hierarchical softmax)的方法计算。在此基础上,prod2vec 的论文中还提出 bagged-prod2vec 的概念,其基本思想是进一步挖掘和利用每次用户可能购买多件物品的信息,将一次购买的物品组合在一起(即所谓 bagged)。在这一设定下,skip-gram 中的滑动窗口只在这一组合的层次上移动,并且 Eq. 1 中的概率也仅限于不同组合的物品之间。进一步的细节可以参考原始论文,此处不再赘述。

与无监督学习不同,监督学习的方法将学习的过程与线上使用物品相似度的方法结合起来。与上述监督方法相同之处是通常也需要将物品表示为低维稠密向量,但由于优化的目标与最终使用的过程紧密耦合,因而从拟合数据的准确性来讲一般要优于无监督学习的方法。这类方法的基本思路是基于这样一个事实:基于物品相似度的协同过滤算法在线上为用户推荐物品,是通过用户的历史行为的物品查找与之相似的物品完成的。一个最简单的例子是将一个待推荐物品与用户消费过的所有物品的相似度求和,作为该物品的最终得分,而后按照每个物品的得分进行排序并选取得分最高的 K 个物品。在此情形下,我们可以设计一个神经网络模型,其输入为任意两个物品的编号,输出为两者的相似度。在收集了用户的历史行为数据的情形下,我们可以将用户消费过的每一个物品和待推荐物品作为上述网络的输入,并将输出的相似度在该用户所有历史行为的层面上累加,就可以得到用户对该目标物品的评分了,如 Fig. 2 所示。

百面深度学习 | 第十期:物品相似度模型

Figure 2: 监督学习下的物品相似度模型。图中左侧红框内为物品相似度模型的主要部分,输入为两个物品的编号,输出为相似度(模型内部结构可以自由构造,这里仅为示意)。右侧为计算损失函数部分,过程为计算一个用户每个消费过的物品与待推荐物品的相似度后求和作为待推荐物品的得分;对负例按同样的方式计算其得分。物品的得分可以作为输入 softmax(或sigmoid)函数的逻辑位(logit)值,进一步可求得交叉熵等常用损失函数值。

在有了基本的模型后,如何设计损失函数呢?一种方法是收集用户的正负反馈,按 Fig. 2 所示将得分作为逻辑位值用来计算损失函数——当使用sigmoid函数而非softmax函数时,这等价于点击率预测所使用的二分类交叉熵损失函数。然而考虑到收集的数据往往是现有推荐系统生成的结果,其中的负样本分布与用户对全体物品产生负反馈的分布可能有所不同,因而更常见的做法是在所有未见的物品中进行负采样,然后使用多分类交叉熵损失函数或者学习排序(Learning to Rank)类的损失函数。

有了损失函数后,我们就可以训练 fig. 2 中的模型了。训练完成后,模型就可以接受任意两个物品作为输入并输出其相似度了。

[1] SARWAR B M, KARYPIS G, KONSTAN J A, 等. Item-based collaborative filtering recommendation algorithms.[J]. Www, 2001, 1: 285–295.

[2] GRBOVIC M, RADOSAVLJEVIC V, DJURIC N, 等. E-commerce in your inbox: Product recommendations at scale[C]//Proceedings of the 21th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. ACM, 2015: 1809–1818.

[3] BARKAN O, KOENIGSTEIN N. Item2vec: neural item embedding for collaborative filtering[C]//2016 IEEE 26th International Workshop on Machine Learning for Signal Processing (MLSP). IEEE, 2016: 1–6.

[4] MONTI F, BRONSTEIN M, BRESSON X. Geometric matrix completion with recurrent multi-graph neural networks[C]//Advances in Neural Information Processing Systems. 2017: 3697–3707.

[5] YING R, HE R, CHEN K, 等. Graph convolutional neural networks for web-scale recommender systems[C]//Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. ACM, 2018: 974–983.

下期预告

【竞价策略设计

引言

计算广告业务里,实时竞价是一种重要的交易机制,在一次实时竞价交易中,广告主根据广告位的信息,制定一个合理的竞价,流量供给方选择出价最高的广告主投放广告,广告主付出的价格为第二高的竞价。实时竞价广告的计费方式有多种,主流的方式是按点击收费(cost per click, CPC)。

在这个业务模型中,广告主需要一个竞价策略,给出每个流量的竞价。策略面临的约束是预算,含义是广告主在一段时间内的总花费不能超过一个固定的数值。策略的收益可以用广告的总点击次数衡量。这样,在预算约束下,给出最优的竞价策略就是一个对广告主而言很有意义的问题。

问题

用强化学习给广告主的竞价策略优化问题建模,并设计一个用深度网络实现的例子。

丁老师说他是可以在贝叶斯学派和概率学派间随意切换的人,然后给我举例子如何用这两种思维考虑因果推断。他看见我在沉思,问我在想什么,我说,“你给我讲这些我不懂的东西,我就没法写丁老师二三事了啊。”丁老师说,“那我以后要多给你讲一些你不懂的东西。”我说,“呵呵有素材了:-)”

丁老师二三事

说明:“丁老师二三事”是取材于Hulu日常的虚构创作,如有雷同,您别当真~

关注Hulu公众号

你就是最爱学习的仔~

百面深度学习 | 第十期:物品相似度模型