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