跳到正文
Hacker News· zdw·· 7 天前AI 评分40

Bag of Decisions Reranker:用 LLM 生成查询评分标准重排搜索结果

Bag of Decisions Reranker

AI 导读

一种名为 Bag of Decisions 的重排方法让 LLM 为每个查询生成一组 yes/no 问题(如"该文档是否关于儿童书桌"),再用 Jev 计算每个问题为 yes 的概率并求和作为重排分数。

正文 · AI 翻译

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

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

  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.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