电商搜索中的 Query-Product 相关性预测是搜索引擎的基础模块:不相关的商品会损害用户体验,降低商家效率。传统方案依赖 BERT 系模型,已能满足 80–90% 的用户需求,但对剩余 10%+ 的长尾复杂 Query(如:否定语义、品牌替代、知识型提问等)表现欠佳。
BERT 怎么做相关性预测?
电商搜索链路:Query → 召回 → 粗排 → 相关性过滤 → 精排 → 展示。相关性模型的任务只有一件事:给一对 (Query, 商品) 打分,判断"这个商品和这个 Query 相不相关",相关性差的直接过滤掉,不进精排。
BERT 的做法:把 [CLS] Query [SEP] 商品标题+属性 [SEP] 拼成一条文本,过 BERT encoder,取 [CLS] embedding 接一个线性层输出相关性分数(0~1 的回归,或多分类)。训练数据是人工标注的 (Query, 商品, 相关性等级) 三元组。本质上是一个文本匹配任务。
擅长(简单语义匹配):Query="蓝色运动鞋" vs 商品="耐克蓝色跑步鞋"——词汇高度重叠,BERT 双向注意力能直接对上,打高分,没问题。
不擅长(否定语义):Query="不粘毛的短袖" vs 商品="纯白棉质短袖(易沾毛)"——"不粘毛"是否定约束,BERT 没有能力推理"易沾毛"和"不粘毛"是语义冲突,往往还是把词汇重叠部分(短袖)当匹配依据打高分。
不擅长(品牌替代):Query="Miumiu 平替" vs 商品="真正的 Miumiu 包包"——"平替"意味着用户不想要 Miumiu 本身,但 BERT 看到"Miumiu"词汇重叠度极高,往往误判为高度相关。
根本原因:BERT 做的是 token 级别的语义对齐,没有推理能力——它不知道"平替"是"要替代"的意思,也不知道"不粘毛"的"不"否定了后面的属性。
三大工程挑战
- 部署延迟:CoT 生成更多 token,对每条 Query 要为数百个候选商品打分,实时在线生成计算量极大
- CoT 错误累积:中间推理过程越长,早期幻觉/错误越容易传播并污染最终预测
- 判别幻觉(Discriminative Hallucination):即便推理链正确,模型仍可能输出错误的最终分类标签
背景:TaoSR1 让 LLM 生成一段推理链(CoT),再输出分类标签。推理链分析得对,但最后输出标签时"头脑短路"——推理和结论不一致,这就是判别幻觉。
具体例子:Query="Miumiu 平替",商品="MiuMiu 原价皮包 4500元"
LLM 的 CoT 推理链:"用户搜索'平替',说明他们想要风格相似但价格更低的商品,并不是要购买 MiuMiu 本身。这个商品就是 MiuMiu 真品,价格昂贵,不满足平替需求,应为 2-Mismatch。"
但最终输出的标签却是:4-Excellent ← 这就是判别幻觉。推理链分析完全正确,但最后那一步"给出分类标签"时,模型被训练成的"生成模式"把高词汇重叠(MiuMiu)当成了强正信号,覆盖了推理结论。
类比推荐场景:相当于你的精排模型 loss 算对了,但梯度更新方向写反了——局部正确但整体结果错误。判别幻觉是 LLM 做分类任务特有的问题,推荐里不存在,因为推荐的标签是行为数据,模型不会"明知故犯"。
Stage 1 · SFT with CoT(左):从 LLM Base(Tbstar-42B 做过通用 SFT)出发,注入电商领域的 CoT 推理能力。用 RAG 检索业务规则合成推理链,采用"先答后思"(Respond-then-Think)范式——模型先输出标签(如 "4-Excellent"),再生成解释性推理链。这样部署时只需要看第一个 token 的概率,CoT 内容不进入线上延迟路径,但通过后续 RL 持续发挥作用。
Stage 2 · Pass@N DPO(中):Stage 1 之后 Pass@1 准确率仍低于判别基线,但 Pass@5 已超越(说明模型"有能力但不稳定")。DPO 利用这个信号构造偏好对:能答对的样本自己生成 chosen/rejected;始终答不对的困难样本,用 DeepSeek-R1 提供 chosen,向模型注入外部知识。
Stage 3 · Difficulty-based GRPO(右):在线强化学习,只对"有对有错"批次做梯度更新(全对梯度为 0,全错无效采样)。关键发现:比调难度阈值 γ 更有效的是先把训练数据标签均衡(各类等量),CV=0 时 Macro F1 比 CV=1.06 时高 3.5 pt。GRPO 阶段结束后,判别幻觉案例比 DPO 阶段减少 30%。
TaoSR1 的整体优化框架包含四个阶段,构建在 Tbstar-42B(阿里内部从头预训练的 MoE 电商 LLM,42B 总参数、3.5B 激活参数)之上:
Tbstar-42B SFT
RAG 合成推理链
Pass@N 偏好对
难度感知在线 RL
单参数分层
任务定义为 4 类相关性分类:4-Excellent(极相关)、3-Related(相关)、2-Mismatch(部分不相关)、1-Irrelevant(不相关)。
2.1 SFT 阶段:生成式范式 + CoT 推理
2.1.1 从判别式到生成式
传统 BERT 范式用 MSE 或 Cross-Entropy 对 [CLS] token 表示做分类。TaoSR1 改为生成式 LLM 直接输出标签文本(如 "4-Excellent"),训练目标改为语言模型 loss:
- $\mathbf{x}$:输入 token 序列(query + item 特征)
- $\mathbf{y}$:目标输出序列(标签文本,如 "4-Excellent")
- $\pi$:当前模型的生成概率分布
- $\mathcal{D}$:训练数据集,样本格式为 (query, item, label)
在线打分时,取第一个生成 token 的概率作为连续评分依据:
- $\mathbf{y}_1$:第一个生成 token("1"/"2"/"3"/"4" 之一)
- $\mathbf{p}_1 \in \mathbb{R}^4$:第一个 token 在 4 个标签上的 softmax 概率向量
- $\text{id}(\mathbf{c})$:标签字符对应的词表 index
- $\left(\mathbf{p}_1\right)_{\text{id}(\mathbf{c})}$:标签 c 对应的概率,可作为下游的连续评分
判别式(BERT):取 [CLS] embedding,过线性层得到 4 维 logit [0.1, 0.3, 0.5, 1.2],对这 4 个值做 softmax 后取 argmax = "4-Excellent",或加权求和得连续分。
生成式(TaoSR1):输入 "Query: 运动鞋 Item: 白色Nike慢跑鞋,请判断相关性:" → 模型做一次 forward,得到整个词表(假设 32000 维)的 next-token logit → 只取 "1""2""3""4" 四个字符对应 vocab index 处的 logit 值(其余几万个 token 全部丢弃)→ 对这 4 个 logit 做 softmax,得到 $\mathbf{p}_1 = [p_1, p_2, p_3, p_4]$,例如 [0.01, 0.02, 0.10, 0.87] → argmax 得标签 "4-Excellent",或按 Eq.(11) 加权求和得连续分。
训练时:把标签 "4" 放在输出序列最前面("4\nQuery 理解:…"),用标准 LM Loss 训练,模型自然学会在看完 query+item 后第一个 token 给出相关性等级。生成式范式保留了 LLM 原始预训练目标,不会退化为纯判别器。
2.1.2 RAG-based CoT 生成
电商相关性判断受复杂业务规则支配,单纯的标签监督无法让模型学到规则逻辑——模型只知道"这道题答案是 3 分",但不知道"为什么是 3 分",泛化能力差。TaoSR1 的做法是:先用强模型(DeepSeek-R1)+ 业务规则给训练数据配上推理链,再用这份带推理链的数据训练 TaoSR1,让它学会"怎么推理"而不只是"记住答案"。
原始训练样本:Query="Mate50" 商品="Mate50 Pro 手机壳" 标签=3-Related
Step 1 · 原子规则知识库:把完整的业务规则文档(可能几百条)拆成一条条细粒度规则,每条带元数据标注。例如:"规则#47:若用户搜索型号 A,商品适配 A 的升级款 B,定义为 3-Related;反之搜索 B 而返回 A,定义为 2-Mismatch。适用:手机/配件,关键词:型号升降级。"
Step 2 · 动态 RAG 检索:人工标注时额外标了这条样本的关键因子(如"型号升降级"),用它检索知识库,只取相关的 3~5 条规则,避免把几百条全塞进 prompt。
Step 3 · CoT 合成:把 检索到的规则 + Query + 商品 + 标签 输入 DeepSeek-R1,让它生成推理链。最终训练样本变成:
输出: "3-Related
[CoT] 1.Query理解:用户搜索Mate50,意图是找Mate50相关配件
2.商品理解:Mate50 Pro 手机壳,适配Pro版
3.品类匹配:均为手机壳,品类相符
4.属性匹配:引用规则#47——Mate50 Pro是Mate50升级版,壳可能不完全适配但语义上相关
5.结论:3-Related"
这样 TaoSR1 在 SFT 时不只是"背答案",而是学会了"看到型号升降级问题要引用#47号规则推理",对新的类似 Query 具备泛化能力。
CoT 的 5 个结构化步骤:Query Understanding → Product Comprehension → Category Matching → Attribute Matching → Relevance Determination
Query: "Mate50 Pro 壳" 商品: 适配华为 Mate50 的手机壳
CoT 推理:(1) Query 理解:用户要找 Mate50 Pro 专用壳,强调 Pro 版;(2) 商品理解:该商品适配 Mate50(非 Pro);(3) 品类匹配:同为手机壳,品类相符;(4) 属性匹配:RAG 检索到规则"若商品只适配 Mate50 而非 Mate50 Pro,应标记为 2-Mismatch";(5) 结论:2-Mismatch。
若是反过来——Query "Mate50 壳",商品 "适配 Mate50 Pro",规则显示 Pro 是升级版,标记为 3-Related。
2.1.3 Respond-then-Think(先答后思)
论文实验了两种范式:
❌ Think-then-Respond(先思后答)
输出格式:<CoT> → <Label>
CoT 的错误在前期累积,到最终 label 时已经受到污染。实验表明比判别基线更差。
✅ Respond-then-Think(先答后思)
输出格式:<Label> → <CoT>
label 在 CoT 之前生成,不受中间推理错误累积影响。部署时只用第一个 token 的概率,CoT 部分仅用于质量提升和后续 RL 训练信号。
2.2 Pass@N-based DPO:离线偏好优化
SFT 之后,单次解码(Pass@1)准确率仍低于判别基线,但 Pass@N 随 N 增大显著提升并最终超越基线,说明模型有能力但不稳定地给出正确答案。DPO 的目标正是把这种潜力稳定化。
类比:给一个差生 N 次考试机会,取最高分——机会越多,最高分越容易接近满分,N 越大 Pass@N 越高是数学必然。但这只是评估指标,不是推理策略(不是跑 N 次然后投票选答案)——线上最终还是只跑一次(Pass@1)。
它衡量的是模型的能力上限而非稳定性。Pass@1=67% 但 Pass@5=82% 说明:模型知道怎么做对,但不够稳定,有时候会偏。这个 gap 正是 RL 可以填补的空间——DPO/GRPO 的目标就是把"偶尔能答对"训练成"稳定答对",最终让 Pass@1 追上 Pass@N。
| 模型 | Accuracy |
|---|---|
| LLM Base(判别基线) | 75.01 |
| TaoSR1(CoT) Pass@1 | 67.38 |
| TaoSR1(CoT) Pass@2 | 74.26 |
| TaoSR1(CoT) Pass@3 | 77.68 |
| TaoSR1(CoT) Pass@4 | 80.18 |
| TaoSR1(CoT) Pass@5 | 81.73 |
偏好数据集分两类构建:
DPO 训练目标:
- $\pi_\theta$:当前训练的策略模型(待优化)
- $\pi_\text{ref}$:参考模型(CoT-SFT 之后的 checkpoint,保持固定)
- $\mathbf{y}^+$:chosen 回答(正确);$\mathbf{y}^-$:rejected 回答(错误)
- $\beta$:KL 惩罚系数,控制偏离 ref 的幅度
- $\sigma$:sigmoid 函数
样本:Query="短睡衣" Item="睡衣套装睡袍短款女",真实标签=4-Excellent
Pass@5 采样结果:[4-Excellent, 3-Related, 4-Excellent, 4-Excellent, 2-Mismatch]
Pass@N=3 > 0,属于"可解决样本":chosen = 其中一条 4-Excellent 生成(推理链正确),rejected = 一条 3-Related 生成(推理链偏差)→ 构成偏好对加入 $\mathcal{D}_\text{pass}$
若 Pass@5 全错(如某知识型 Query),则由 DeepSeek-R1 提供 chosen,模型自己的错误回答作为 rejected → 加入 $\mathcal{D}'_\text{pass}$,引入外部知识
2.3 GRPO + 难度感知动态采样
DPO 的 Pass@N=0 处理虽然引入了外部知识,但仍偏向离线。GRPO 在更大的采样空间下进行在线强化学习,进一步减少判别幻觉。核心改进:难度感知动态采样(Difficulty-aware Dynamic Sampling)——只对准确率在 $(0, \gamma)$ 区间的批次做梯度更新。
- $G$:每个 query-item 对采样的输出数量
- $o_i$:第 $i$ 条采样输出
- $r_{i,t}(\theta) = \frac{\pi_\theta(o_{i,t}|x,o_{i,<t})}{\pi_{\theta_\text{old}}(o_{i,t}|x,o_{i,<t})}$:当前策略与旧策略的概率比(importance ratio)
- $\hat{A}_{i,t} = \frac{R_i - \text{mean}(\{R_i\})}{\text{std}(\{R_i\})}$:归一化优势,$R_i$ 为 0/1 可验证奖励(预测标签是否正确)
- $\epsilon$:clip 范围(PPO-style 稳定化)
- $\beta D_\text{KL}$:KL 正则,防止偏离参考策略太远
难度感知采样的关键约束:
- 全对的批次($=G$):组内优势均为零,梯度消失,丢弃
- 全错的批次($=0$):模型缺乏相关知识,继续采样成功率极低,丢弃
- 只保留"有对有错"的批次:在梯度有效的同时专注于困难样本
原始训练集 L4:L3:L2:L1 = 50%:5%:36%:9%,严重不均衡。GRPO 动态采样时,不管怎么调 γ,采出来的 batch 里 L4 还是占大头,变异系数(CV)高,各类别性能差异大,Macro F1 卡在 63~64。
真正有效的做法:在跑 GRPO 之前就把训练集各类下采样到最小类别(L3)大小,让 CV=0,然后用宽松的 γ∈[0.01, 0.99](几乎不过滤)。结果 Macro F1 直接跳到 67.12——比精心调 γ 的最好结果高 3 pt。
结论:喂给 GRPO 的数据均衡比算法参数更重要。用更少的数据(下采样后),但分布更好,反而更优。
批次 A(Query="运动鞋" Item="耐克运动鞋"):G=4 采样,4条都输出 4-Excellent(全对),$\hat{A}=0$ → 丢弃,不更新
批次 B(Query="Miumiu 平替" Item="MiuMiu 原价包包"):G=4 采样,2条输出 2-Mismatch(正确),2条输出 4-Excellent(幻觉),γ=0.5∈(0,1) → 保留,$\hat{A}$ 有正有负,正确输出得正梯度,幻觉输出受负梯度抑制
批次 C(Pass@4=0 的极难样本):4条全错 → 丢弃(缺乏知识,继续采样意义不大)
2.4 CumPT:累积概率分层部署
线上系统需要把模型的四类概率映射为 Good/Mid/Bad 三档。传统方法用加权求和得连续分,再设两个阈值,共需 4 个超参数且对阈值设置极敏感。TaoSR1 提出 Cumulative Probability Tiering (CumPT),只用一个超参数 $\beta_\text{cum}$:
- 从"最相关"类别开始累积概率,一旦超过阈值就归入当前档位
- $(\mathbf{p}_1)_{\text{id}(4)}$:4-Excellent 的概率;$(\mathbf{p}_1)_{\text{id}(3)}$:3-Related 的概率;以此类推
- $\beta_\text{cum}$:唯一需要调的超参数,对不同取值(0.3~0.7)性能基本稳定
模型输出概率:P("4")=0.62, P("3")=0.25, P("2")=0.10, P("1")=0.03,设 $\beta_\text{cum}=0.5$
CumPT 判断:P(4)=0.62 > 0.5 → Good(只累积一步就判定)
另一个样本:P("4")=0.38, P("3")=0.30, P("2")=0.20, P("1")=0.12,设 $\beta_\text{cum}=0.5$
P(4)=0.38 < 0.5;P(4)+P(3)=0.68 > 0.5 → Good
传统方法:$\text{score} = 0 \times 0.12 + \alpha_1 \times 0.20 + \alpha_2 \times 0.30 + 1 \times 0.38$,需要分别调 $\alpha_1, \alpha_2, \beta_1, \beta_2$ 四个参数,且对具体组合非常敏感(Table 7 显示 β₂ 从 0.3 到 0.7,Online Macro F1 从 41.42 到 65.26 大幅波动)。CumPT 在所有 β 设置下均稳定在 67.x。
测试集设置
~7 万条人工标注的 Query-Item 对,采样自淘宝在线搜索日志(候选打分空间)。为考察推理能力,Query 分布聚焦于 4 类复杂场景:否定语义、平替需求、问答型、知识型。
主实验结果(Offline)
| 模型 | C1 F1 | C2 F1 | C3 F1 | C4 F1 | Macro F1 | Accuracy |
|---|---|---|---|---|---|---|
| BERT | 65.74 | 69.63 | 33.87 | 76.06 | 61.33 | 69.36 |
| Qwen3-0.6B | 42.02 | 68.13 | 23.50 | 78.14 | 52.95 | 70.29 |
| Qwen3-30BA3B | 65.09 | 68.80 | 32.47 | 81.68 | 62.01 | 74.42 |
| LLM Base(Tbstar-42B SFT) | 65.19 | 68.86 | 32.91 | 81.90 | 62.22 | 75.04 |
| TaoSR1(CoT) | 43.30 | 67.54 | 19.68 | 75.62 | 51.54 | 68.22 |
| TaoSR1(CoT&DPO) | 62.90 | 71.20 | 37.96 | 82.25 | 63.58 | 75.54 |
| TaoSR1(CoT&DPO&GRPO) | 66.82 | 72.15 | 39.40 | 82.27 | 65.16 | 75.92 |
| TaoSR1(CoT) postCoT | 57.63 | 72.64 | 27.91 | 81.88 | 60.01 | 75.12 |
| TaoSR1(CoT&DPO) postCoT | 65.74 | 71.95 | 39.43 | 83.00 | 65.03 | 76.49 |
| TaoSR1(CoT&DPO&GRPO) postCoT | 67.34 | 73.15 | 44.94 | 83.06 | 67.12 | 76.86 |
在线侧人工评测
2000 条 Query,A/B 对比,Top-10 结果三项指标评估:
| Query 类型 | 示例 | GSB | Query Goodrate | Item Goodrate |
|---|---|---|---|---|
| Q&A 型 | 什么药能让头发变黑? | +16.62% | +6.53pt | +5.66pt |
| 平替型 | Miumiu 平替 | +34.43% | +13.11pt | +10.69pt |
| 否定型 | 不粘毛的短袖 | +10.92% | +3.80pt | +3.74pt |
| 知识型 | 不怕汽车压的油漆 | +18.45% | +6.85pt | +4.44pt |
平替型 Query 改善最显著(GSB +34.43%),因为传统 term-matching 模型会把"Miumiu 平替"的 Query 与真正的 Miumiu 商品高度相关——品牌词完全重合,但语义上应为"平替"而非原价 Miumiu。
在线 A/B 测试
严格 AB 实验关键指标变化(相比基线):
- UV:+0.22%
- IPV(商品详情页浏览):+2.43%
- 成交量:+0.82%
- GMV:−0.29%
GMV 小幅下降但在误差范围内,作者解读为:相关性优化带来了更好的用户体验(更多浏览、更多成交),但并不牺牲购买意愿,整体商业价值持平或正向。
为什么要先 DPO 再 GRPO?
训练顺序:SFT → DPO → GRPO。
DPO:Off-policy,可外挂 Oracle
离线批量采样一次,生成静态偏好数据集,再用 teacher-forcing 训练,actor 不再实时采样。关键优势:Pass@N=0 的全错样本,可以让 DeepSeek-R1 提供正确 chosen,向模型注入它自己从来没能生成的正确推理链。
GRPO:On-policy,规则奖励,无需 RM
每个 step 实时让当前模型采样 G 条,用规则判断对错(分类任务天然可验证),0/1 奖励,不需要神经网络 Reward Model。局限:全错批次梯度为 0,学不到任何信息,直接丢弃。
| 训练路径 | Macro F1 |
|---|---|
| TaoSR1(CoT) postCoT | 60.01 |
| TaoSR1(CoT&GRPO) postCoT | 66.84 |
| TaoSR1(CoT&DPO) postCoT | 65.02 |
| TaoSR1(CoT&DPO&GRPO) postCoT | 67.12 |
GRPO 难度比例的影响
| 难度范围 γ | L1% | L2% | L3% | L4% | CV | Macro F1 |
|---|---|---|---|---|---|---|
| [0.2, 0.8] | 3.6% | 29.1% | 6.4% | 60.9% | 1.06 | 63.55 |
| [0.2, 0.6] | 4.6% | 29.9% | 8.2% | 57.3% | 0.97 | 63.87 |
| [0.1, 0.5] | 6.0% | 31.8% | 10.5% | 51.7% | 0.84 | 64.25 |
| [0.01, 0.99] + 均衡标签 | 25.0% | 25.0% | 25.0% | 25.0% | 0 | 67.12 |
CumPT vs 传统方法对阈值的敏感性
传统方法(固定 $\alpha_1=0.33, \alpha_2=0.66, \beta_1=0.15$,只变 $\beta_2$):Online Macro F1 从 41.42($\beta_2=0.3$)到 65.26($\beta_2=0.6$),波动极大。CumPT(变 $\beta_\text{cum}$ 从 0.3 到 0.7):Online Macro F1 稳定在 67.05–67.17,几乎无波动。
亮点
- Respond-then-Think 范式:先输出标签再生成 CoT 是本文最重要的工程洞见。经典的"Think-then-Answer"看似更合理(先思考再回答),但在分类任务中反而因为错误累积更差。这个结论和 GenCLS++ 等工作一致,对工业分类任务有普遍参考价值。
- Pass@N 驱动的 DPO 框架:用 Pass@N 准确率作为 RL 潜力指标,同时处理"可解决"和"不可解决"两类样本,逻辑清晰且有操作性。Pass@N=0 的 Oracle 引导是 DPO 相对 GRPO 的独特价值点。
- 标签均衡比难度阈值更重要:GRPO 实验揭示了一个反直觉的结论——与其精心调 γ,不如先平衡标签分布。CV 和 Macro F1 的强负相关是值得关注的实践规律。
- CumPT 的工程价值:从 4 个超参数压缩到 1 个,且在宽泛的参数范围内稳定——这对实际生产部署的调参成本有实质意义。
局限与可探讨的问题
- 部署延迟问题未完全量化:论文虽然用 postCoT 解决了"先答后思"的延迟问题(只需第一个 token 的概率),但整体延迟对比(LLM vs BERT)没有给出数字,生产中的实际 QPS/P99 latency 未披露。
- GMV 小幅下降:商业上略存疑虑,相关性提升后点击率和成交量上升,但 GMV 微降(−0.29%)。可能是高 GMV 商品恰好有更多相关性问题(如流量商品做了边缘 Query),被新模型降级了。
- CoT 质量依赖 DeepSeek-R1:Pass@N=0 样本的 Oracle 回答来自 DeepSeek-R1,而该模型并非在淘宝电商语境下训练,合成 CoT 的质量上限受外部模型能力约束。后续可考虑用 TaoSR1 自身迭代替代外部 Oracle。
- 标签均衡带来的召回损失:对多数类(L4 从 50% 下采样到 25%)的下采样会损失一部分训练数据信息,如何在均衡和信息量之间找到最优平衡仍有探索空间。
📄 论文链接:https://arxiv.org/abs/2508.12365
🏷 关键词:E-commerce Search, Relevance Prediction, CoT, DPO, GRPO, Pass@N, Cumulative Probability Tiering