Piserini
Pyserini adalah perangkat Python untuk penelitian pengambilan informasi yang dapat direproduksi dengan representasi yang jarang dan padat. Pengambilan menggunakan representasi renggang disediakan melalui integrasi dengan perangkat IR Anserini grup kami, yang dibangun di Lucene. Pengambilan menggunakan representasi padat disediakan melalui integrasi dengan perpustakaan Faiss Facebook.
Pyserini terutama dirancang untuk menyediakan pengambilan tahap pertama yang efektif, dapat direproduksi, dan mudah digunakan dalam arsitektur pemeringkatan multitahap. Toolkit kami mandiri sebagai paket Python standar dan dilengkapi dengan kueri, penilaian relevansi, indeks bawaan, dan skrip evaluasi untuk banyak koleksi pengujian IR yang umum digunakan. Dengan Pyserini, mudah untuk mereproduksi proses pada sejumlah koleksi pengujian IR standar!
Untuk lebih jelasnya, makalah kami di SIGIR 2021 memberikan gambaran yang bagus.
Baru! Panduan untuk bekerja dengan Corpus Dokumen MS MARCO 2.1 untuk TREC 2024 RAG Track.
❗ Anserini ditingkatkan dari JDK 11 ke JDK 21 pada commit 272565
(2024/04/03), yang sesuai dengan rilis v0.35.0. Sejalan dengan itu, Pyserini ditingkatkan ke JDK 21 pada penerapan b2f677
(2024/04/04).
? Instalasi
Instal melalui PyPI:
Pyserini dibuat dengan Python 3.10 (versi lain mungkin berfungsi, tetapi YMMV) dan Java 21 (karena ketergantungannya pada Anserini). Instalasi pip
akan secara otomatis menarik dependensi utama seperti PyTorch, ? Transformers, dan Runtime ONNX.
Toolkit ini juga memiliki sejumlah dependensi opsional:
pip install 'pyserini[optional]'
Khususnya, faiss-cpu
, lightgbm
, dan nmslib
disertakan dalam dependensi opsional ini. Instalasi paket-paket ini bisa bersifat temperamental, itulah sebabnya paket-paket ini tidak disertakan dalam dependensi inti. Mungkin ada baiknya Anda menginstalnya sendiri secara terpisah.
Ekosistem perangkat lunak berkembang pesat dan sumber frustrasi yang potensial adalah ketidakcocokan antar versi ketergantungan yang mendasarinya. Kami memberikan petunjuk instalasi tambahan yang terperinci di sini.
Jika Anda berencana hanya menggunakan Pyserini, maka instruksi pip
(tanpa dependensi opsional) akan baik-baik saja. Namun, jika Anda berencana berkontribusi pada basis kode atau ingin bekerja dengan fitur terbaru yang belum dirilis, Anda memerlukan instalasi pengembangan. Petunjuk disediakan di sini.
? Bagaimana cara saya mencari?
Pyserini mendukung berbagai jenis model pengambilan. Lihat panduan ini untuk mengetahui detail tentang cara mencari korpora umum dalam penelitian IR dan NLP (misalnya, MS MARCO, NaturalQuestions, BEIR, dll.) menggunakan indeks yang telah kami buat untuk Anda. Berikut ini tautan langsung ke panduan ini:
- Model leksikal tradisional (misalnya BM25) menggunakan Lucene.
- Mempelajari model pengambilan renggang (misalnya, uniCOIL, SPLADE, dll.) menggunakan Lucene.
- Mempelajari model pengambilan padat (misalnya DPR, Contriever, BGE, dll.) menggunakan Lucene atau Faiss.
- Model pengambilan hibrid (misalnya fusi padat-jarang).
Setelah Anda mendapatkan hasil teratas , Anda sebenarnya ingin mengambil teks dokumen... Lihat panduan ini untuk mengetahui caranya.
? Bagaimana cara mengindeks korpus saya sendiri?
Itu tergantung pada jenis model pengambilan yang ingin Anda gunakan untuk mencari:
- Membangun Indeks BM25 (Implementasi Java Langsung)
- Membangun Indeks BM25 (Implementasi Python yang Dapat Disematkan)
- Membangun Indeks Vektor Jarang
- Membangun Indeks Vektor Padat
Langkah-langkahnya berbeda untuk kelas model yang berbeda: panduan ini (sama seperti tautan di atas) menjelaskan detailnya.
? FAQ Tambahan
- Bagaimana cara mengonfigurasi pencarian? (Panduan Pencarian Interaktif)
- Bagaimana cara mengunduh indeks secara manual? (Panduan Pencarian Interaktif)
- Bagaimana cara melakukan pengambilan padat dan hibrid? (Panduan Pencarian Interaktif)
- Bagaimana cara saya mengulangi istilah indeks dan mengakses statistik istilah? (API Pembaca Indeks)
- Bagaimana cara melintasi postingan? (API Pembaca Indeks)
- Bagaimana cara mengakses dan memanipulasi vektor istilah? (API Pembaca Indeks)
- Bagaimana cara menghitung skor tf-idf atau BM25 suatu dokumen? (API Pembaca Indeks)
- Bagaimana cara mengakses statistik indeks dasar? (API Pembaca Indeks)
- Bagaimana cara mengakses alat analisa Lucene yang mendasarinya? (API Penganalisis)
- Bagaimana cara membuat kueri Lucene khusus? (API Pembuat Kueri)
- Bagaimana cara saya mengulangi koleksi mentah? (API Koleksi)
⚗️ Reproduksibilitas
Dengan Pyserini, mudah untuk mereproduksi proses pada sejumlah koleksi pengujian IR standar! Kami menyediakan sejumlah indeks bawaan yang secara langsung mendukung reproduktifitas "out of the box".
Dalam makalah SIGIR 2022 kami, kami memperkenalkan "reproduksi dua klik" yang memungkinkan siapa pun mereproduksi proses eksperimental hanya dengan dua klik (yaitu, salin dan tempel). Dokumentasi disusun ke dalam matriks reproduksi untuk korpora berbeda yang memberikan ringkasan kondisi eksperimen dan kumpulan kueri yang berbeda:
- Bagian MS MARCO V1
- Dokumen MS MARCO V1
- Bagian MS MARCO V2
- Dokumen MS MARCO V2
- BEIR
- Tuan TyDi
- KEAJAIBAN
- Menjawab Pertanyaan Domain Terbuka
- CIRAL
Untuk lebih jelasnya, lihat makalah kami tentang Membangun Budaya Reproduksibilitas dalam Penelitian Akademik.
Panduan reproduksi tambahan di bawah ini memberikan petunjuk langkah demi langkah yang terperinci.
Pengambilan Jarang
Pengambilan Jarang
- Mereproduksi garis dasar Robust04 untuk pengambilan ad hoc
- Mereproduksi garis dasar BM25 untuk MS MARCO V1 Passage Ranking
- Mereproduksi garis dasar BM25 untuk Pemeringkatan Dokumen MS MARCO V1
- Mereproduksi garis dasar BM25 multi-bidang untuk Peringkat Dokumen MS MARCO V1 dari Elasticsearch
- Mereproduksi garis dasar BM25 pada Koleksi MS MARCO V2
- Mereproduksi eksperimen pemfilteran LTR: MS MARCO V1 Passage, Dokumen MS MARCO V1
- Mereproduksi eksperimen IRST pada Koleksi MS MARCO V1
- Mereproduksi DeepImpact: Bagian MS MARCO V1
- Mereproduksi uniCOIL dengan doc2query-T5: MS MARCO V1, MS MARCO V2
- Mereproduksi uniCOIL dengan TILDE: MS MARCO V1 Passage, MS MARCO V2 Passage
- Mereproduksi SPLADEv2: Bagian MS MARCO V1
- Mereproduksi eksperimen Tuan TyDi
- Mereproduksi garis dasar BM25 untuk HC4
- Mereproduksi garis dasar BM25 untuk HC4 di NeuCLIR22
- Mereproduksi eksperimen SLIM
- Garis Dasar untuk KILT: tolok ukur untuk Tugas Bahasa Intensif Pengetahuan
- Garis dasar untuk TripClick: kumpulan data log klik berskala besar di domain kesehatan
- Garis dasar (dalam Anserini) untuk kumpulan data DEMAM (Ekstraksi Fakta dan VERifikasi).
Pengambilan Padat
Pengambilan Padat
- Mereproduksi eksperimen TCT-ColBERTv1: MS MARCO V1
- Mereproduksi eksperimen TCT-ColBERTv2: MS MARCO V1, MS MARCO V2
- Mereproduksi eksperimen DPR
- Mereproduksi eksperimen BPR
- Mereproduksi eksperimen ANCE
- Mereproduksi eksperimen DistilBERT KD
- Mereproduksi eksperimen Pengambilan Sampel Sadar Topik Seimbang DistilBERT
- Mereproduksi eksperimen pengambilan padat SBERT
- Mereproduksi eksperimen pengambilan padat ADORE
- Mereproduksi eksperimen Vektor PRF
- Mereproduksi eksperimen ANCE-PRF
- Mereproduksi eksperimen Tuan TyDi
- Mereproduksi eksperimen DKRR
Pengambilan Hibrida Jarang-Padat
Pengambilan Hibrida Jarang-Padat
- Mereproduksi eksperimen uniCOIL + TCT-ColBERTv2 pada Koleksi MS MARCO V2
Korpora yang tersedia
Korpora yang tersedia
Korpora | Ukuran | Jumlah pemeriksaan |
---|
Bagian MS MARCO V1: uniCOIL (noexp) | 2,7 GB | f17ddd8c7c00ff121c3c3b147d2e17d8 |
Bagian MS MARCO V1: uniCOIL (d2q-T5) | 3,4 GB | 78eef752c78c8691f7d61600ceed306f |
Dokumen MS MARCO V1: uniCOIL (noexp) | 11 GB | 11b226e1cacd9c8ae0a660fd14cdd710 |
Dokumen MS MARCO V1: uniCOIL (d2q-T5) | 19GB | 6a00e2c0c375cb1e52c83ae5ac377ebb |
Bagian MS MARCO V2: uniCOIL (noexp) | 24 GB | d9cc1ed3049746e68a2c91bf90e5212d |
Bagian MS MARCO V2: uniCOIL (d2q-T5) | 41 GB | 1949a00bfd5e1f1a230a04bbc1f01539 |
Dokumen MS MARCO V2: uniCOIL (noexp) | 55 GB | 97ba262c497164de1054f357caea0c63 |
Dokumen MS MARCO V2: uniCOIL (d2q-T5) | 72 GB | c5639748c2cbad0152e10b0ebde3b804 |
? Dokumentasi Tambahan
- Panduan untuk indeks bawaan
- Panduan untuk pencarian interaktif
- Panduan klasifikasi teks dengan dataset 20Newsgroups
- Panduan untuk bekerja dengan Kumpulan Data Penelitian Terbuka COVID-19 (CORD-19)
- Panduan untuk bekerja dengan penautan entitas
- Panduan untuk bekerja dengan spaCy
- Penggunaan API Penganalisis
- Penggunaan API Pembaca Indeks
- Penggunaan API Pembuat Kueri
- Penggunaan API Koleksi
- Interaksi Langsung melalui Pyjnius
️ Riwayat Rilis
- v0.43.0 (dengan Anserini v0.38.0): 11 November 2024 [Catatan Rilis]
- v0.42.0 (dengan Anserini v0.38.0): 8 November 2024 [Catatan Rilis] [Masalah Umum]
- v0.41.0 (dengan Anserini v0.38.0): 7 November 2024 [Catatan Rilis] [Masalah Umum]
- v0.40.0 (dengan Anserini v0.38.0): 28 Oktober 2024 [Catatan Rilis]
- v0.39.0 (dengan Anserini v0.38.0): 27 September 2024 [Catatan Rilis]
- v0.38.0 (dengan Anserini v0.38.0): 11 September 2024 [Catatan Rilis]
- v0.37.0 (dengan Anserini v0.37.0): 26 Agustus 2024 [Catatan Rilis]
- v0.36.0 (dengan Anserini v0.36.1): 17 Juni 2024 [Catatan Rilis]
- v0.35.0 (dengan Anserini v0.35.0): 4 April 2024 [Catatan Rilis]
lebih tua... (dan catatan sejarah)
- v0.25.0 (dengan Anserini v0.25.0): 31 Maret 2024 [Catatan Rilis]
- v0.24.0 (dengan Anserini v0.24.0): 28 Desember 2023 [Catatan Rilis]
- v0.23.0 (dengan Anserini v0.23.0): 17 November 2023 [Catatan Rilis]
- v0.22.1 (dengan Anserini v0.22.1): 19 Oktober 2023 [Catatan Rilis]
- v0.22.0 (dengan Anserini v0.22.0): 31 Agustus 2023 [Catatan Rilis]
- v0.21.0 (dengan Anserini v0.21.0): 6 April 2023 [Catatan Rilis]
- v0.20.0 (dengan Anserini v0.20.0): 1 Februari 2023 [Catatan Rilis]
- v0.19.2 (dengan Anserini v0.16.2): 16 Desember 2022 [Catatan Rilis]
- v0.19.1 (dengan Anserini v0.16.1): 12 November 2022 [Catatan Rilis]
- v0.19.0 (dengan Anserini v0.16.1): 2 November 2022 [Catatan Rilis] [Masalah Umum]
- v0.18.0 (dengan Anserini v0.15.0): 26 September 2022 [Catatan Rilis] (Rilis pertama berdasarkan Lucene 9)
- v0.17.1 (dengan Anserini v0.14.4): 13 Agustus 2022 [Catatan Rilis] (Rilis final berdasarkan Lucene 8)
- v0.17.0 (dengan Anserini v0.14.3): 28 Mei 2022 [Catatan Rilis]
- v0.16.1 (dengan Anserini v0.14.3): 12 Mei 2022 [Catatan Rilis]
- v0.16.0 (dengan Anserini v0.14.1): 1 Maret 2022 [Catatan Rilis]
- v0.15.0 (dengan Anserini v0.14.0): 21 Januari 2022 [Catatan Rilis]
- v0.14.0 (dengan Anserini v0.13.5): 8 November 2021 [Catatan Rilis]
- v0.13.0 (dengan Anserini v0.13.1): 3 Juli 2021 [Catatan Rilis]
- v0.12.0 (dengan Anserini v0.12.0): 5 Mei 2021 [Catatan Rilis]
- v0.11.0.0: 18 Februari 2021 [Catatan Rilis]
- v0.10.1.0: 8 Januari 2021 [Catatan Rilis]
- v0.10.0.1: 2 Desember 2020 [Catatan Rilis]
- v0.10.0.0: 26 November 2020 [Catatan Rilis]
- v0.9.4.0: 26 Juni 2020 [Catatan Rilis]
- v0.9.3.1: 11 Juni 2020 [Catatan Rilis]
- v0.9.3.0: 27 Mei 2020 [Catatan Rilis]
- v0.9.2.0: 15 Mei 2020 [Catatan Rilis]
- v0.9.1.0: 6 Mei 2020 [Catatan Rilis]
- v0.9.0.0: 18 April 2020 [Catatan Rilis]
- v0.8.1.0: 22 Maret 2020 [Catatan Rilis]
- v0.8.0.0: 12 Maret 2020 [Catatan Rilis]
- v0.7.2.0: 25 Januari 2020 [Catatan Rilis]
- v0.7.1.0: 9 Januari 2020 [Catatan Rilis]
- v0.7.0.0: 13 Desember 2019 [Catatan Rilis]
- v0.6.0.0: 2 November 2019
️ Catatan Sejarah
⁉️ Transisi Lucene 8 ke Lucene 9. Pada tahun 2022, Pyserini mengalami transisi dari Lucene 8 ke Lucene 9. Sebagian besar indeks prebuilt telah dibangun kembali menggunakan Lucene 9, namun ada beberapa yang masih berdasarkan Lucene 8.
Lebih detailnya:
- PyPI v0.17.1 (commit
33c87c
, dirilis 13/08/2022) adalah rilis Pyserini terakhir yang dibangun di Lucene 8, berdasarkan Anserini v0.14.4. Setelah itu, bagasi Anserini ditingkatkan menjadi Lucene 9. - PyPI v0.18.0 (commit
5fab14
, dirilis 26/09/2022) dibangun di atas Anserini v0.15.0, menggunakan Lucene 9. Setelah itu, trunk Pyserini ditingkatkan ke Lucene 9.
Penjelasan:
Apa dampaknya? Indeks yang dibuat dengan Lucene 8 tidak sepenuhnya kompatibel dengan kode Lucene 9 (lihat Anserini #1952). Solusinya adalah dengan menonaktifkan pemutusan hubungan yang konsisten, yang terjadi secara otomatis jika indeks Lucene 8 terdeteksi oleh Pyserini. Namun, kode Lucene 9 yang berjalan pada indeks Lucene 8 akan memberikan hasil yang sedikit berbeda dengan kode Lucene 8 yang berjalan pada indeks Lucene 8. Perhatikan bahwa kode Lucene 8 tidak dapat membaca indeks yang dibuat dengan Lucene 9.
Mengapa hal ini perlu? Meskipun mengganggu, peningkatan ke Lucene 9 diperlukan untuk memanfaatkan indeks HNSW Lucene, yang akan meningkatkan kemampuan Pyserini dan membuka ruang desain hibrida padat/jarang.
Dengan v0.11.0.0 dan sebelumnya, versi Pyserini mengadopsi konvensi XYZW , di mana XYZ melacak versi Anserini, dan W digunakan untuk membedakan rilis berbeda pada akhir Python. Dimulai dengan Anserini v0.12.0, versi Anserini dan Pyserini telah dipisahkan.
Anserini dirancang untuk bekerja dengan JDK 11. Ada perubahan jalur JRE di atas JDK 9 yang merusak pyjnius 1.2.0, seperti yang didokumentasikan dalam terbitan ini, juga dilaporkan di Anserini di sini dan di sini. Masalah ini telah diperbaiki dengan pyjnius 1.2.1 (dirilis Desember 2019). Kesalahan sebelumnya didokumentasikan dalam buku catatan ini dan buku catatan ini mendokumentasikan perbaikannya.
Referensi
Jika Anda menggunakan Pyserini, harap kutip makalah berikut:
@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",
}
Ucapan Terima Kasih
Penelitian ini sebagian besar didukung oleh Natural Sciences and Engineering Research Council (NSERC) Kanada.