论文:
论文题目:《Large-scale Collaborative Filtering with Product Embeddings 》
论文地址:https://arxiv.org/pdf/1901.04321.pdf
亚马逊这篇论文还挺有意思的。。在我看来是多个方法的组合拳,里面的每个结构和方法都可以在我们以前的文章中找到思路。
一 、背景
在前面的文章里面我们也介绍过协同过滤算法了,当然前面介绍的协同过滤算法有基于jaccad方法的,也有基于神经网络方法的。亚马逊这篇文章从传统的矩阵分解和隐语义模型触发,分析了这些传统协同过滤的不足之处,并且引出了自己的方法。
本文在隐式反馈协同过滤的框架下提出一种基于深度学习的方案解决大规模个性化推荐问题,该方法融合了深度注意力机制,以内容无关的历史行为权重,和表示学习技术,模型达到超高负载,并能方便融合新的信息,计算效率较高。
传统的基于用户和物品隐向量的推荐系统最多只能扩展到用户和物品量级的线性级别,当用户和物品量级巨大的时候,基于矩阵分解的协同方法计算量和内存消耗是个难题。我们知道,除了user本身的id信息意外,还有很多能提供很多有用信息的side-information,在MF框架里面,这些side-information信息是很难加进去的。
如果采用Latent Factor模型,也会有带来其他问题,一个就是单层的线性模型无法准确表达出user和item向量,如果在这个单层线性模型上进行改进,改成非线性多层的结构,这种结构可以融入side-information信息,但是这些信息一般都比较稀疏。
为了学习item的embedding信息,可以采用nlp领域中对word embedding学习的方法,比如bag-of-words或者word2vec这些方法。当我们利用这些方法得到item-embedding后,怎么利用这些embedding信息就成了另一个问题,对这些embedding平均特别吸引人,因为它的简单性,处理可变大小的用户行为历史的能力以及易于合并新信息的能力。在某些场景中,使用静态组合操作可能不是最佳选择,并且使用可以适应当前上下文的学习型组合函数,可以实现显着的改进。
其实上面对item embedding静态操作的批判是为了引出attention机制,我们知道,在用户的历史行为序列中,只有少部分item是跟候选的item有关系的,这个在din以及dien两篇论文中已经阐述过了,这里就不在赘述了。那么,我们只需要让这些跟候选item最相关的几个历史行为来对后面对用户兴趣做预估就可以。为了实现这样的操作,只要利用到attention操作了。
很多方法其实都没有对item embedding进行预训练,而且对item的embedding进行初始化,然后随着整个任务的训练而训练。在这个方面,亚马逊对此进行了改进,他们采用了预训练的item embedding来对下游的协同过滤任务进行服务,这种方法的有效性在nlp领域中已经得到了验证,比如预训练的bert模型。
使用预训练而不是联合学习的目的是简化问题,降低参数量,模型可以独立训练。这一点对于要求模型要持续更新的大规模推荐场景是非常重要的。尽管这一点会限制模型表达能力,但具体的限制程度不是很确定。使用固定隐向量也可以帮助确认实验效果是由于架构的不同导致的。
二 、模型
2.1 item2vec
这个可以参考skip gram with negative sample的方法,具体细节就不多说了,懂得都懂,不懂的去看前面那篇air-bnb那篇文章(https://www.jianshu.com/writer#/notebooks/41708179/notes/71024234)。
2.2 model
其中i是用户u点击过的物品,f,g和h三个不同的函数。解释下这两个公式吧,就是我们对查询item q的embedding做一次函数映射,对点击序列的item也做一次不同的函数映射。用这两部分的结果来计算一个attention的weight,为什么要用不同的函数呢?我们在前面说了,通过预训练学习到的embedding在后面的训练中是固定不变的,为了能适应不同的场景以及语境,我们需要用不同的函数来进行拟合,这里说的有点抽象了,其实就是为了更好的让学习到的那些固定的embedding能拟合这个任务。所以,有了pi后,我们又用了另一个函数g来对这些user behavior进行加权求和,这里的g也是不一样的,也是为了使得物品的隐向量可以被用于各种用途,而不必每次重新学习海量物品的表示。
上面的模型图可以参考memory network的结构,关于memory network这个模型,感兴趣的可以自己去看一下。
上面的两个公式只是一次attention的过程,我们从模型结构图也看到了,总共有多次这样的操作:
最终的预测:
其中f,g,h为:
xq是候选item的embedding,是参数,为了把z的分数映射到0-1上,还使用了sigmoid函数。
2.3 损失函数
Su是正样本,A\Su是负样本。
这个损失函数是基本的交叉熵损失函数,但是在样本类别很不均衡的训练集中,这么训练的话是会有问题的,所以需要进行负采样,采样的概率如下:
其中=0.75,跟skip-gram里面的采样方法是一样的,都是对出现的item的频率取指数,然后做归一化。
除了负采样以外,处理样本不均衡问题还可以采样loss加权:
三、实验结果
负采样参数对实验结果的影响:
K对实验结果的影响:
网友评论