上一页介绍了如何将 Softmax 层整合到推荐系统的深度神经网络中。本页面详细介绍了此系统的训练数据。
训练数据
Softmax 训练数据包括查询特征 \(x\) 以及用户与之互动的项的向量(表示为概率分布 \(p\))。在下图中,这些项标记为蓝色。模型的变量是不同层的权重。在下图中,这些项标记为橙色。该模型通常使用随机梯度下降法的任何变体进行训练。
负采样
由于损失函数会比较两个概率向量\(p, \hat p(x) \in \mathbb R^n\) (分别为真实值和模型的输出),因此如果语料库规模太大,计算损失梯度(针对单个查询 \(x\))的成本可能会过高。
您可以将系统设置为仅针对正项(在标准答案向量中处于活动状态的项)计算梯度。但是,如果系统仅使用正对进行训练,则模型可能会遭受折叠问题,如下所述。
模型可能会学习如何指定给定颜色的查询/项嵌入之间的相对位置(正确捕获该颜色中的相似度),但来自不同颜色的嵌入可能会偶然出现在嵌入空间的同一区域中。这种现象(称为折叠)会导致虚假建议:在查询时,模型可能会错误地预测其他组中项的高分。
反例是指与给定查询标记为“无关”的内容。在训练期间显示模型负例会教导模型,不同组的嵌入应该彼此远离。
您可以使用负采样来代替使用所有项计算梯度(可能成本太高)或仅使用正项(使模型容易折叠)。更确切地说,您使用以下各项计算近似梯度:
- 所有肯定项(目标标签中显示的项)
- 否定项示例(\(j\) \({1, …, n}\))
对否定关键字抽样有不同的策略:
- 您可以均匀采样。
- 您可以为得分更高的 j 项提供更高的概率 \(\psi(x) . V_j\)。直观地说,这些是对梯度影响最大的示例;这些示例通常称为硬负例。
关于矩阵分解与 Softmax
DNN 模型解决了矩阵分解的许多限制,但训练和查询费用通常较高。下表总结了这两种模型之间的一些重要差异。
矩阵因式分解 | Softmax DNN | |
---|---|---|
查询功能 | 不容易添加。 | 可包含。 |
冷启动 | 不容易处理词汇发起的查询或内容。可以使用一些启发法(例如,对于新查询,相似查询的平均嵌入)。 | 轻松处理新查询。 |
折叠 | 通过调整 WALS 中未观测到的权重,可以轻松降低折叠率。 | 容易折叠。需要使用负采样或重力等技术。 |
训练可伸缩性 | 可轻松扩容到超大型语料库(可能是数亿个或更多项),但前提是输入矩阵稀疏。 | 更难扩缩到非常大的语料库。可以使用一些技术,例如哈希处理、负采样等。 |
服务可伸缩性 | 嵌入 U、V 是静态的,可以预先计算和存储一组候选字词。 | 项嵌入 V 是静态的,可以存储。 查询嵌入通常需要在查询时计算,使得模型的服务成本较高。 |
步骤简述:
- 通常,对于大型分类,矩阵分解是更好的选择。更容易扩缩、查询费用更低且不容易折叠。
- DNN 模型可以更好地捕获个性化偏好,但更难训练,并且查询成本更高。DNN 模型优于矩阵分解进行评分,因为 DNN 模型可以使用更多特征来更好地捕获相关性。此外,DNN 模型通常也可以折叠,因为您主要关心的是假定一组相关的预过滤候选排名。