跳到正文
Hacker News· softwaredoug·· 9 天前AI 评分24

Bag of Decisions Reranker:用 LLM 生成查询评分标准提升重排序效果

Bag of Decisions Reranker

AI 导读

一种名为 Bag of Decisions 的重排序方法,让 LLM 为每个查询生成一组 yes/no 问题作为相关性评分标准,再用 Jev 计算每个问题为真的概率并求和作为重排序分数。在 Wayfair WANDS 和 Amazon ESCI 两个电商数据集上,该方法平均 NDCG 分别达到 0.610 和 0.360,均高于 BM25 和 Jev 直接重排序。

正文 · AI 翻译

如果搜索查询不是被解释为“词袋”,而是被看作“决策袋”,会怎样?

我们知道 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 与两个变体(详细细节在此):

  1. Jev 重排序:即“这份文档对此查询相关吗?”
  2. 问题袋重排序——上述多问题流程。

然后我在两个电商数据集 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