Anserini 是一个用于可重复信息检索研究的工具包。通过以 Lucene 为基础,我们的目标是弥合学术信息检索研究与构建现实世界搜索应用程序的实践之间的差距。除其他目标外,我们的努力旨在与此相反。* Anserini 源于 2016 年对各种开源检索引擎的可重复性研究(Lin 等人,ECIR 2016)。参见杨等人。 (SIGIR 2017) 和 Yang 等人。 (JDIQ 2018)概述。
❗ Anserini 在提交272565
(2024/04/03) 处从 JDK 11 升级到 JDK 21,对应于 v0.35.0 的版本。
Anserini 打包在一个独立的 fatjar 中,这也提供了最简单的入门方法。假设您已经安装了 Java,请获取 fatjar:
wget https://repo1.maven.org/maven2/io/anserini/anserini/0.38.0/anserini-0.38.0-fatjar.jar
以下命令将生成一个 SPLADE++ ED,在 MS MARCO 段落语料库上运行开发查询(使用 ONNX 编码):
java -cp anserini-0.38.0-fatjar.jar io.anserini.search.SearchCollection
-index msmarco-v1-passage.splade-pp-ed
-topics msmarco-v1-passage.dev
-encoder SpladePlusPlusEnsembleDistil
-output run.msmarco-v1-passage-dev.splade-pp-ed-onnx.txt
-impact -pretokenized
评估:
java -cp anserini-0.38.0-fatjar.jar trec_eval -c -M 10 -m recip_rank msmarco-passage.dev-subset run.msmarco-v1-passage-dev.splade-pp-ed-onnx.txt
请参阅 Anserini (v0.38.0) 当前 fatjar 版本的详细说明,以在 TREC 2024 RAG、MS MARCO V1 Passage 和 BEIR 的 MS MARCO V2.1 语料库上重现回归实验,全部直接来自 fatjar!
此外,Anserini 还附带一个用于交互式查询的内置 Web 应用程序以及可供其他应用程序使用的 REST API。请在此处查看我们的文档。
大多数 Anserini 功能都在 Pyserini Python 界面中公开。如果您更熟悉 Python,请从这里开始,尽管 Anserini 是 Pyserini 的重要构建块,因此仍然值得了解 Anserini。
您需要 Java 21 和 Maven 3.9+ 来构建 Anserini。使用--recurse-submodules
选项克隆我们的存储库,以确保eval/
子模块也被克隆(或者,使用git submodule update --init
)。然后,使用 Maven 构建:
mvn clean package
tools/
目录包含评估工具和其他脚本,实际上就是这个存储库,集成为 Git 子模块(以便可以在相关项目之间共享)。构建如下(您可能会收到警告,但可以忽略):
cd tools/eval && tar xvfz trec_eval.9.0.4.tar.gz && cd trec_eval.9.0.4 && make && cd ../../..
cd tools/eval/ndeval && make && cd ../../..
这样,您就应该准备好出发了。 Anserini 的入职之路从这里开始!
如果您使用的是 Windows,请使用 WSL2 来构建 Anserini。如果您尚未安装 WSL2,请参阅 WSL2 安装文档来安装 WSL2。
请注意,在没有 WSL2 的 Windows 上,测试可能会因编码问题而失败,请参阅#1466。一个简单的解决方法是通过将-Dmaven.test.skip=true
添加到上述mvn
命令来跳过测试。有关调试 Windows 构建错误的更多讨论,请参阅 #1121。
Anserini 旨在支持开箱即用的各种标准 IR 测试集合的端到端实验。每个端到端回归都从原始语料库开始,构建必要的索引,执行检索运行并生成评估结果。详情请参阅各个页面。
开发者 | DL19 | DL20 | |
---|---|---|---|
无监督稀疏 | |||
Lucene BoW 基线 | ? | ? | ? |
量化BM25 | ? | ? | ? |
WordPiece 基线(预标记化) | ? | ? | ? |
WordPiece 基线 (Huggingface) | ? | ? | ? |
WordPiece + Lucene BoW 基线 | ? | ? | ? |
文档2查询 | ? | ||
doc2query-T5 | ? | ? | ? |
学习稀疏(uniCOIL 系列) | |||
uniCOIL 无指数 | ? | ? | ? |
uniCOIL 与 doc2query-T5 | ? | ? | ? |
带波浪号的 uniCOIL | ? | ||
学习稀疏(其他) | |||
深度影响 | ? | ||
斯普拉德v2 | ? | ||
SPLADE++ CoCondenser-EnsembleDistil | ? | ? | ? |
SPLADE++ CoCondenser-自蒸馏 | ? | ? | ? |
学习密集(HNSW 指数) | |||
cosDPR-蒸馏 | 满的:? | 满的:? | 满的:? |
BGE-base-en-v1.5 | 满的:? | 满的:? | 满的:? |
OpenAI Ada2 | 满的:? int8:? | 满的:? int8:? | 满的:? int8:? |
连贯英语 v3.0 | 满的:? int8:? | 满的:? int8:? | 满的:? int8:? |
学习密集(平坦索引) | |||
cosDPR-蒸馏 | 满的:? | 满的:? | 满的:? |
BGE-base-en-v1.5 | 满的:? | 满的:? | 满的:? |
OpenAI Ada2 | 满的:? int8:?️ | 满的:? int8:? | 满的:? int8:? |
连贯英语 v3.0 | 满的:? int8:? | 满的:? int8:? | 满的:? int8:? |
学习密集(反向;实验) | |||
cosDPR-distil 带“假词” | ? | ? | ? |
cosDPR-distil 带“LexLSH” | ? | ? | ? |
钥匙:
语料库 | 尺寸 | 校验和 |
---|---|---|
量化BM25 | 1.2GB | 0a623e2c97ac6b7e814bf1323a97b435 |
uniCOIL (无exp) | 2.7GB | f17ddd8c7c00ff121c3c3b147d2e17d8 |
uniCOIL (d2q-T5) | 3.4GB | 78eef752c78c8691f7d61600ceed306f |
uniCOIL(波浪线) | 3.9GB | 12a9c289d94e32fd63a7d39c9677d75c |
深度影响 | 3.6GB | 73843885b503af3c8b3ee62e5f5a9900 |
斯普拉德v2 | 9.9GB | b5d126f5d9a8e1b3ef3f5cb0ba651725 |
SPLADE++ CoCondenser-EnsembleDistil | 4.2GB | e489133bdc54ee1e7c62a32aa582bc77 |
SPLADE++ CoCondenser-自蒸馏 | 4.8GB | cb7e264222f2bf2221dd2c9d28190be1 |
cosDPR-蒸馏 | 57GB | e20ffbc8b5e7f760af31298aefeaebbd |
BGE-base-en-v1.5 | 59 GB | 353d2c9e72e858897ad479cca4ea0db1 |
OpenAI-ada2 | 109GB | a4d843d522ff3a3af7edbee789a63402 |
Cohere 嵌入-english-v3.0 | 38GB | 06a6e38a0522850c6aa504db7b2617f5 |
开发者 | DL19 | DL20 | |
---|---|---|---|
无监督词汇,完整文档* | |||
Lucene BoW 基线 | + | + | + |
WordPiece 基线(预标记化) | + | + | + |
WordPiece 基线(Huggingface 分词器) | + | + | + |
WordPiece + Lucene BoW 基线 | + | + | + |
doc2query-T5 | + | + | + |
无监督词汇、分段文档* | |||
Lucene BoW 基线 | + | + | + |
WordPiece 基线(预标记化) | + | + | + |
WordPiece + Lucene BoW 基线 | + | + | + |
doc2query-T5 | + | + | + |
学习稀疏词汇 | |||
uniCOIL 无指数 | ✓ | ✓ | ✓ |
uniCOIL 与 doc2query-T5 | ✓ | ✓ | ✓ |
语料库 | 尺寸 | 校验和 |
---|---|---|
MS MARCO V1 文档:uniCOIL (noexp) | 11GB | 11b226e1cacd9c8ae0a660fd14cdd710 |
MS MARCO V1 文档:uniCOIL (d2q-T5) | 19GB | 6a00e2c0c375cb1e52c83ae5ac377ebb |
开发者 | DL21 | DL22 | DL23 | |
---|---|---|---|---|
无监督词汇、原始语料库 | ||||
基线 | + | + | + | + |
doc2query-T5 | + | + | + | + |
无监督词汇、增强语料库 | ||||
基线 | + | + | + | + |
doc2query-T5 | + | + | + | + |
学习稀疏词汇 | ||||
uniCOIL noexp 零射击 | ✓ | ✓ | ✓ | ✓ |
uniCOIL 与 doc2query-T5 零样本 | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-EnsembleDistil(缓存查询) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-EnsembleDistil (ONNX) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-SelfDistil(缓存查询) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-SelfDistil (ONNX) | ✓ | ✓ | ✓ | ✓ |
语料库 | 尺寸 | 校验和 |
---|---|---|
uniCOIL (无exp) | 24GB | d9cc1ed3049746e68a2c91bf90e5212d |
uniCOIL (d2q-T5) | 41GB | 1949a00bfd5e1f1a230a04bbc1f01539 |
SPLADE++ CoCondenser-EnsembleDistil | 66GB | 2cdb2adc259b8fa6caf666b20ebdc0e8 |
SPLADE++ CoCondenser-自蒸馏 | 76GB | 061930dd615c7c807323ea7fc7957877 |
开发者 | DL21 | DL22 | DL23 | |
---|---|---|---|---|
无监督词汇,完整文档 | ||||
基线 | + | + | + | + |
doc2query-T5 | + | + | + | + |
无监督词汇、分段文档 | ||||
基线 | + | + | + | + |
doc2query-T5 | + | + | + | + |
学习稀疏词汇 | ||||
uniCOIL noexp 零射击 | ✓ | ✓ | ✓ | ✓ |
uniCOIL 与 doc2query-T5 零样本 | ✓ | ✓ | ✓ | ✓ |
语料库 | 尺寸 | 校验和 |
---|---|---|
MS MARCO V2 文档:uniCOIL (noexp) | 55GB | 97ba262c497164de1054f357caea0c63 |
MS MARCO V2 文档:uniCOIL (d2q-T5) | 72GB | c5639748c2cbad0152e10b0ebde3b804 |
MS MARCO V2.1 语料库源自 TREC 2024 RAG Track 的 V2 语料库。下面的实验捕获最初针对 V2 语料库的主题和 qrel,但已“投影”到 V2.1 语料库。
开发者 | DL21 | DL22 | DL23 | 拉吉开发者 | |
---|---|---|---|---|---|
无监督词汇,完整文档 | |||||
基线 | + | + | + | + | + |
无监督词汇、分段文档 | |||||
基线 | + | + | + | + | + |
钥匙:
bert-base-uncased
分词器进行预分词),关键字查询(?)请参阅表下方的说明,了解如何“一次性”在所有 BEIR 语料库上重现模型结果。
语料库 | F1 | F2 | 中频 | U1 | S1 | BGE(平) | BGE (新南威尔士州) |
---|---|---|---|---|---|---|---|
TREC-新冠病毒 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
生物ASQ | ? | ? | ? | ? | ? | 满的:? | 满的:? |
NFC语料库 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
网Q | ? | ? | ? | ? | ? | 满的:? | 满的:? |
火锅QA | ? | ? | ? | ? | ? | 满的:? | 满的:? |
FiQA-2018 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
信号-1M(RT) | ? | ? | ? | ? | ? | 满的:? | 满的:? |
TREC新闻 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
鲁棒04 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
阿尔古阿纳 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
触摸2020 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-Android | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-英文 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-游戏 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-GIS | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-Mathematica | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-物理 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-程序员 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-统计 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-Tex | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-Unix | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-网站管理员 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
CQADupStack-Wordpress | ? | ? | ? | ? | ? | 满的:? | 满的:? |
知乎 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
数据库百科 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
SCIDOCS | ? | ? | ? | ? | ? | 满的:? | 满的:? |
发烧 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
气候狂热 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
科学事实 | ? | ? | ? | ? | ? | 满的:? | 满的:? |
要重现 SPLADE++ CoCondenser-EnsembleDistil 结果,请首先下载该集合:
wget https://rgw.cs.uwaterloo.ca/pyserini/data/beir-v1.0.0-splade-pp-ed.tar -P collections/
tar xvf collections/beir-v1.0.0-splade-pp-ed.tar -C collections/
压缩包大小为 42 GB,MD5 校验和为9c7de5b444a788c9e74c340bf833173b
。解压数据后,以下命令将循环遍历所有 BEIR 语料库并运行回归:
MODEL= " splade-pp-ed " ; CORPORA=(trec-covid bioasq nfcorpus nq hotpotqa fiqa signal1m trec-news robust04 arguana webis-touche2020 cqadupstack-android cqadupstack-english cqadupstack-gaming cqadupstack-gis cqadupstack-mathematica cqadupstack-physics cqadupstack-programmers cqadupstack-stats cqadupstack-tex cqadupstack-unix cqadupstack-webmasters cqadupstack-wordpress quora dbpedia-entity scidocs fever climate-fever scifact) ; for c in " ${CORPORA[@]} "
do
echo " Running $c ... "
python src/main/python/run_regression.py --index --verify --search --regression beir-v1.0.0- ${c} . ${MODEL} .onnx > logs/log.beir-v1.0.0- ${c} - ${MODEL} .onnx 2>&1
done
您可以通过检查logs/
中的日志文件来验证结果。
对于其他型号,将上述命令修改如下:
钥匙 | 语料库 | 校验和 | MODEL |
---|---|---|---|
F1 | corpus | faefd5281b662c72ce03d22021e4ff6b | flat |
F2 | corpus-wp | 3cf8f3dcdcadd49362965dd4466e6ff2 | flat-wp |
中频 | corpus | faefd5281b662c72ce03d22021e4ff6b | multifield |
U1 | unicoil-noexp | 4fd04d2af816a6637fc12922cccc8a83 | unicoil-noexp |
S1 | splade-pp-ed | 9c7de5b444a788c9e74c340bf833173b | splade-pp-ed |
乙二胺四乙酸 | bge-base-en-v1.5 | e4e8324ba3da3b46e715297407a24f00 | bge-base-en-v1.5-hnsw |
上面的“Corpus”应替换为完整文件名beir-v1.0.0-${corpus}.tar
,例如beir-v1.0.0-bge-base-en-v1.5.tar
。上述命令应该进行一些小的修改:您需要调整--regression
参数以匹配src/main/resources/regression/
中 YAML 配置文件的架构。
下面描述的实验与严格的端到端回归测试无关,因此提供了较低的再现性标准。在大多数情况下,需要手动将命令复制并粘贴到 shell 中才能重现我们的结果。
如果您发现 Anserini 有帮助,我们有一个简单的请求,希望您做出贡献。在标准测试集合上重现基线结果的过程中,请通过向我们发送带有简单注释的拉取请求(如磁盘 4 和 5 页面底部显示的内容)来告知我们您是否成功。可重现性很重要对我们来说,我们想了解成功和失败。由于回归文档是自动生成的,因此应针对原始模板发送拉取请求。然后可以使用bin/build.sh
脚本生成回归文档。反过来,您将被视为贡献者。
除此之外,总是有一些未解决的问题,我们希望得到帮助!
272565
(8/2/2022) 处升级到 Lucene 9.3:此升级造成了向后兼容性问题,请参阅#1952。 Anserini 将自动检测 Lucene 8 索引并禁用一致的平局打破以避免运行时错误。但是,在 Lucene 8 索引上运行的 Lucene 9 代码可能会给出与在 Lucene 8 索引上运行的 Lucene 8 代码略有不同的结果。 Lucene 8 代码无法在 Lucene 9 索引上运行。 Pyserini 也已升级,并且存在类似的问题:在 Lucene 8 索引上运行的 Lucene 9 代码可能会给出与在 Lucene 8 索引上运行的 Lucene 8 代码略有不同的结果。17b702d
(2019 年 7 月 11 日)时从 Java 8 升级到 Java 11。还需要 Maven 3.3+。75e36f9
(2019 年 6 月 12 日)起,Anserini 已升级到 Lucene 8.0;在此之前,该工具包使用Lucene 7.6。根据初步实验,Lucene 8 中的查询评估延迟得到了很大改善。由于这次升级,所有回归的结果都略有变化。要从 Lucene 7.6 重现旧结果,请使用 v0.5.1。 这项研究得到了加拿大自然科学与工程研究委员会(NSERC)的部分支持。之前的支持来自美国国家科学基金会的 IIS-1423002 和 CNS-1405688。所表达的任何意见、发现、结论或建议并不一定反映申办者的观点。