皮塞里尼
Pyserini 是一個 Python 工具包,用於具有稀疏和密集表示的可重複資訊檢索研究。透過與我們小組基於 Lucene 構建的 Anserini IR 工具包集成,可以使用稀疏表示進行檢索。透過與 Facebook 的 Faiss 庫集成,提供使用密集表示的檢索。
Pyserini 的主要設計目的是在多階段排名架構中提供有效、可重複且易於使用的第一階段檢索。我們的工具包是獨立的標準 Python 套件,並附帶針對許多常用 IR 測試集合的查詢、相關性判斷、預先建立索引和評估腳本。使用 Pyserini,可以輕鬆地在許多標準 IR 測試集合上重現運行!
有關更多詳細信息,我們在 SIGIR 2021 中的論文提供了很好的概述。
新的! TREC 2024 RAG Track 的 MS MARCO 2.1 文件語料庫使用指南。
❗ Anserini 在提交272565
(2024/04/03) 處從 JDK 11 升級到 JDK 21,對應於 v0.35.0 的版本。相應地,Pyserini 在提交b2f677
(2024/04/04) 處升級到 JDK 21。
?安裝
透過 PyPI 安裝:
Pyserini 建構於 Python 3.10(其他版本可能也可以,但 YMMV)和 Java 21(由於其依賴 Anserini)。 pip
安裝將自動引入主要依賴項,例如 PyTorch、? Transformer 和 ONNX 運作時。
該工具包還有許多可選的依賴項:
pip install 'pyserini[optional]'
值得注意的是, faiss-cpu
、 lightgbm
和nmslib
包含在這些可選依賴項中。這些軟體包的安裝可能會不穩定,這就是為什麼它們不包含在核心依賴項中的原因。自己單獨安裝這些可能是個好主意。
軟體生態系統正在快速發展,潛在的挫折感是不同版本的底層依賴項之間的不相容。我們在此處提供其他詳細的安裝說明。
如果您打算僅使用Pyserini,那麼pip
指令(不含可選依賴項)應該沒問題。但是,如果您打算為程式碼庫做出貢獻或想要使用最新的尚未發布的功能,則需要進行開發安裝。此處提供了說明。
?我如何搜尋?
Pyserini 支援不同類型的檢索模型。請參閱本指南,以詳細了解如何使用我們已為您建立的索引來搜尋 IR 和 NLP 研究中的常見語料庫(例如 MS MARCO、NaturalQuestions、BEIR 等)。以下是該指南的直接連結:
- 使用 Lucene 的傳統詞彙模型(例如 BM25)。
- 使用Lucene學習稀疏檢索模型(例如uniCOIL、SPLADE等)。
- 使用 Lucene 或 Faiss 學習密集檢索模型(例如 DPR、Contriever、BGE 等)。
- 混合檢索模型(例如,密集稀疏融合)。
一旦獲得前k 個結果,您實際上會想要取得文件文字...請參閱本指南以了解如何操作。
?如何索引我自己的語料庫?
好吧,這取決於您想要使用哪種類型的檢索模型進行搜尋:
- 建構 BM25 索引(直接 Java 實作)
- 建立 BM25 索引(嵌入式 Python 實作)
- 建立稀疏向量索引
- 建立密集向量索引
對於不同類別的模型,步驟有所不同:本指南(與上面的連結相同)描述了詳細資訊。
?其他常見問題解答
- 如何配置搜尋? (互動式搜尋指南)
- 如何手動下載索引? (互動式搜尋指南)
- 如何執行密集和混合檢索? (互動式搜尋指南)
- 如何迭代索引術語和存取術語統計資訊? (索引閱讀器 API)
- 如何遍歷貼文? (索引閱讀器 API)
- 如何存取和操作術語向量? (索引閱讀器 API)
- 如何計算文件的 tf-idf 或 BM25 分數? (索引閱讀器 API)
- 如何存取基本索引統計資訊? (索引閱讀器 API)
- 如何存取底層 Lucene 分析器? (分析器API)
- 如何建立自訂 Lucene 查詢? (查詢產生器 API)
- 如何迭代原始集合? (採集API)
⚗️ 再現性
使用 Pyserini,可以輕鬆地在許多標準 IR 測試集合上重現運行!我們提供了許多預先建構的索引,直接支援「開箱即用」的可重複性。
在我們的 SIGIR 2022 論文中,我們引入了“雙擊複製”,允許任何人只需單擊兩次(即複製和貼上)即可複製實驗運行。文件被組織成不同語料庫的再現矩陣,提供不同實驗條件和查詢集的摘要:
- MS MARCO V1 通道
- MS MARCO V1 文件
- MS MARCO V2 通道
- MS MARCO V2 文件
- 貝爾
- 泰迪先生
- 米拉克
- 開放域問答
- 西拉爾
有關更多詳細信息,請參閱我們關於在學術研究中建立可重複性文化的論文。
下面的其他複製指南提供了詳細的逐步說明。
稀疏檢索
稀疏檢索
- 複製 Robust04 基線以進行暫時檢索
- 重現 MS MARCO V1 通道排名的 BM25 基線
- 重現 MS MARCO V1 文件排名的 BM25 基線
- 從 Elasticsearch 重現 MS MARCO V1 文件排名的多字段 BM25 基線
- 在 MS MARCO V2 系列上複製 BM25 基線
- 重現 LTR 過濾實驗:MS MARCO V1 Passage、MS MARCO V1 Document
- 在 MS MARCO V1 系列上重現 IRST 實驗
- 重現 DeepImpact:MS MARCO V1 頻道
- 使用 doc2query-T5 再現 uniCOIL:MS MARCO V1、MS MARCO V2
- 用 TILDE 再現 uniCOIL:MS MARCO V1 Passage、MS MARCO V2 Passage
- 再現 SPLADEv2:MS MARCO V1 頻道
- 重現 TyDi 先生的實驗
- 複製 HC4 的 BM25 基線
- 在 NeuCLIR22 上重現 HC4 的 BM25 基線
- 重現 SLIM 實驗
- KILT 基線:知識密集型語言任務的基準
- TripClick 的基線:健康領域點擊日誌的大規模資料集
- FEVER(事實提取和驗證)資料集的基線(在 Anserini 中)
密集檢索
密集檢索
- 重現 TCT-ColBERTv1 實驗:MS MARCO V1
- 重現 TCT-ColBERTv2 實驗:MS MARCO V1、MS MARCO V2
- 重現 DPR 實驗
- 重現 BPR 實驗
- 再現 ANCE 實驗
- 重現 DistilBERT KD 實驗
- 重現 DistilBERT 平衡主題知覺取樣實驗
- 重現 SBERT 密集檢索實驗
- 重現 ADORE 密集檢索實驗
- 再現向量 PRF 實驗
- 重現 ANCE-PRF 實驗
- 重現 TyDi 先生的實驗
- 重現 DKRR 實驗
混合稀疏-密集檢索
混合稀疏-密集檢索
- 在 MS MARCO V2 Collections 上重現 uniCOIL + TCT-ColBERTv2 實驗
可用語料庫
可用語料庫
語料庫 | 尺寸 | 校驗和 |
---|
MS MARCO V1 通道:uniCOIL (noexp) | 2.7GB | f17ddd8c7c00ff121c3c3b147d2e17d8 |
MS MARCO V1 通道:uniCOIL (d2q-T5) | 3.4GB | 78eef752c78c8691f7d61600ceed306f |
MS MARCO V1 文件:uniCOIL (noexp) | 11GB | 11b226e1cacd9c8ae0a660fd14cdd710 |
MS MARCO V1 文件:uniCOIL (d2q-T5) | 19GB | 6a00e2c0c375cb1e52c83ae5ac377ebb |
MS MARCO V2 通道:uniCOIL (noexp) | 24GB | d9cc1ed3049746e68a2c91bf90e5212d |
MS MARCO V2 通道:uniCOIL (d2q-T5) | 41GB | 1949a00bfd5e1f1a230a04bbc1f01539 |
MS MARCO V2 文件:uniCOIL (noexp) | 55GB | 97ba262c497164de1054f357caea0c63 |
MS MARCO V2 文件:uniCOIL (d2q-T5) | 72GB | c5639748c2cbad0152e10b0ebde3b804 |
?附加文檔
- 預建索引指南
- 互動式搜尋指南
- 使用 20Newsgroups 資料集進行文字分類的指南
- COVID-19 開放研究資料集 (CORD-19) 使用指南
- 使用實體連結的指南
- spaCy 使用指南
- 分析器 API 的使用
- 索引讀取器 API 的使用
- 查詢產生器 API 的使用
- 集合 API 的使用
- 透過 Pyjnius 直接交互
️ 發布歷史
- v0.43.0(附 Anserini v0.38.0):2024 年 11 月 11 日 [發行說明]
- v0.42.0(附 Anserini v0.38.0):2024 年 11 月 8 日 [發行說明] [已知問題]
- v0.41.0(附 Anserini v0.38.0):2024 年 11 月 7 日 [發行說明] [已知問題]
- v0.40.0(附 Anserini v0.38.0):2024 年 10 月 28 日 [發行說明]
- v0.39.0(附 Anserini v0.38.0):2024 年 9 月 27 日 [發行說明]
- v0.38.0(附 Anserini v0.38.0):2024 年 9 月 11 日 [發行說明]
- v0.37.0(附 Anserini v0.37.0):2024 年 8 月 26 日 [發行說明]
- v0.36.0(附 Anserini v0.36.1):2024 年 6 月 17 日 [發行說明]
- v0.35.0(附 Anserini v0.35.0):2024 年 4 月 4 日 [發行說明]
較舊的...(和歷史記錄)
- v0.25.0(附 Anserini v0.25.0):2024 年 3 月 31 日 [發行說明]
- v0.24.0(附 Anserini v0.24.0):2023 年 12 月 28 日 [發行說明]
- v0.23.0(附 Anserini v0.23.0):2023 年 11 月 17 日 [發行說明]
- v0.22.1(附 Anserini v0.22.1):2023 年 10 月 19 日 [發行說明]
- v0.22.0(附 Anserini v0.22.0):2023 年 8 月 31 日 [發行說明]
- v0.21.0(附 Anserini v0.21.0):2023 年 4 月 6 日 [發行說明]
- v0.20.0(附 Anserini v0.20.0):2023 年 2 月 1 日 [發行說明]
- v0.19.2(附 Anserini v0.16.2):2022 年 12 月 16 日 [發行說明]
- v0.19.1(附 Anserini v0.16.1):2022 年 11 月 12 日 [發行說明]
- v0.19.0(附 Anserini v0.16.1):2022 年 11 月 2 日 [發行說明] [已知問題]
- v0.18.0(附 Anserini v0.15.0):2022 年 9 月 26 日 [發行說明](基於 Lucene 9 的第一個版本)
- v0.17.1(附 Anserini v0.14.4):2022 年 8 月 13 日 [發行說明](基於 Lucene 8 的最終版本)
- v0.17.0(附 Anserini v0.14.3):2022 年 5 月 28 日 [發行說明]
- v0.16.1(附 Anserini v0.14.3):2022 年 5 月 12 日 [發行說明]
- v0.16.0(附 Anserini v0.14.1):2022 年 3 月 1 日 [發行說明]
- v0.15.0(附 Anserini v0.14.0):2022 年 1 月 21 日 [發行說明]
- v0.14.0(附 Anserini v0.13.5):2021 年 11 月 8 日 [發行說明]
- v0.13.0(附 Anserini v0.13.1):2021 年 7 月 3 日 [發行說明]
- v0.12.0(附 Anserini v0.12.0):2021 年 5 月 5 日 [發行說明]
- v0.11.0.0:2021 年 2 月 18 日 [發行說明]
- v0.10.1.0:2021 年 1 月 8 日 [發行說明]
- v0.10.0.1:2020 年 12 月 2 日 [發行說明]
- v0.10.0.0:2020 年 11 月 26 日 [發行說明]
- v0.9.4.0:2020 年 6 月 26 日 [發行說明]
- v0.9.3.1:2020 年 6 月 11 日 [發行說明]
- v0.9.3.0:2020 年 5 月 27 日 [發行說明]
- v0.9.2.0:2020 年 5 月 15 日 [發行說明]
- v0.9.1.0:2020 年 5 月 6 日 [發行說明]
- v0.9.0.0:2020 年 4 月 18 日 [發行說明]
- v0.8.1.0:2020 年 3 月 22 日 [發行說明]
- v0.8.0.0:2020 年 3 月 12 日 [發行說明]
- v0.7.2.0:2020 年 1 月 25 日 [發行說明]
- v0.7.1.0:2020 年 1 月 9 日 [發行說明]
- v0.7.0.0:2019 年 12 月 13 日 [發行說明]
- v0.6.0.0:2019 年 11 月 2 日
️ 歷史筆記
⁉️ Lucene 8 到 Lucene 9 的過渡。 2022年,Pyserini經歷了從Lucene 8到Lucene 9的過渡。
更多詳情:
- PyPI v0.17.1(提交
33c87c
,2022/08/13 發布)是基於 Lucene 8 構建的最後一個 Pyserini 版本,基於 Anserini v0.14.4。此後,Anserini trunk升級到Lucene 9。 - PyPI v0.18.0(提交
5fab14
,2022/09/26 發布)基於 Anserini v0.15.0 構建,使用 Lucene 9。
說明:
有什麼影響?使用 Lucene 8 建立的索引與 Lucene 9 程式碼不完全相容(請參閱 Anserini #1952)。解決方法是停用一致的平局打破,如果 Pyserini 偵測到 Lucene 8 索引,這種情況會自動發生。但是,在 Lucene 8 索引上執行的 Lucene 9 程式碼將給出與在 Lucene 8 索引上執行的 Lucene 8 程式碼略有不同的結果。請注意,Lucene 8 程式碼無法讀取使用 Lucene 9 建構的索引。
為什麼這是必要的?雖然具有顛覆性,但為了利用 Lucene 的 HNSW 索引,升級到 Lucene 9 是必要的,這將增強 Pyserini 的功能並打開密集/稀疏混合的設計空間。
在 v0.11.0.0 及之前,Pyserini 版本採用了XYZW約定,其中XYZ追蹤 Anserini 的版本, W用於區分 Python 端的不同版本。從 Anserini v0.12.0 開始,Anserini 和 Pyserini 版本已解耦。
Anserini 設計用於與 JDK 11 配合使用。此問題已在 pyjnius 1.2.1(2019 年 12 月發布)中修復。此筆記本中記錄了先前的錯誤,並且此筆記本記錄了修復程序。
參考
如果您使用 Pyserini,請引用以下論文:
@INPROCEEDINGS{Lin_etal_SIGIR2021_Pyserini,
author = "Jimmy Lin and Xueguang Ma and Sheng-Chieh Lin and Jheng-Hong Yang and Ronak Pradeep and Rodrigo Nogueira",
title = "{Pyserini}: A {Python} Toolkit for Reproducible Information Retrieval Research with Sparse and Dense Representations",
booktitle = "Proceedings of the 44th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR 2021)",
year = 2021,
pages = "2356--2362",
}
致謝
這項研究主要得到加拿大自然科學與工程研究委員會(NSERC)的部分支持。