如何将Q值设计从训练目标到推理信号转化为?

摘要:推荐系统中 Q 值的设计:从训练目标到推理信号 一、为什么要聊这个话题 做推荐系统的人,每天都在和 Q 值打交道。粗排要输出 Q 值,精排要融合多个 Q 值,线上打分公式里全是 Q 值。但如果你问"这个 Q 值到底
推荐系统中 Q 值的设计:从训练目标到推理信号 一、为什么要聊这个话题 做推荐系统的人,每天都在和 Q 值打交道。粗排要输出 Q 值,精排要融合多个 Q 值,线上打分公式里全是 Q 值。但如果你问"这个 Q 值到底代表什么,为什么可以用它来排序",很多人的回答是"模型输出的分数呗"——这个回答没有错,但也没有说到点子上。 我自己在刚接触这块的时候,也有一堆搅在一起的困惑。loss 是用来训练模型的,Q 值是用来推理排序的,那它们的关系是什么?二分类任务用交叉熵,回归任务用 MSE,loss 的形式不同,Q 值是不是也应该不同?内积为什么能直接当 Q 值,sigmoid 之后的概率不是更直观吗? 这篇文章就是为了把这些问题一次性想清楚。我会以双塔模型为主线,从最简单的情况讲到更复杂的情况,最后拓展到其他模型结构。核心思路只有一条:先想清楚 Q 值应该代表什么,再去理解 loss 和 Q 值之间的关系。 二、Q 值的本质——先把目标定清楚 在讨论任何模型结构和公式之前,我想先把一件事说清楚:Q 值的语义是业务目标决定的,它在模型设计之前就应该想清楚。 推荐系统的根本任务是什么?是把用户极有可能产生正向互动的资源推送给他。这里的"正向互动"包括点击、完播、评论、分享、收藏、长时间消费等等。因此,一个资源的 Q 值,天然应该反映"这个用户对这个资源产生正向互动的可能性或程度"。Q 值越高,代表这个资源越值得推荐给这个用户。 这个定义听起来很简单,但它有一个重要的推论:Q 值是推理时的排序信号,loss 是训练预测器的工具,两者服务于同一个业务目标,但不是同一个东西。 具体来说,loss 衡量的是模型在整个训练集上的预测精度——它告诉我们模型学得好不好。而 Q 值是模型对某个特定(用户,资源)对输出的预测值——它告诉我们这个资源有多适合推荐给这个用户。把 loss 和 Q 值混为一谈是一个很常见的认知错位,后面我还会专门回来说这个问题。 想清楚了这个区分,后面所有的分析都会变得清晰很多。 三、双塔模型的结构选择——为什么用内积 双塔模型的结构很简单:用户塔接收用户特征,输出一个用户向量 \(\mathbf{u}\);物品塔接收物品特征,输出一个物品向量 \(\mathbf{v}\);两个向量做内积 \(\mathbf{u}^\top \mathbf{v}\),得到最终得分。 这里有一个问题值得细想:内积只是一个数学运算,为什么它可以代表用户和物品的匹配程度? 答案是:在模型训练之前,内积什么都代表不了,它只是两个随机向量的点乘,是一个随机数。是 loss 的优化过程,把"匹配程度"这个语义写进了用户向量和物品向量的方向关系里。训练结束后,"用户越可能对某内容产生正向互动,对应向量的内积就越大"这个几何关系被编码进了模型参数里。内积的语义不是天然的,是训练赋予的。 这一点非常关键。它说明 Q 值的合理性不来自"内积"这个操作本身,而来自 loss 优化之后模型所学到的向量空间结构。理解了这一点,我们才能在不同任务下正确判断"什么应该作为 Q 值"。 四、二分类任务的 Q 值——以点击为例 点击任务是最经典的情况,我们以它为起点把逻辑链条建立起来。 标签 \(y \in \{0, 1\}\),1 表示用户点击了,0 表示没有点击。模型的预测值是 \(\hat{y} = \sigma(\mathbf{u}^\top \mathbf{v})\),即对内积做一个 sigmoid 变换,把它压缩到 \((0,1)\) 区间,表示预测的点击概率。loss 是二元交叉熵: \[\mathcal{L}_{\text{BCE}} = -\left[ y \log \hat{y} + (1-y) \log(1-\hat{y}) \right] \] 训练的过程是:对于正样本(用户确实点击了,\(y=1\)),交叉熵的梯度会把 \(\hat{y}\) 往 1 的方向推,即把内积 \(\mathbf{u}^\top \mathbf{v}\) 往正方向推;对于负样本(用户没有点击,\(y=0\)),梯度把内积往负方向推。经过大量样本的迭代之后,模型学到的向量空间里,"用户会点击的内容"对应的内积就系统性地偏大,"不会点击的内容"内积系统性地偏小。 所以推理时,我们用内积 \(\mathbf{u}^\top \mathbf{v}\) 直接作为点击任务的 Q 值,而不是用 \(\hat{y} = \sigma(\mathbf{u}^\top \mathbf{v})\)。
阅读全文