在LlamaIndex的 BM25Retriever中,默认的BM25参数是什么,如何显式地验证它们?

人工智能 2026-07-09

我在将LlamaIndex的 BM25Retriever 作为检索增强生成(RAG)管道的一部分使用:

from llama_index.retrievers.bm25 import BM25Retriever

bm25_retriever = BM25Retriever.from_defaults(nodes=nodes, similarity_top_k=3)

然而,我找不到一种明确的方式来检查或显式确认所使用的BM25超参数(例如k1、b、分词设置)。

文献中,BM25通常使用Okapi的默认参数,例如:

  • k1 ≈ 1.2
  • b ≈ 0.75

但在LlamaIndex中,这些参数在公开API或对象属性中没有被明确暴露。

  1. BM25Retriever 在LlamaIndex内部使用的确切默认BM25参数是什么?
  2. 这些参数是否可以通过公开API配置?
  3. 如果未直接暴露,它们在源码中的定义位置在哪里?
  4. 是否有推荐的方法来验证或记录这些参数以实现可重复实验?

解决方案

BM25Retriever在 LlamaIndex内部使用的确切默认BM25参数是什么?

他们实现中的 构造函数 拥有以下默认值:

bm25s.BM25(
    k1=1.5,
    b=0.75,
    delta=0.5,
    method="lucene",
    idf_method=None, # same as method
    dtype="float32",
    int_dtype="int32",
    backend="numpy",
    csc_backend="numpy",
)

在检索器中,此构造函数在调用时不带参数,因此所有默认值都生效。

对于分词,有 单独的默认值

language="en"
token_pattern=r"(?u)\b\w\w+\b"
skip_stemming=False
stemmer=Stemmer.Stemmer("english")

在语料索引阶段,它调用 bm25s.tokenize,对英文停用词进行移除、进行词干提取,并采用那个令牌模式 ^(标记必须至少包含两个字母数字字符,且排除单字符术语)。


这些参数可以通过公开API配置吗?

是的,这些可以:

BM25Retriever.from_defaults(
    nodes=nodes,
    similarity_top_k=3,
    language="en",
    stemmer=...,
    skip_stemming=False,
    token_pattern=r"(?u)\b\w\w+\b",
)

tokenizer= 似乎已被弃用,k1, b, method, idf_method, delta 不能设置。


它们在源码中的定义位置在哪里?

请参阅上面的链接。


是否有推荐的方法来验证或记录这些参数以实现实验的可重复性?

我不确定是否有一个被推荐的方法,但你可以把它们放到一个对象中并打印出来:

bm25_retriever = BM25Retriever.from_defaults(
    nodes=nodes,
    similarity_top_k=3,
)

scorer = bm25_retriever.bm25

configuration = {
    "k1": scorer.k1,
    "b": scorer.b,
    # ...

    "similarity_top_k": bm25_retriever.similarity_top_k,
    "token_pattern": bm25_retriever.token_pattern,
    # ...
}

我还建议锁定具体的bm25s版本。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章