深度神经网络推荐系统

Posted by Jack Lu on 2020-03-28
Words 2.7k and Reading Time 9 Minutes
Viewed Times

深度神经网络推荐模型

上一篇文章已向你展示了使用矩阵因子分解来学习embeddings。矩阵因子分解的局限性:

  • 很难使用边缘特征(side feature,就是query id和item id之外的特征)。这个模型只能根据训练数据集中的用户或物品进行推荐。
  • 推荐的相关性。在矩阵因子分解的实验中,模型会给每个人推荐流行的物品,特别是使用点积作为相似度量。但是模型应该最好是能捕捉用户的兴趣。

深度神经网络能很好的避免矩阵因子分解的这些局限性。深度神经网络能很轻松的合并用户特征和物品特征(因为神经网络输入层的灵活性),这就能帮助发现用户的兴趣,进而提高推荐的相关性。

Softmax深度神经网络的推荐

一个可行的深度神经网络模型是softmax(softmax是一个函数,这个函数能在多类型分类模型中,预测每一个类型的可能性)
这个模型把推荐的问题当做一个多分类预测的问题:

  • 输入是一个用户
  • 输出是一个可能性的向量,这个向量的长度是企业内所有物品的数量,这个向量就表示每种物品的可能性,例如,点击或观看youtube视频的可能性。

    输入

    深度神经网络的输入能包含:
  • 稠密特征(例如,观看时间和自上次观看以来的时间)
  • 稀疏特征(例如,观看历史和国家)

不像矩阵因子分解模型,这个模型你能增加像年龄、国家这样的边缘特征。我们把输入的向量定义为x

模型架构

模型的架构决定了模型的复杂性和可表达性。通过增加隐藏层和非线性的激活函数(例如Relu),模型能捕捉数据中更加复杂的关系。但是增加参数的数量会使得模型更难训练而且使用模型的成本更高。我们把最后一个隐藏层的输出定义为

Softmax输出,预测分布的可能性


模型通过一个softmax层把最后一层的输出φ(x)映射为分布的可能性,其中

  • h是softmax函数
  • V(n*d)是softmax层的权重矩阵
    softmax层把评分的向量y(有时也被称为logits)映射为分布的可能性。

    你知道吗?

    softmax是取一个词语的诙谐表示,一个”硬”最大是把物品得分最高的y(i)赋值为可能性1,相反,这个”软”最大是为所有物品分配一个非0的可能性,物品拥有更高的分数就代表更高的可能性。如果这个分数放大,softmax函数把硬最大收敛为无穷大。

    损失函数

    最后,我们定义个损失函数来比较以下两项:
  • p^,softmax层的输出(分布的可能性)
  • p,真实值,表示这个用户和这个物品的交互(例如,youtube上面用户观看或点击的视频)。这能通过一个multi-hot分布(可能性的向量)来表示。

    Softmax Embeddings


    物品j的可能性通过如上公式计算得出,Z是一个标准化使用的常量,它不依赖于j。换句话说,log(p^j)一个物品的可能性的log值是两个d维向量的点击,这两个d维的向量也可以表示为用户和物品的embeddings
  • φ(x)∈R(D)是最后一个隐藏层的输出,我们把它省委query x的embedding
  • V(j)∈R(d)是连接最后一个隐藏层到输出j的权重向量,我们把它称为物品j的embedding。

    注意

    因为log是一个增函数,拥有最高可能性p^(j)的物品j就是最大点积<φ(x),V(j)>的物品。因此,在这个embedding空间中,点积也可以解释为相似度量。

    深度神经网络和矩阵因子分解

    在softmax模型和矩阵因子分解模型中,系统为每一个item j都学习到一个embedding向量V(j),矩阵因子分解模型中的物品embedding矩阵V∈R(n*d)在深度神经网络中是
    softmax层的权重矩阵。

query embedding则是不同的。深度神经网络没有为每个query i学习一个embedding U(i),而是学习了一个query特征x到embedding φ(x)∈R(d)的映射。因此可以认为深度神经网络模型是一个更加一般化的矩阵因子分解,这个模型把query替换为一个非线性的函数φ(.)。

你能使用物品的特征吗?

我们能在物品上应用相同的思想吗?就是说这个模型不为每个物品学习一个embedding,而是学习一个非线性函数,这个函数把物品特征映射为一个embedding?答案是有。我们使用一个双塔(two-tower)神经网络,它由两个神经网络组成

  • 一个神经网络把query 特征映射为query embedding
  • 一个神经网络把item特征映射为item embedding
    模型的输出可以定义为query embedding和item embedding的点积。注意,这不再是一个softmax模型。这个模型为每一query和item对预测一个值,而不是为query预测一个可能性向量。

Softmax Training

上一节介绍了怎么在一个推荐系统的深度神经网络中使用softmax层。这节我们来仔细看看这个系统的训练数据。

训练数据

softmax训练数据由query特征x以及和用户交互的物品向量(表示为可能性分布p)。在下图中他们被标记为蓝色。这个模型中的变量是不同层的权重,他们在下图中被标记为橙色。这个模型能使用任何类型的随机梯度下降的方法训练。

negative sampling

因为损失函数是比较两个可能性数组p,p^(x)∈R(n)(他们分别是真实值和模型的输出)。当n非常大的情况下,为一个query x计算梯度损失x的代价是非常高的。

我们当然可以建立一个系统只计算那些正向物品(positive item,在向量中处于活动的物品,跟用户有交互的物品)的梯度。但是,如果系统只计算positive物品,那么系统就会遭遇折叠的困境,什么是折叠的困境:

在上图中,我们假设不同的颜色代表不同种类的query和item。每个query(表示为方形)最可能和同种颜色的item(表示为圆形)交互。例如,我们假设分类就是youbute中不同的语言,一个特定的用户只会和这个特定语言的视频交互。
这个模型能学习到在同一个颜色中如何摆放相互之间有关系的query或item。(能正确捕捉到同一颜色内的相似性),但是来自不同颜色的embedding可能最后被放入同一个embedding空间的区域中。这种现象被称为折叠,会导致假的推荐:就是在一个query时刻,模型会错误的推荐一个其它组中的高分item。
反向例子(negative examples)就是和一个给定的query不相关的item。在模型训练时输入一些反向的例子能使模型学习到来自不同组的embedding会彼此互相分离开。
我们不是对所有的物品都计算梯度(这样代价太大),也不是只对正向样本计算梯度(这会导致模型折叠),你可以使用负向样本抽样(negative sampling)。更准确的说,我们只对下面的物品计算对应的梯度:

  • 所有正面的item,(被标记为1的物品)
  • 负面item的抽样(j in 1,…,n)
    这里有不同的负面抽样策略
  • 一致性抽样
  • 你可以给有更高分数的φ(x).V(j)对应的物品j更大的可能性,直觉的认为,这些是在梯度中贡献更大的一组物品,这些物品通常被称为硬反面(hard negative)。
  • 额外的资源:

    为了更好的理解这个技术、架构和youtube中使用的模型,
    查看Neural Networks for YouTube Recommendations

了解折叠的更多细节看
Xin et al., Folding: Why Good Models Sometimes Make Spurious Recommendations

学习更多关于负面抽样,看Bengio and Senecal, Adaptive Importance Sampling to Accelerate Training of a Neural Probabilistic Language Model

矩阵因子分解 Vs Softmax

Softmax能避免矩阵因子分解中很多的局限性,但是也更难以训练和查询。下面表格总结了两种模型重要的区别

矩阵因子分解 深度神经网络Softmax
查询特征 不容易包含 能被包含
冷启动 不能方面处理训练集之外的query和物品。
一些启发式的方法可以使用(例如:对于一个新的query,可以取相似query embedding的均值)
处理新query很简单
折叠 通过把未观察的权重放入WALS中轻易解决折叠的问题 证明会发生折叠,可以使用反面抽样或Gravity的技术
训练扩展 轻易扩展到大型组织(上亿级的物品甚至更多)
仅限输入是稀疏的矩阵
很难扩展到大型组织。也可以使用一些技术,如:哈希、反面抽样等
服务应用扩展 U、V的embedding是固定的,可以预计算一组候选者并保存 物品embeding V是固定的。
query的embedding需要在查询时计算,使得模型服务应用的代价更高

总结

  • 矩阵因子分解是大公司更好的选择,它能轻易的扩展,查询代价低,不会产生折叠。
  • 深度神经网络能更好捕捉兴趣,但是更难训练和query代价高。如果是为了评分,那么优先使用深度神经网络而不是矩阵因子分解。因为深度神经网络模型能使用更多的特征来更好的捕捉相关性。同时,通常深度神经网络模型产生的折叠是可以被接受的,因为你更关注那些被认为是预先过滤的一组相关的候选者的排名。

本文翻译自谷歌开发者使用深度神经网络推荐


This is copyright.

...

...

00:00
00:00