Bag of Decisions Reranker:用 LLM 生成查询评分标准重排搜索结果
Bag of Decisions Reranker
一种名为 Bag of Decisions 的重排方法让 LLM 为每个查询生成一组 yes/no 问题(如"该文档是否关于儿童书桌"),再用 Jev 计算每个问题为 yes 的概率并求和作为重排分数。
如果搜索查询不是被解释为“词袋”,而是被我们视为“决策袋”,会怎样?
我们知道 Jev 充当前沿质量的 reranker。作为一个有趣的实验,我想尝试另一种技术:不要只问 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”的概率,我们可以简单地将每个问题为真的概率相加作为 rerank 分数:
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 可以作为我们 reranker 的最终分数。我们可以将其加到 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.610 | 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 调用以提供比上述更犀利且更多样的问题(在我看来有些是重复的)
这是一种有趣的方法。我们似乎能够训练越来越多的决策模型,甚至可能是专注于特定领域的模型。至少在这个玩具实验中,它似乎是一种有前途的方法,值得更深入的研究。享受吧!
与《AI-Powered Search》的作者一起学习最新的 AI 搜索技能。加入 Doug Turnbull 和 Trey Grainger,探索面向人类和代理的现代检索。在 Maven 上探索课程。
来源:Hacker News · softwaredoug.com