在LlamaIndex的 BM25Retriever中,默认的BM25参数是什么,如何显式地验证它们?
我在将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或对象属性中没有被明确暴露。
BM25Retriever在LlamaIndex内部使用的确切默认BM25参数是什么?- 这些参数是否可以通过公开API配置?
- 如果未直接暴露,它们在源码中的定义位置在哪里?
- 是否有推荐的方法来验证或记录这些参数以实现可重复实验?
解决方案
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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。