跳到主内容

什么是排序学习?搜索和推荐怎么排序

2026-10-06 发布 来源:我告诉你AI导航 阅读

在搜索框里敲「附近修手机」,返回的几十家店其实都沾边,可用户只会点前三个。让 AI 参与排序,难的不是判断某条结果相不相关——那是个分类问题,做法早就成熟——而是决定这一页里谁站第一位。排序学习(learning to rank)处...

在搜索框里敲「附近修手机」,返回的几十家店其实都沾边,可用户只会点前三个。让 AI 参与排序,难的不是判断某条结果相不相关——那是个分类问题,做法早就成熟——而是决定这一页里谁站第一位。排序学习(learning to rank)处理的就是整页顺序,它的样本形态跟普通分类完全不同:一个查询下的一批候选,连同它们之间的先后,构成一条训练样本。形态一变,损失函数、评估指标、数据采集方式全都要跟着改。

判一条和排一页,是两种问题

分类模型关心这一条属于哪一类,样本之间彼此独立。排序面对的是同一个查询下的一组候选,它们的分数要放在一起比才有意义。这带来一个直接后果:不同查询之间的分数不可比。模型给「修手机」的候选打 0.8,给「换电池」的候选打 0.6,这两个数字放在一起没有含义,只有同一查询内部的相对高低才成立。

所以排序系统的评估也不能按单条算准确率。它要回答的是「相关的结果有没有被排到前面」,答案取决于整页的排列,而不取决于某一条判对没判对。这条差别决定了后面所有设计:样本怎么采、损失怎么写、指标怎么定。

三种学法,代价落在标注上

方法怎么学代价
单点法 pointwise每条候选单独喂给模型,学一个相关性分数或点击概率,最后按分数排实现最省事,但学不到候选之间的相互影响;不同查询的分数尺度不统一,跨查询比较会失真
配对法 pairwise每次取同一查询下的两条候选,学「A 该不该排在 B 前面」,转成二分类样本量随候选数平方增长;只约束两两相对,整页排列仍可能很怪
列表法 listwise直接把整个排列当学习对象,损失定义在整页的排序结果上目标非凸、训练不稳,对列表长度和截断位置敏感,调参成本高

三行的分野,一半在建模能力,一半在数据成本。单点法能直接复用现成的点击率模型和标注数据,落地最快;配对法要把「哪个更好」问出来,标注量随候选数平方增长;列表法要求标注者对一整页给评价,一条样本信息量最大,也最难采。工程上的常见路径是先用单点法上线,再拿点击日志做配对或列表训练。

位置是稀缺资源,相关性只是其中一维

第一屏就那么几个位置。同一批结果换个顺序,点击率能差出几倍,这个差距不来自内容质量,来自位置本身。于是排序目标里除了相关性,还要塞进别的东西:多样性,避免整页都是同一家连锁店;新鲜度,新闻类查询里三天前的稿子该往后放;商业约束,某些位置有合约在身。

这些维度通常以特征或重排规则的方式接入:先按相关性排出一版,再用规则做局部调整。也有把多目标直接写进损失的做法,代价是要为每个目标准备标签,而「多样性够不够」这种判断很难标得一致。相关性的原始定义、损失怎么构造,可以对照损失函数里的讲法一起看。

指标给位置打折,是为了对齐人的感受

常用的排序指标都建立在同一个假设上:越靠前的点击越多,所以越靠前的位置价值越高。折损累积增益把每条结果的相关性除以一个随位置递增的对数项,第 1 位不打折,第 10 位的贡献只剩三分之一左右。归一化之后除以理想排列的得分,得到 0 到 1 之间的数,方便跨查询比较。

折扣系数为什么取对数而不取线性,没有理论上的必然,它是从点击数据里拟合出来的经验。不同业务的最优曲线不一样,搜索和推荐套同一套参数就会偏。指标怎么选、怎么和业务口径对齐,模型评估指标那篇有更完整的对照。

定义不了「什么顺序更好」,是它的硬边界

排序学习优化的是你给的标签。标签来自人工标注或点击日志,两者都带偏差,而模型没有能力识别这种偏差。人工标注的一致性问题最容易被低估:让三个人给同一批结果排先后,两两一致率往往只有七八成,剩下的分歧会被模型当成信号学进去。

点击日志的偏差更隐蔽。排在前面的结果天然被点得多,模型于是学到「排在前面就是好」,再用这个结论决定谁排前面,形成自我强化。不做纠偏,新内容永远没有出头机会,因为它在训练数据里从来没被展示过。业界的做法是给点击加权,用倾向分倒过来修正曝光带来的偏差,可倾向分本身也要估,估错了纠偏就变成另一种偏。

还有几件事它做不到。新查询冷启动:没有任何历史点击就没有训练信号,只能退回字面匹配。全局最优:列表目标非凸,训练出来的是局部解,换个随机种子结果可能就不同。判断内容真假:排序只管先后不管对错,一条编得很像的假消息只要特征对得上,照样能排第一,这类问题和AI 幻觉属于两个环节,幻觉发生在生成,排序只是把它排了上去。

看一个排序系统好不好,先看它的日志

线上效果靠 A/B 实验说话,离线指标涨了线上没涨是常态。原因通常有两个:离线数据里的曝光分布和线上要面对的分布不一致;离线指标只覆盖被展示过的候选,没展示过的永远进不了评估。评估集要定期重建,否则模型会慢慢过拟合到一批固定查询上,这类退化和数据漂移是同一类问题。

落到具体做法,先盯三个数:头部查询的排序满意度、长尾查询的零结果率、新内容进入前 10 位的比例。第三个数字最能反映系统有没有被历史偏好锁死。想进一步压住排序分数的抖动,可以看梯度提升里关于树模型迭代的讨论,LambdaMART 这一族方法正是在这个框架上换了一套梯度定义。

速查:判断一套排序方案能不能落地

  • 标签从哪来:人工标注的一致率有没有测过,低于八成先修标注规范。
  • 日志有没有纠偏:只拿原始点击训练,等于把位置当成了质量。
  • 指标对不对业务:看 NDCG 还是看首屏点击,两者会选出不同的模型。
  • 新内容有没有机会:统计前 10 位里新条目的占比,长期为零就是锁死了。
  • 冷启动怎么兜:新查询没有点击时,退回字面匹配还是规则兜底,要提前定。

反馈页面信息

请描述需要更正的地方,页面标题和网址会自动附上。

也可以发邮件至 [email protected]