Bag of Decisions Reranker:用 LLM 生成查询评分标准提升重排序效果
Bag of Decisions Reranker
一种名为 Bag of Decisions 的重排序方法,让 LLM 为每个查询生成一组 yes/no 问题作为相关性评分标准,再用 Jev 计算每个问题为真的概率并求和作为重排序分数。在 Wayfair WANDS 和 Amazon ESCI 两个电商数据集上,该方法平均 NDCG 分别达到 0.610 和 0.360,均高于 BM25 和 Jev 直接重排序。
如果搜索查询不是被解释为“词袋”,而是被看作“决策袋”,会怎样?
我们知道 Jev 充当前沿质量重排序器。作为一个有趣的实验,我想尝试另一种技术:不要只问 Jev“这对 {query} 相关吗?”。相反,让 LLM 生成查询的标准:一个仅针对此查询评估相关性的评分标准。
我们提示 LLM“生成一个 yes / no 问题,其中肯定回答表示相关”。对于查询 desk for kids,它可能会生成:
1 - Is the document about desks designed for children?
2 - Does the document offer products or information on kids’ desks?
3 - Does it mention child-sized or age-appropriate desk dimensions or ergonomics?
4 - Does it reference desks for homework, study, or activities for kids?
5 - Are features specific to children’s desks (e.g., height-adjustable for kids, safety/rounded edges, storage fo
r school supplies) discussed?
6 - Does it include buying guides, reviews, or comparisons of kids’ desks?
7 - Does it provide pricing or availability for children’s desks?
8 - Does it mention desks for specific child age ranges (e.g., toddlers, elementary, teens) as kids’ desks?
9 - Are brands or models of children’s desks listed?
10 - Does it cover where to buy or how to choose a desk for kids?
其中每一个都可以转化为一个 noul 问题。每个的 P(yes) 可以相加以得出整体相关性得分:
document = """
This adjustable study desk is perfect for kids ages 5–12.
Its height grows with your child.
"""
response = client.decide(
state=document,
questions={
"question_1": Noul(
instructions="Is this document about desks designed for children?"
),
"question_2": Noul(
instructions="Does the document offer products or information on kids’ desks?"
)
...
},
)
查询不再被表示为词袋,而是问题袋。由于 Jev 给出“yes”的概率,我们可以简单地将每个问题为真的概率相加作为重排序得分:
total_probability = 0.0
for question_id, answer in response.answers.items():
probability = answer.noul
print(f"{question_id}: {probability:.2f}")
total_probability += probability
现在 total_probability 可以作为我们重排序器的最终得分。我们可以将其加到 BM25 上,或者直接采用它。换句话说:

它的表现如何?
我进行了一个实验,比较 BM25 与两个变体(详细细节在此):
- Jev 重排序:即“这份文档对此查询相关吗?”
- 问题袋重排序——上述多问题流程。
然后我在两个电商数据集 Wayfair WANDS 和 Amazon ESCI 上进行了评估。结果如何?
这有效吗?似乎有效。以下是一些初步结果:
| 数据集 | 策略名称 | 平均 NDCG | 中位数 NDCG |
|---|---|---|---|
| WANDS | bm25 |
0.5407 | 0.475 |
| WANDS | jev_reranker |
0.574 | 0.561 |
| WANDS | bag_of_decisions |
0.6098137673305334 | 0.561 |
| ESCI | bm25 |
0.289 | 0.171 |
| ESCI | jev_reranker |
0.314 | 0.205 |
| ESCI | bag_of_decisions |
0.360 | 0.341 |
或者用图形表示

我们本质上是在做逐查询的特征创建。使用 LLM 来启发此查询需要考虑哪些重要因素。然后使用 Jev 来衡量我们是否覆盖了这些标准。我们可能会想,如何修改 LLM 调用以提供比上面更犀利、更多样的问题(在我看来有些是重复的)
这是一个有趣的方法。我们似乎能够训练越来越多的决策模型,甚至可能是专注于特定领域的模型。至少在这个玩具实验中,它似乎是一个有前景的方法,值得深入研究。玩得开心!
我希望你能加入我的 Cheat at Search with Agents,学习在搜索中使用智能体、构建更好的 RAG,并在查询理解中使用 LLM。
来源:Hacker News · softwaredoug.com