Anserini 是一個用於可重複資訊檢索研究的工具包。透過以 Lucene 為基礎,我們的目標是彌合學術資訊檢索研究與建立現實世界搜尋應用程式的實踐之間的差距。除其他目標外,我們的努力旨在與此相反。參見楊等人。 (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 | 59GB | 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。75e36f9
(2019 年 6 月 12 日)起,Anserini 已升級至 Lucene 8.0;在此之前,工具包使用Lucene 7.6。根據初步實驗,Lucene 8 中的查詢評估延遲得到了很大改善。要重現 Lucene 7.6 的舊結果,請使用 v0.5.1。 這項研究得到了加拿大自然科學與工程研究委員會(NSERC)的部分支持。先前的支持來自美國國家科學基金會的 IIS-1423002 和 CNS-1405688。所表達的任何意見、調查結果、結論或建議並不一定反映申辦者的觀點。