想要了解推荐系统?看这里!(2)——神经网络方法

如下内容由第四范式先荐团队编译, 原文发布于 Medium,做者 Steeve Huang。转载内容仅用于学习交流,版权归原做者全部。

1.背景

在上一篇文章《想要了解推荐系统?看这里!(1)——协同过滤与奇异值分解》中,咱们谈到了协同过滤(CF)与奇异值分解(SVD)如何用于构建推荐系统。随着神经网络的兴起,如何利用这种技术构建推荐系统也引发了不少人的关注。这篇博文将介绍Spotlight——由PyTorch支持的推荐系统框架。python

2. Spotlight

Spotlight是一个很好实现的python框架,用于构建推荐系统。它包含两种主要类型的模型,分解模型和序列模型。后端

分解模型利用SVD背后的思想,将效用矩阵(记录用户和项目之间交互的矩阵)分解为用户和项目矩阵的两个潜在表征,并将它们反馈到网络中。数组

序列模型使用时间序列模型构建,例如长期短时间记忆(LSTM)和一维卷积神经网络(CNN)。因为Spotlight的后端是PyTorch,请确保在使用PyTorch以前已安装了正确版本的PyTorch。bash

交互微信

在Spotlight中,效用矩阵被称为交互。要建立隐式交互,咱们为每一用户-项目交互对分别指定ID。附加的评级信息则把隐式交互转换为显式交互。网络

分解模型框架

分解模型采用隐式或显式交互。接下来本文将对隐式交互进行简要说明。运维

隐式交互的理念与SVD很是类似,用户和物品被映射到潜在空间,能够直接进行比较。通常来讲,咱们用两个嵌入层分别表示用户和项目。函数

目标是咱们传入的交互(效用矩阵)。为了计算用户-项目对的得分状况,咱们采用该用户和项目的潜在表征的点积,并将其传递给sigmoid激活函数。工具

经过计算真实交互的全部用户-项目对的损失,咱们能够反向传播和优化嵌入层,结构以下图所示。

这种模型只须要几行代码就能在Spotlight中训练,它看起来与scikit-learn工具包很是类似:

顺序模型

顺序模型将推荐问题视为顺序预测问题。有了用户以前的交互行为数据,咱们想要知道用户在下一个时间步中最可能喜欢的项目。

例如,假设用户A与[2,4,17,3,5]序列中的项目有了交互行为。接下来咱们将进行如下扩展窗口预测。

[2] -> 4
[2, 4] -> 17
[2, 4, 17] -> 3
[2, 4, 17, 3] -> 5
 复制代码

左侧的数组存储用户以前的交互行为,而右侧的整数表示用户A接下来要与之发生交互的项目。

为了训练这样的模型,咱们只需将原始交互对象转换为顺序交互对象。其他对象同理。

须要注意的是,为了确保每一个序列具备相同的长度,Sequence函数会在长度不足的序列前边补零。

所以,为了确保该函数起做用,ID为0的项目应该更改成其余未被使用的任一ID号。

选择损失函数

在指定模型时,咱们能够灵活地更改损失函数。具备不一样损失函数的模型可能在性能上具备显著差别。接下来本文将简要介绍Spotlight中定义的两种主要类型的损失函数。

  • 'pointwise':

与其余形式的损失函数相比,这是最简单的形式。因为样本的稀疏性(效用矩阵中存在多个0),把全部项目都考虑在内则会没法计算。所以,咱们只考虑随机选择的一部分负样本(用户未与之交互的项目)和全部的正样本。

  • 'bpr':

贝叶斯个性化排序(BPR)为每位用户提供每一个项目的排序。BPR运用如下计算公式,以确保正样本的等级高于负样本的等级。

ranking loss

5.结论

本文讨论了如何用Spotlight构建推荐系统。这种方法既简单又灵活,能知足大部分需求。虽然对于大多数问题而言,序列模型优于分解模型,可是训练序列模型须要更长的时间。此外,若是数据之间没有明显的顺序相关性,那么应用序列模型用处不大。


相关阅读:

想要了解推荐系统?看这里!(1)——协同过滤与奇异值分解

AutoML如何实现智能推荐系统的自动上线和运维?

如何实现AI赋能新媒体的技术落地?

入门推荐系统,你不该该错过的知识清单

如欲了解更多,欢迎搜索并关注官方微博@先荐、微信公众号(ID:dsfsxj)

相关文章
相关标签/搜索