Anserini adalah perangkat untuk penelitian pengambilan informasi yang dapat direproduksi. Dengan mengembangkan Lucene, kami bertujuan untuk menjembatani kesenjangan antara penelitian pengambilan informasi akademis dan praktik membangun aplikasi pencarian di dunia nyata. Di antara tujuan-tujuan lain, upaya kami bertujuan untuk menjadi kebalikan dari tujuan ini.* Anserini berkembang dari studi reproduktifitas berbagai mesin pengambilan sumber terbuka pada tahun 2016 (Lin et al., ECIR 2016). Lihat Yang dkk. (SIGIR 2017) dan Yang dkk. (JDIQ 2018) untuk ikhtisar.
❗ Anserini ditingkatkan dari JDK 11 ke JDK 21 pada commit 272565
(2024/04/03), yang sesuai dengan rilis v0.35.0.
Anserini dikemas dalam fatjar mandiri, yang juga menyediakan cara paling sederhana untuk memulai. Dengan asumsi Anda sudah menginstal Java, ambil fatjar:
wget https://repo1.maven.org/maven2/io/anserini/anserini/0.38.0/anserini-0.38.0-fatjar.jar
Perintah berikut akan menghasilkan proses SPLADE++ ED dengan kueri dev (dikodekan menggunakan ONNX) pada korpus bagian MS MARCO:
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
Untuk mengevaluasi:
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
Lihat instruksi terperinci untuk rilis fatjar Anserini saat ini (v0.38.0) untuk mereproduksi eksperimen regresi pada corpora MS MARCO V2.1 untuk TREC 2024 RAG, pada MS MARCO V1 Passage, dan di BEIR, semuanya langsung dari fatjar!
Selain itu, Anserini hadir dengan aplikasi web bawaan untuk kueri interaktif bersama dengan REST API yang dapat digunakan oleh aplikasi lain. Lihat dokumentasi kami di sini.
Sebagian besar fitur Anserini diekspos di antarmuka Pyserini Python. Jika Anda lebih nyaman dengan Python, mulailah dari sana, meskipun Anserini merupakan bagian penting dari Pyserini, jadi mempelajari tentang Anserini tetap bermanfaat.
Anda memerlukan Java 21 dan Maven 3.9+ untuk membangun Anserini. Kloning repo kita dengan opsi --recurse-submodules
untuk memastikan submodule eval/
juga diklon (sebagai alternatif, gunakan git submodule update --init
). Kemudian, buat menggunakan Maven:
mvn clean package
Direktori tools/
, yang berisi alat evaluasi dan skrip lainnya, sebenarnya adalah repo ini, terintegrasi sebagai submodul Git (sehingga dapat dibagikan ke seluruh proyek terkait). Bangun sebagai berikut (Anda mungkin mendapat peringatan, tapi boleh diabaikan):
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 ../../..
Dengan itu, Anda harus siap berangkat. Jalur orientasi untuk Anserini dimulai di sini!
Jika Anda menggunakan Windows, silakan gunakan WSL2 untuk membangun Anserini. Silakan merujuk ke dokumen Instalasi WSL2 untuk menginstal WSL2 jika Anda belum melakukannya.
Perhatikan bahwa pada Windows tanpa WSL2, pengujian mungkin gagal karena masalah pengkodean, lihat #1466. Solusi sederhana adalah melewati pengujian dengan menambahkan -Dmaven.test.skip=true
ke perintah mvn
di atas. Lihat #1121 untuk diskusi tambahan tentang debugging kesalahan build Windows.
Anserini dirancang untuk mendukung eksperimen end-to-end pada berbagai koleksi pengujian IR standar. Masing-masing regresi end-to-end ini dimulai dari korpus mentah, membuat indeks yang diperlukan, melakukan proses pengambilan, dan menghasilkan hasil evaluasi. Lihat halaman individual untuk detailnya.
dev | DL19 | DL20 | |
---|---|---|---|
Jarang Tanpa Pengawasan | |||
Garis dasar Lucene BoW | ? | ? | ? |
BM25 terkuantisasi | ? | ? | ? |
Garis dasar WordPiece (pra-tokenisasi) | ? | ? | ? |
Garis dasar WordPiece (Huggingface) | ? | ? | ? |
Garis dasar WordPiece + Lucene BoW | ? | ? | ? |
doc2query | ? | ||
doc2query-T5 | ? | ? | ? |
Sparse yang Dipelajari (keluarga uniCOIL) | |||
uniCOIL noexp | ? | ? | ? |
uniCOIL dengan doc2query-T5 | ? | ? | ? |
uniCOIL dengan TILDE | ? | ||
Jarang yang Dipelajari (lainnya) | |||
Dampak Besar | ? | ||
SPLADEv2 | ? | ||
SPLADE++ CoCondenser-EnsembleDistil | ? | ? | ? |
SPLADE++ CoCondenser-SelfDistil | ? | ? | ? |
Padat yang Dipelajari (indeks HNSW) | |||
cosDPR-distilasi | penuh:? | penuh:? | penuh:? |
BGE-base-en-v1.5 | penuh:? | penuh:? | penuh:? |
OpenAI Ada2 | penuh:? int8:? | penuh:? int8:? | penuh:? int8:? |
Kohere Bahasa Inggris v3.0 | penuh:? int8:? | penuh:? int8:? | penuh:? int8:? |
Padat yang Dipelajari (indeks datar) | |||
cosDPR-distilasi | penuh:? | penuh:? | penuh:? |
BGE-base-en-v1.5 | penuh:? | penuh:? | penuh:? |
OpenAI Ada2 | penuh:? int8:?️ | penuh:? int8:? | penuh:? int8:? |
Kohere Bahasa Inggris v3.0 | penuh:? int8:? | penuh:? int8:? | penuh:? int8:? |
Padat yang Dipelajari (Terbalik; eksperimental) | |||
cosDPR-distilasi dengan "kata-kata palsu" | ? | ? | ? |
cosDPR-distilasi dengan "LexLSH" | ? | ? | ? |
Kunci:
Korpora | Ukuran | Jumlah pemeriksaan |
---|---|---|
BM25 terkuantisasi | 1,2 GB | 0a623e2c97ac6b7e814bf1323a97b435 |
uniCOIL (tidak ada pengalaman) | 2,7 GB | f17ddd8c7c00ff121c3c3b147d2e17d8 |
uniCOIL (d2q-T5) | 3,4 GB | 78eef752c78c8691f7d61600ceed306f |
uniCOIL (TILDE) | 3,9 GB | 12a9c289d94e32fd63a7d39c9677d75c |
Dampak Besar | 3,6 GB | 73843885b503af3c8b3ee62e5f5a9900 |
SPLADEv2 | 9,9 GB | b5d126f5d9a8e1b3ef3f5cb0ba651725 |
SPLADE++ CoCondenser-EnsembleDistil | 4,2 GB | e489133bdc54ee1e7c62a32aa582bc77 |
SPLADE++ CoCondenser-SelfDistil | 4,8 GB | cb7e264222f2bf2221dd2c9d28190be1 |
cosDPR-distilasi | 57 GB | e20ffbc8b5e7f760af31298aefeaebbd |
BGE-base-en-v1.5 | 59 GB | 353d2c9e72e858897ad479cca4ea0db1 |
OpenAI-ada2 | 109 GB | a4d843d522ff3a3af7edbee789a63402 |
Cohere semat-english-v3.0 | 38 GB | 06a6e38a0522850c6aa504db7b2617f5 |
dev | DL19 | DL20 | |
---|---|---|---|
Leksikal Tanpa Pengawasan, Dokumen Lengkap * | |||
Garis dasar Lucene BoW | + | + | + |
Garis dasar WordPiece (pra-tokenisasi) | + | + | + |
Garis dasar WordPiece (Tokenizer Huggingface) | + | + | + |
Garis dasar WordPiece + Lucene BoW | + | + | + |
doc2query-T5 | + | + | + |
Dokumen Tersegmentasi dan Leksikal Tanpa Pengawasan * | |||
Garis dasar Lucene BoW | + | + | + |
Garis dasar WordPiece (pra-tokenisasi) | + | + | + |
Garis dasar WordPiece + Lucene BoW | + | + | + |
doc2query-T5 | + | + | + |
Mempelajari Leksikal Jarang | |||
uniCOIL noexp | ✓ | ✓ | ✓ |
uniCOIL dengan doc2query-T5 | ✓ | ✓ | ✓ |
Korpora | Ukuran | Jumlah pemeriksaan |
---|---|---|
Dokumen MS MARCO V1: uniCOIL (noexp) | 11 GB | 11b226e1cacd9c8ae0a660fd14cdd710 |
Dokumen MS MARCO V1: uniCOIL (d2q-T5) | 19GB | 6a00e2c0c375cb1e52c83ae5ac377ebb |
dev | DL21 | DL22 | DL23 | |
---|---|---|---|---|
Leksikal Tanpa Pengawasan, Korpus Asli | ||||
garis dasar | + | + | + | + |
doc2query-T5 | + | + | + | + |
Leksikal Tanpa Pengawasan, Korpus Tertambah | ||||
garis dasar | + | + | + | + |
doc2query-T5 | + | + | + | + |
Mempelajari Leksikal Jarang | ||||
uniCOIL noexp tembakan nol | ✓ | ✓ | ✓ | ✓ |
uniCOIL dengan tembakan nol doc2query-T5 | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-EnsembleDistil (kueri cache) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-EnsembleDistil (ONNX) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-SelfDistil (kueri yang di-cache) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-SelfDistil (ONNX) | ✓ | ✓ | ✓ | ✓ |
Korpora | Ukuran | Jumlah pemeriksaan |
---|---|---|
uniCOIL (tidak ada pengalaman) | 24 GB | d9cc1ed3049746e68a2c91bf90e5212d |
uniCOIL (d2q-T5) | 41 GB | 1949a00bfd5e1f1a230a04bbc1f01539 |
SPLADE++ CoCondenser-EnsembleDistil | 66 GB | 2cdb2adc259b8fa6caf666b20ebdc0e8 |
SPLADE++ CoCondenser-SelfDistil | 76 GB | 061930dd615c7c807323ea7fc7957877 |
dev | DL21 | DL22 | DL23 | |
---|---|---|---|---|
Leksikal Tanpa Pengawasan, Dokumen Lengkap | ||||
garis dasar | + | + | + | + |
doc2query-T5 | + | + | + | + |
Leksikal Tanpa Pengawasan, Dokumen Tersegmentasi | ||||
garis dasar | + | + | + | + |
doc2query-T5 | + | + | + | + |
Mempelajari Leksikal Jarang | ||||
uniCOIL noexp tembakan nol | ✓ | ✓ | ✓ | ✓ |
uniCOIL dengan tembakan nol doc2query-T5 | ✓ | ✓ | ✓ | ✓ |
Korpora | Ukuran | Jumlah pemeriksaan |
---|---|---|
Dokumen MS MARCO V2: uniCOIL (noexp) | 55 GB | 97ba262c497164de1054f357caea0c63 |
Dokumen MS MARCO V2: uniCOIL (d2q-T5) | 72 GB | c5639748c2cbad0152e10b0ebde3b804 |
Korpora MS MARCO V2.1 berasal dari korpora V2 untuk TREC 2024 RAG Track. Eksperimen di bawah menangkap topik dan qrel yang awalnya ditargetkan pada corpora V2, namun telah "diproyeksikan" ke corpora V2.1.
dev | DL21 | DL22 | DL23 | Pengembang RAGgy | |
---|---|---|---|---|---|
Leksikal Tanpa Pengawasan, Dokumen Lengkap | |||||
garis dasar | + | + | + | + | + |
Leksikal Tanpa Pengawasan, Dokumen Tersegmentasi | |||||
garis dasar | + | + | + | + | + |
Kunci:
bert-base-uncased
), kueri kata kunci (?)Lihat petunjuk di bawah tabel tentang cara mereproduksi hasil model pada semua korpora BEIR "sekali jalan".
Korpus | F1 | F2 | MF | U1 | S1 | BGE (datar) | BGE (HNSW) |
---|---|---|---|---|---|---|---|
TREC-COVID | ? | ? | ? | ? | ? | penuh:? | penuh:? |
BioASQ | ? | ? | ? | ? | ? | penuh:? | penuh:? |
NFCorpus | ? | ? | ? | ? | ? | penuh:? | penuh:? |
NQ | ? | ? | ? | ? | ? | penuh:? | penuh:? |
HotpotQA | ? | ? | ? | ? | ? | penuh:? | penuh:? |
FiQA-2018 | ? | ? | ? | ? | ? | penuh:? | penuh:? |
Sinyal-1M(RT) | ? | ? | ? | ? | ? | penuh:? | penuh:? |
TREC-BERITA | ? | ? | ? | ? | ? | penuh:? | penuh:? |
Kuat04 | ? | ? | ? | ? | ? | penuh:? | penuh:? |
ArguAna | ? | ? | ? | ? | ? | penuh:? | penuh:? |
Sentuh2020 | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Android | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Bahasa Inggris | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Game | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Gis | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Mathematica | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Fisika | ? | ? | ? | ? | ? | penuh:? | penuh:? |
Pemrogram CQADupStack | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Statistik | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Tex | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Unix | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Webmaster | ? | ? | ? | ? | ? | penuh:? | penuh:? |
CQADupStack-Wordpress | ? | ? | ? | ? | ? | penuh:? | penuh:? |
Quora | ? | ? | ? | ? | ? | penuh:? | penuh:? |
DBpedia | ? | ? | ? | ? | ? | penuh:? | penuh:? |
SCIDOCS | ? | ? | ? | ? | ? | penuh:? | penuh:? |
DEMAM | ? | ? | ? | ? | ? | penuh:? | penuh:? |
Iklim-DEMAM | ? | ? | ? | ? | ? | penuh:? | penuh:? |
Fakta Sains | ? | ? | ? | ? | ? | penuh:? | penuh:? |
Untuk mereproduksi hasil SPLADE++ CoCondenser-EnsembleDistil, mulailah dengan mengunduh koleksi:
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/
Tarballnya berukuran 42 GB dan memiliki checksum MD5 9c7de5b444a788c9e74c340bf833173b
. Setelah Anda membongkar datanya, perintah berikut akan mengulangi seluruh korpora BEIR dan menjalankan regresi:
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
Anda dapat memverifikasi hasilnya dengan memeriksa file log di logs/
.
Untuk model lainnya, ubah perintah di atas sebagai berikut:
Kunci | Korpus | Jumlah pemeriksaan | 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" di atas harus diganti dengan nama file lengkap beir-v1.0.0-${corpus}.tar
, misalnya beir-v1.0.0-bge-base-en-v1.5.tar
. Perintah di atas akan berfungsi dengan beberapa modifikasi kecil: Anda perlu mengubah parameter --regression
agar sesuai dengan skema file konfigurasi YAML di src/main/resources/regression/
.
Eksperimen yang dijelaskan di bawah ini tidak terkait dengan pengujian regresi menyeluruh yang ketat sehingga memberikan standar reproduktifitas yang lebih rendah. Untuk sebagian besar, menyalin dan menempelkan perintah secara manual ke dalam shell diperlukan untuk mereproduksi hasil kami.
Jika Anda merasa Anserini bermanfaat, kami memiliki permintaan sederhana agar Anda berkontribusi kembali. Dalam rangka mereproduksi hasil dasar pada koleksi pengujian standar, beri tahu kami jika Anda berhasil dengan mengirimkan permintaan penarikan dengan catatan sederhana, seperti yang muncul di bagian bawah halaman untuk Disk 4 & 5. Reproduksibilitas itu penting kepada kami, dan kami ingin mengetahui keberhasilan dan kegagalan. Karena dokumentasi regresi dibuat secara otomatis, permintaan penarikan harus dikirim berdasarkan templat mentah. Kemudian dokumentasi regresi dapat dibuat menggunakan skrip bin/build.sh
. Pada gilirannya, Anda akan diakui sebagai kontributor.
Selain itu, selalu ada masalah terbuka yang kami sangat menghargai bantuannya!
272565
(8/2/2022): peningkatan ini menimbulkan masalah kompatibilitas mundur, lihat #1952. Anserini akan secara otomatis mendeteksi indeks Lucene 8 dan menonaktifkan pemutusan hubungan yang konsisten untuk menghindari kesalahan runtime. Namun, kode Lucene 9 yang berjalan pada indeks Lucene 8 mungkin memberikan hasil yang sedikit berbeda dibandingkan kode Lucene 8 yang berjalan pada indeks Lucene 8. Kode Lucene 8 tidak akan berjalan pada indeks Lucene 9. Pyserini juga telah ditingkatkan dan masalah serupa berlaku: Kode Lucene 9 yang berjalan pada indeks Lucene 8 mungkin memberikan hasil yang sedikit berbeda dari kode Lucene 8 yang berjalan pada indeks Lucene 8.17b702d
(11/7/2019) dari Java 8. Maven 3.3+ juga diperlukan.75e36f9
(6/12/2019); sebelumnya, toolkit ini menggunakan Lucene 7.6. Berdasarkan percobaan awal, latensi evaluasi kueri telah banyak ditingkatkan di Lucene 8. Sebagai hasil dari peningkatan ini, hasil semua regresi sedikit berubah. Untuk mereproduksi hasil lama dari Lucene 7.6, gunakan v0.5.1. Penelitian ini sebagian didukung oleh Natural Sciences and Engineering Research Council (NSERC) Kanada. Dukungan sebelumnya datang dari US National Science Foundation di bawah IIS-1423002 dan CNS-1405688. Pendapat, temuan, dan kesimpulan atau rekomendasi apa pun yang diungkapkan tidak mencerminkan pandangan sponsor.