ピセリーニ
Pyserini は、疎表現と密表現を使用した再現可能な情報検索研究のための Python ツールキットです。スパース表現を使用した検索は、Lucene 上に構築された当社グループの Anserini IR ツールキットとの統合によって提供されます。密な表現を使用した検索は、Facebook の Faiss ライブラリとの統合によって提供されます。
Pyserini は主に、多段階のランキング アーキテクチャで効果的で再現可能で使いやすい第 1 段階の取得を提供するように設計されています。当社のツールキットは標準の 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 などの主要な依存関係が自動的に取り込まれます。トランスフォーマーと 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 の論文では、誰でもたった 2 回のクリック (つまり、コピーとペースト) で実験実行を再現できる「2 クリック再現」を導入しました。ドキュメントは、さまざまな実験条件とクエリ セットの概要を提供するさまざまなコーパスの再現マトリックスに編成されています。
- MS マルコ V1 通路
- MS マルコ V1 ドキュメント
- MS マルコ V2 通路
- MS マルコ 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 パッセージ、MS MARCO V2 パッセージ
- 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 Balanced Topic Aware Sampling 実験の再現
- SBERT 高密度検索実験の再現
- ADORE の高密度検索実験の再現
- Vector PRF 実験の再現
- ANCE-PRF実験の再現
- TyDi氏の実験を再現
- DKRR実験の再現
ハイブリッド疎-密検索
ハイブリッド疎-密検索
- MS MARCO V2 コレクションでの 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 マルコ 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 に移行しました。事前に構築されたインデックスのほとんどは Lucene 9 を使用して再構築されましたが、まだ Lucene 8 に基づいているインデックスもいくつかあります。
詳細:
- PyPI v0.17.1 (コミット
33c87c
、2022/08/13 リリース) は、Anserini v0.14.4 に基づいて Lucene 8 上に構築された最後の Pyserini リリースです。その後、Anserini トランクは Lucene 9 にアップグレードされました。 - PyPI v0.18.0 (コミット
5fab14
、2022/09/26 リリース) は、Lucene 9 を使用して Anserini v0.15.0 上に構築されています。その後、Pyserini トランクは Lucene 9 に進化しました。
説明:
影響は何ですか? Lucene 8 で構築されたインデックスは、Lucene 9 コードと完全には互換性がありません (Anserini #1952 を参照)。回避策は、一貫したタイブレークを無効にすることです。これは、Lucene 8 インデックスが Pyserini によって検出された場合に自動的に行われます。ただし、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 で動作するように設計されています。この問題に記載されているように、JDK 9 以降では pyjnius 1.2.0 を破壊する JRE パスの変更があり、Anserini のこことここでも報告されています。この問題は 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) によって部分的に支援されています。