DropoutNet: 推荐系统冷启动

2019-11-30  本文已影响0人  夏安的算法学前班

https://zhuanlan.zhihu.com/p/94444593

DropoutNet: Addressing Cold Start in Recommender Systems. 作者 layer6.ai的人。

NIPS 2017的文章,关于推荐系统冷启动的。所谓冷启动,就是说对“新用户”“新物品”该怎么办。这文章思想挺简单的,,,也就简单一写完事了,,,虽然文章说是提出模型,但我感觉其实就是说了一种训练模型的方法,好像有点水的样子(乱讲)。。

摘要:一个基于神经网络的latent model。并没有在目标中加上content-based的目标项,本文是探索了优化方式。有开源代码 layer6ai-labs/DropoutNet.

introduction: 主要的协同过滤方法分为两类:neighbor-based和model-based。基于模型的方法,尤其是latent models,很受欢迎,因为可以对数据建立compact representations,实现高准确率。latent model一般也就是去学target preference matrix的低秩表示。当preference稀疏的时候就开始表现不好了,最极端的情况就是冷启动,毫无偏好信息。这时候想要搞个性化推荐,就要利用额外的content信息。基础的隐语义模型不嵌入内容的,所以搞了一堆混合模型,对学习和推理都有负担。而且,目标函数中的content部分,是生成式的,是在让模型解释content而不是用content来使推荐更准。

冷启动其实相当于是数据缺失。所以本文不改目标函数,而是在训练过程中搞事情。关键思想是,对输入的mini-batch用一下dropout,让dnn可以泛化一下缺失的输入。

1. N个用户  

2. M个item的物品集  

3. 用户对物品的反馈(行为)表示为一个N*M的矩阵R, R_uv就是u对v的行为,可以是明确的打分,也可以是通过展示、播放、购买等行为推断出来的。

  3.1 显式打分很好理解,隐式推断其实也好理解,不过一般是二元的01 。

  3.2 没有偏好R_uv值就是0。

  3.3   表示对v有偏好的u集合,为空表示item v冷启动;  表示u有偏好(行为)的v集合,为空表示user v冷启动。

4. 所谓content information,比如说item的文本啊、音频啊、图片啊、视频啊,user的profile(年龄、性别、位置、设备)、社交(脸书、推特)等。这些信息可以表示成定长的向量。   分别表示用户、物品的content特征;对特定的u 或 v就是   .content缺失的时候就0呗。

5. 我们的目标就是利用R和phi^U,phi^V,学个推荐的模型。

relevant work就不写了。没啥意思。

想要模型既可以冷启动也可以热启动。输入既有preference也有content。

输入可以直接用R的行和列,但是uv一多的话矩阵太jr大了。所以要用低秩的latent representation: R_{uv}\approx U_u V^T_v 。右边两个的维数D远小于min(N, M)。

维数小,模型复杂度就低,多好啊,所以就用这俩低秩的做输入吧。看图就行。

模型:

图上有四列框框。第一列是输入;第二列是dnn,为了把输入搞成emb;第三列还是dnn,它的输入的第二列输出的concat;第四列就是最终的新emb。

所以说,如果输入本来就可以concat起来了,那就不需要第二列了。

最后学出来第四列的表示,就可以UV乘起来得到score了。实际应用中,既可以采用UI召回,也可以用item的emb搞II倒排召回。

重点就在于学习过程了,首先是目标函数:实际应用中,可以直接以样本本身的01为label,因为往往原始的UV也是以此为目标学习的。

在训练过程中,对输入的user或item的preference随机置0,这就是input dropout,也就是模拟了冷启动的情况。

有dropout的pair会使模型只能利用content信息,没有dropout的pair使模型倾向于只用preference信息,最后就有一个平衡。另一个优点是,dropout本来也是正则化模型的一种方法。

使用(2)式loss的缺点是:依赖输入的latent model的效果。

模型训练好了,可以用了,这时候发现,诶,对冷启动的用户或者item,我并没有输入的U或者V啊(前置的latent model也许不实时),那怎么办呢?那就用均值代替,用户就用物品均值,物品就用用户均值,这就是上面训练过程里transform的原因。

用来推荐的时候,就先用均值顶一顶,等latent model更新了UV表示之后,再用真正的input前向一遍网络。

实验部分不写了,有个实验结果来看网络更深也不一定效果更好,网络用了tanh激活函数。

就这样吧,这文章其实也就这么回事,我感觉是不能带来质的提升。

上一篇下一篇

猜你喜欢

热点阅读