Anserini は、再現可能な情報検索研究のためのツールキットです。 Lucene を基盤とすることで、学術情報検索の研究と実際の検索アプリケーションの構築との間のギャップを埋めることを目指しています。他の目標の中でも特に、私たちの取り組みはこれとは逆のことを目指しています。* Anserini は、2016 年に行われたさまざまなオープンソース検索エンジンの再現性研究から生まれました (Lin et al., ECIR 2016)。ヤンらを参照。 (SIGIR 2017) および Yang et al.概要については (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
次のコマンドは、MS MARCO パッセージ コーパス上で開発クエリ (ONNX を使用してエンコード) を使用して実行される SPLADE++ ED を生成します。
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
TREC 2024 RAG の MS MARCO V2.1 コーパス、MS MARCO V1 Passage、および BEIR での回帰実験をすべて Fatjar から直接再現するには、Anserini の現在の Fatjar リリース (v0.38.0) の詳細な手順を参照してください。
また、Anserini には、他のアプリケーションで使用できる REST API とともに対話型クエリを実行するための組み込み Web アプリが付属しています。こちらのドキュメントをご覧ください。
Anserini のほとんどの機能は、Pyserini Python インターフェイスで公開されています。 Python の方が慣れている場合は、Python から始めてください。ただし、Anserini は Pyserini の重要な構成要素を形成するため、Anserini について学ぶことは依然として価値があります。
Anserini をビルドするには、Java 21 と Maven 3.9 以降が必要です。 --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 ../../..
これで準備は完了です。アンセリーニの新人研修はここから始まります!
Windows を使用している場合は、WSL2 を使用して Anserini をビルドしてください。 WSL2 をまだインストールしていない場合は、「WSL2 インストール」ドキュメントを参照して WSL2 をインストールしてください。
WSL2 のない Windows では、エンコードの問題によりテストが失敗する可能性があることに注意してください。#1466 を参照してください。簡単な回避策は、上記のmvn
コマンドに-Dmaven.test.skip=true
追加してテストをスキップすることです。 Windows ビルド エラーのデバッグに関する追加の議論については、#1121 を参照してください。
Anserini は、すぐに使用できるさまざまな標準 IR テスト コレクションでのエンドツーエンドの実験をサポートするように設計されています。これらのエンドツーエンド回帰はそれぞれ、生のコーパスから開始され、必要なインデックスを構築し、取得実行を実行して、評価結果を生成します。詳細は各ページをご覧ください。
開発者 | DL19 | DL20 | |
---|---|---|---|
教師なしスパース | |||
Lucene BoW ベースライン | ? | ? | ? |
量子化されたBM25 | ? | ? | ? |
WordPiece ベースライン (事前にトークン化された) | ? | ? | ? |
WordPiece ベースライン (Huggingface) | ? | ? | ? |
WordPiece + Lucene BoW ベースライン | ? | ? | ? |
doc2クエリ | ? | ||
doc2クエリ-T5 | ? | ? | ? |
学習済みスパース (uniCOIL ファミリー) | |||
uniCOIL noexp | ? | ? | ? |
doc2query-T5 を使用した uniCOIL | ? | ? | ? |
ティルダ付きユニコイル | ? | ||
学習済みスパース (その他) | |||
ディープインパクト | ? | ||
SPLADEv2 | ? | ||
SPLADE++ CoCondenser-EnsembleDistil | ? | ? | ? |
SPLADE++ CoCondenser-SelfDistil | ? | ? | ? |
Learned Dense (HNSW インデックス) | |||
cosDPR 蒸留 | 満杯:? | 満杯:? | 満杯:? |
BGE ベース en-v1.5 | 満杯:? | 満杯:? | 満杯:? |
OpenAI Ada2 | 満杯:? int8:? | 満杯:? int8:? | 満杯:? int8:? |
Cohere 英語 v3.0 | 満杯:? int8:? | 満杯:? int8:? | 満杯:? int8:? |
Learned Dense (フラットインデックス) | |||
cosDPR 蒸留 | 満杯:? | 満杯:? | 満杯:? |
BGE ベース en-v1.5 | 満杯:? | 満杯:? | 満杯:? |
OpenAI Ada2 | 満杯:? int8:?️ | 満杯:? int8:? | 満杯:? int8:? |
Cohere 英語 v3.0 | 満杯:? int8:? | 満杯:? int8:? | 満杯:? int8:? |
Learned Dense (反転、実験的) | |||
cosDPR-distil と「偽の言葉」 | ? | ? | ? |
「LexLSH」を使用した cosDPR 蒸留 | ? | ? | ? |
鍵:
コーパス | サイズ | チェックサム |
---|---|---|
量子化されたBM25 | 1.2GB | 0a623e2c97ac6b7e814bf1323a97b435 |
uniCOIL (noexp) | 2.7GB | f17ddd8c7c00ff121c3c3b147d2e17d8 |
ユニコイル (d2q-T5) | 3.4GB | 78eef752c78c8691f7d61600ceed306f |
uniCOIL (チルダ) | 3.9GB | 12a9c289d94e32fd63a7d39c9677d75c |
ディープインパクト | 3.6GB | 73843885b503af3c8b3ee62e5f5a9900 |
SPLADEv2 | 9.9GB | b5d126f5d9a8e1b3ef3f5cb0ba651725 |
SPLADE++ CoCondenser-EnsembleDistil | 4.2GB | e489133bdc54ee1e7c62a32aa582bc77 |
SPLADE++ CoCondenser-SelfDistil | 4.8GB | cb7e264222f2bf2221dd2c9d28190be1 |
cosDPR 蒸留 | 57GB | e20ffbc8b5e7f760af31298aefeaebbd |
BGE ベース en-v1.5 | 59GB | 353d2c9e72e858897ad479cca4ea0db1 |
OpenAI-ada2 | 109GB | a4d843d522ff3a3af7edbee789a63402 |
Cohere embed-english-v3.0 | 38GB | 06a6e38a0522850c6aa504db7b2617f5 |
開発者 | DL19 | DL20 | |
---|---|---|---|
教師なし語彙、完全なドキュメント* | |||
Lucene BoW ベースライン | + | + | + |
WordPiece ベースライン (事前にトークン化された) | + | + | + |
WordPiece ベースライン (Huggingface トークナイザー) | + | + | + |
WordPiece + Lucene BoW ベースライン | + | + | + |
doc2クエリ-T5 | + | + | + |
教師なし語彙、セグメント化されたドキュメント* | |||
Lucene BoW ベースライン | + | + | + |
WordPiece ベースライン (事前にトークン化された) | + | + | + |
WordPiece + Lucene BoW ベースライン | + | + | + |
doc2クエリ-T5 | + | + | + |
スパース語彙を学習しました | |||
uniCOIL noexp | ✓ | ✓ | ✓ |
doc2query-T5 を使用した uniCOIL | ✓ | ✓ | ✓ |
コーパス | サイズ | チェックサム |
---|---|---|
MS MARCO V1 ドキュメント: uniCOIL (noexp) | 11GB | 11b226e1cacd9c8ae0a660fd14cdd710 |
MS MARCO V1 ドキュメント: uniCOIL (d2q-T5) | 19GB | 6a00e2c0c375cb1e52c83ae5ac377ebb |
開発者 | DL21 | DL22 | DL23 | |
---|---|---|---|---|
教師なし語彙、オリジナル コーパス | ||||
ベースライン | + | + | + | + |
doc2クエリ-T5 | + | + | + | + |
教師なし語彙、拡張コーパス | ||||
ベースライン | + | + | + | + |
doc2クエリ-T5 | + | + | + | + |
スパース語彙を学習しました | ||||
uniCOIL noexp ゼロショット | ✓ | ✓ | ✓ | ✓ |
doc2query-T5 ゼロショットを使用した uniCOIL | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-EnsembleDistil (キャッシュされたクエリ) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-EnsembleDistil (ONNX) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-SelfDistil (キャッシュされたクエリ) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-SelfDistil (ONNX) | ✓ | ✓ | ✓ | ✓ |
コーパス | サイズ | チェックサム |
---|---|---|
uniCOIL (noexp) | 24GB | d9cc1ed3049746e68a2c91bf90e5212d |
ユニコイル (d2q-T5) | 41GB | 1949a00bfd5e1f1a230a04bbc1f01539 |
SPLADE++ CoCondenser-EnsembleDistil | 66GB | 2cdb2adc259b8fa6caf666b20ebdc0e8 |
SPLADE++ CoCondenser-SelfDistil | 76GB | 061930dd615c7c807323ea7fc7957877 |
開発者 | DL21 | DL22 | DL23 | |
---|---|---|---|---|
教師なし語彙、完全なドキュメント | ||||
ベースライン | + | + | + | + |
doc2クエリ-T5 | + | + | + | + |
教師なし語彙、セグメント化されたドキュメント | ||||
ベースライン | + | + | + | + |
doc2クエリ-T5 | + | + | + | + |
スパース語彙を学習しました | ||||
uniCOIL noexp ゼロショット | ✓ | ✓ | ✓ | ✓ |
doc2query-T5 ゼロショットを使用した uniCOIL | ✓ | ✓ | ✓ | ✓ |
コーパス | サイズ | チェックサム |
---|---|---|
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 | MF | U1 | S1 | BGE(フラット) | BGE (ニューサウスウェールズ州) |
---|---|---|---|---|---|---|---|
TREC-COVID | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
BioASQ | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
NFCコーパス | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
NQ | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
ホットポットQA | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
FiQA-2018 | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
シグナル-1M(RT) | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
TREC-ニュース | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
ロバスト04 | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
アルグアナ | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
タッチ2020 | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-Android | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-英語 | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-Gaming | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-Gis | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-Mathematica | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-物理学 | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-プログラマ | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-Stats | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-Tex | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-Unix | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-ウェブマスター | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
CQADupStack-Wordpress | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
クオラ | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
DBペディア | ? | ? | ? | ? | ? | 満杯:? | 満杯:? |
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/
tarball は 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 |
MF | corpus | faefd5281b662c72ce03d22021e4ff6b | multifield |
U1 | unicoil-noexp | 4fd04d2af816a6637fc12922cccc8a83 | unicoil-noexp |
S1 | splade-pp-ed | 9c7de5b444a788c9e74c340bf833173b | splade-pp-ed |
BGE | 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
。上記のコマンドは、いくつかの小さな変更を加えれば機能するはずです。 src/main/resources/regression/
の YAML 構成ファイルのスキーマと一致するように--regression
パラメーターを微調整する必要があります。
以下に説明する実験は、厳密なエンドツーエンドの回帰テストを伴わないため、再現性の基準が低くなります。ほとんどの場合、結果を再現するにはコマンドを手動でコピーしてシェルに貼り付ける必要があります。
Anserini が役立つと思われた場合は、貢献していただくよう簡単なお願いがあります。標準のテスト コレクションでベースライン結果を再現する過程で、ディスク 4 と 5 のページの下部に表示されるような簡単なメモを添えてプル リクエストを送信し、成功したかどうかをお知らせください。再現性は重要です。私たちは失敗だけでなく成功についても知りたいと思っています。回帰ドキュメントは自動生成されるため、プル リクエストは生のテンプレートに対して送信する必要があります。その後、 bin/build.sh
スクリプトを使用して回帰ドキュメントを生成できます。その結果、あなたも貢献者として認められることになります。
それ以外にも、ご協力いただけると幸いな未解決の問題が常にあります。
272565
(2022 年 8 月 2 日) で 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 日) の時点で Lucene 8.0 にアップグレードされました。それ以前は、ツールキットは Lucene 7.6 を使用します。予備実験に基づいて、Lucene 8 ではクエリ評価のレイテンシーが大幅に改善されました。このアップグレードの結果、すべての回帰の結果がわずかに変化しました。 Lucene 7.6 の古い結果を再現するには、v0.5.1 を使用します。 この研究は、カナダの自然科学工学研究評議会 (NSERC) によって部分的に支援されています。以前のサポートは、IIS-1423002 および CNS-1405688 に基づいて米国国立科学財団から提供されました。表明された意見、調査結果、結論または推奨事項は、必ずしもスポンサーの見解を反映しているわけではありません。