上一部分介绍了如何使用矩阵分解来学习嵌入。矩阵分解的一些限制包括:
- 使用侧边特征(即,超出查询 ID/项 ID 的任何特征)的难度。因此,只有使用训练集中存在的用户或内容才能查询该模型。
- 建议的相关性。正如您在第一个 Colab 中看到的那样,我们倾向于向所有人推荐热门商品,尤其是在使用点积作为相似度指标时。最好捕获特定用户的兴趣。
深度神经网络 (DNN) 模型可以解决矩阵分解的这些限制。DNN 可以轻松整合查询特征和特征(由于网络的输入层非常灵活),这有助于捕获用户的特定兴趣并提高建议的相关性。
用于建议的 Softmax DNN
一种可能的 DNN 模型是 softmax,它会将此问题视为多类别预测问题,其中:
- 输入的是用户查询。
- 输出是一个概率向量,大小等于语料库中的内容数,表示与每一项进行交互的概率;例如,点击或观看 YouTube 视频的概率。
输入
DNN 的输入可能包括:
- 密集功能(例如,自上次观看以来的观看时长)
- 稀疏特征(例如,观看记录和国家/地区)
与矩阵分解方法不同,您可以添加副特征,例如年龄或国家/地区。我们将用 x 表示输入矢量。
模型架构
模型架构决定了模型的复杂性和表现力。通过添加隐藏层和非线性激活函数(例如 ReLU),模型可以捕获数据中更复杂的关系。但是,增加参数数量通常也会使模型更难训练,费用也会更高。我们将使用 \(\psi (x) \in \mathbb R^d\)表示上一个隐藏层的输出。
Softmax 输出:预测概率分布
该模型通过 softmax 层将最后一层的输出 \(\psi (x)\)映射到概率分布 \(\hat p = h(\psi(x) V^T)\),其中:
- \(h : \mathbb R^n \to \mathbb R^n\) 是 softmax 函数,由以下函数给出: \(h(y)_i=\frac{e^{y_i}}{\sum_j e^{y_j}}\)
- \(V \in \mathbb R^{n \times d}\) 是 softmax 层的权重矩阵。
Softmax 层会将得分向量 \(y \in \mathbb R^n\)(有时称为对数)映射到概率分布。
损失函数
最后,定义损失函数来比较以下内容:
- \(\hat p\),Softmax 层的输出(概率分布)
- \(p\),表示与用户互动过的实际项目(例如,用户点击或观看过的 YouTube 视频)。这可以表示为归一化的多重热分布(概率向量)。
例如,在比较两个概率分布时,您可以使用交叉熵损失。
Softmax 嵌入
项的概率 \(j\) 由\(\hat p_j = \frac{\exp(\langle \psi(x), V_j\rangle)}{Z}\)给出,其中 \(Z\) 是一个不依赖于 \(j\)的归一化常量。
换言之, \(\log(\hat p_j) = \langle \psi(x), V_j\rangle - log(Z)\)因此,项的对数 \(j\) 数为(乘积常量)两个 \(d\)维向量的点积,可视为查询和项嵌入:
- \(\psi(x) \in \mathbb R^d\) 是最后一个隐藏层的输出。我们称之为查询的嵌入 \(x\)。
- \(V_j \in \mathbb R^d\) 是连接最后一个隐藏层与输出 j 的权重向量。我们将其称为项的嵌入 \(j\)。
DNN 和矩阵分解
在 softmax 模型和矩阵分解模型中,系统均\(V_j\) 会为每个项学习一个嵌入向量 \(j\)。我们在矩阵分解中称为项嵌入矩阵 \(V \in \mathbb R^{n \times d}\) ,现在是 Softmax 层的权重矩阵。
但查询嵌入不同。系统会学习从查询特征 \(x\) 到嵌入 \(\psi(x) \in \mathbb R^d\)的映射,而不是 \(U_i\) 为每个查询学习一个嵌入 \(i\)。因此,您可以将此 DNN 模型视为对矩阵分解的泛化,其中您将查询端替换为非线性函数 \(\psi(\cdot)\)。
您能使用商品功能吗?
您能在产品方面应用同样的理念吗?也就是说,模型能否学习将项特征映射到嵌入的非线性函数,而不是学习每一项的嵌入?是。为此,请使用由两个神经网络组成的双塔神经网络:
- 一个神经网络将查询特征\(x_{\text{query}}\) 映射到查询嵌入\(\psi(x_{\text{query}}) \in \mathbb R^d\)
- 一个神经网络将项特征\(x_{\text{item}}\) 映射到项嵌入\(\phi(x_{\text{item}}) \in \mathbb R^d\)
模型的输出可以定义为\(\langle \psi(x_{\text{query}}), \phi(x_{\text{item}}) \rangle\)的点积。请注意,它不再是 softmax 模型。新模型会为每个配对预测一个值 \((x_{\text{query}}, x_{\text{item}})\),而不是每个查询的概率向量 \(x_{\text{query}}\)。