Pyserini
Pyserini es un conjunto de herramientas de Python para la investigación de recuperación de información reproducible con representaciones densas y escasas. La recuperación mediante representaciones dispersas se proporciona mediante la integración con el kit de herramientas Anserini IR de nuestro grupo, que se basa en Lucene. La recuperación mediante representaciones densas se proporciona mediante la integración con la biblioteca Faiss de Facebook.
Pyserini está diseñado principalmente para proporcionar una recuperación de primera etapa eficaz, reproducible y fácil de usar en una arquitectura de clasificación de varias etapas. Nuestro kit de herramientas es autónomo como un paquete Python estándar y viene con consultas, juicios de relevancia, índices prediseñados y scripts de evaluación para muchas colecciones de pruebas de IR de uso común. ¡Con Pyserini, es fácil reproducir ejecuciones en varias colecciones de pruebas de IR estándar!
Para obtener detalles adicionales, nuestro artículo en SIGIR 2021 proporciona una buena descripción general.
¡Nuevo! Guía para trabajar con el Corpus de Documentos MS MARCO 2.1 para TREC 2024 RAG Track.
❗ Anserini se actualizó de JDK 11 a JDK 21 en la confirmación 272565
(03/04/2024), que corresponde al lanzamiento de v0.35.0. En consecuencia, Pyserini se actualizó a JDK 21 en la confirmación b2f677
(04/04/2024).
? Instalación
Instalar a través de PyPI:
Pyserini se basa en Python 3.10 (es posible que otras versiones funcionen, excepto YMMV) y Java 21 (debido a su dependencia de Anserini). Una instalación pip
incorporará automáticamente dependencias importantes como PyTorch, ? Transformers y ONNX Runtime.
El kit de herramientas también tiene una serie de dependencias opcionales:
pip install 'pyserini[optional]'
En particular, faiss-cpu
, lightgbm
y nmslib
se incluyen en estas dependencias opcionales. La instalación de estos paquetes puede ser temperamental, razón por la cual no están incluidos en las dependencias principales. Podría ser una buena idea instalarlos usted mismo por separado.
El ecosistema de software está evolucionando rápidamente y una posible fuente de frustración es la incompatibilidad entre diferentes versiones de dependencias subyacentes. Proporcionamos instrucciones de instalación detalladas adicionales aquí.
Si planeas usar solo Pyserini, entonces la instrucción pip
(sin las dependencias opcionales) debería estar bien. Sin embargo, si planea contribuir al código base o desea trabajar con las últimas funciones aún no publicadas, necesitará una instalación de desarrollo. Las instrucciones se proporcionan aquí.
? ¿Cómo busco?
Pyserini admite diferentes tipos de modelos de recuperación. Consulte esta guía para obtener detalles sobre cómo buscar corpus comunes en investigaciones de IR y PNL (por ejemplo, MS MARCO, NaturalQuestions, BEIR, etc.) utilizando índices que ya hemos creado para usted. Aquí hay enlaces directos a la guía:
- Modelos léxicos tradicionales (por ejemplo, BM25) que utilizan Lucene.
- Aprendí modelos de recuperación dispersa (p. ej., uniCOIL, SPLADE, etc.) usando Lucene.
- Aprendí modelos de recuperación densa (p. ej., DPR, Contriever, BGE, etc.) utilizando Lucene o Faiss.
- Modelos de recuperación híbridos (p. ej., fusión densa-escasa).
Una vez que obtenga los mejores resultados, querrá obtener el texto del documento... Consulte esta guía para saber cómo hacerlo.
? ¿Cómo indexo mi propio corpus?
Bueno, depende del tipo de modelo de recuperación con el que quieras buscar:
- Creación de un índice BM25 (implementación directa de Java)
- Creación de un índice BM25 (implementación integrable de Python)
- Construyendo un índice de vectores dispersos
- Construyendo un índice de vectores densos
Los pasos son diferentes para diferentes clases de modelos: esta guía (igual que los enlaces anteriores) describe los detalles.
? Preguntas frecuentes adicionales
- ¿Cómo configuro la búsqueda? (Guía de búsqueda interactiva)
- ¿Cómo descargo índices manualmente? (Guía de búsqueda interactiva)
- ¿Cómo realizo una recuperación densa e híbrida? (Guía de búsqueda interactiva)
- ¿Cómo itero sobre los términos del índice y accedo a las estadísticas de los términos? (API del lector de índices)
- ¿Cómo recorro las publicaciones? (API del lector de índices)
- ¿Cómo accedo y manipulo vectores de términos? (API del lector de índices)
- ¿Cómo calculo la puntuación tf-idf o BM25 de un documento? (API del lector de índices)
- ¿Cómo accedo a las estadísticas básicas del índice? (API del lector de índices)
- ¿Cómo accedo a los analizadores subyacentes de Lucene? (API del analizador)
- ¿Cómo creo consultas personalizadas de Lucene? (API del generador de consultas)
- ¿Cómo itero sobre colecciones sin formato? (API de colección)
⚗️ Reproducibilidad
¡Con Pyserini, es fácil reproducir ejecuciones en varias colecciones de pruebas de IR estándar! Proporcionamos una serie de índices prediseñados que respaldan directamente la reproducibilidad "lista para usar".
En nuestro artículo de SIGIR 2022, introdujimos "reproducciones con dos clics" que permiten a cualquiera reproducir ejecuciones experimentales con solo dos clics (es decir, copiar y pegar). La documentación está organizada en matrices de reproducción para diferentes corpus que proporcionan un resumen de diferentes condiciones experimentales y conjuntos de consultas:
- Pasaje MS MARCO V1
- Documento MS MARCO V1
- Pasaje MS MARCO V2
- Documento MS MARCO V2
- BEIR
- señor tydi
- MIRACL
- Respuesta a preguntas de dominio abierto
- CIRAL
Para obtener más detalles, consulte nuestro artículo sobre Creación de una cultura de reproducibilidad en la investigación académica.
Las guías de reproducción adicionales a continuación brindan instrucciones detalladas paso a paso.
Recuperación escasa
Recuperación escasa
- Reproducción de líneas base de Robust04 para recuperación ad hoc
- Reproducción de la línea de base BM25 para la clasificación de aprobación de MS MARCO V1
- Reproducción de la línea base BM25 para la clasificación de documentos MS MARCO V1
- Reproducción de la línea base BM25 de múltiples campos para la clasificación de documentos MS MARCO V1 de Elasticsearch
- Reproducción de líneas base BM25 en las colecciones MS MARCO V2
- Reproducción de experimentos de filtrado LTR: Pasaje MS MARCO V1, Documento MS MARCO V1
- Reproducción de experimentos IRST en las colecciones MS MARCO V1
- Reproducción de DeepImpact: Pasaje MS MARCO V1
- Reproduciendo uniCOIL con doc2query-T5: MS MARCO V1, MS MARCO V2
- Reproducción de uniCOIL con TILDE: Pasaje MS MARCO V1, Pasaje MS MARCO V2
- Reproduciendo SPLADEv2: Pasaje MS MARCO V1
- Reproduciendo los experimentos del Sr. TyDi
- Reproducción de líneas base de BM25 para HC4
- Reproducción de líneas base de BM25 para HC4 en NeuCLIR22
- Reproducción de experimentos SLIM
- Líneas de base para KILT: un punto de referencia para tareas lingüísticas intensivas en conocimiento
- Líneas de base para TripClick: un conjunto de datos a gran escala de registros de clics en el dominio de la salud
- Líneas de base (en Anserini) para el conjunto de datos FEVER (Extracción y VERificación de hechos)
Recuperación densa
Recuperación densa
- Reproducción de experimentos TCT-ColBERTv1: MS MARCO V1
- Reproducción de experimentos TCT-ColBERTv2: MS MARCO V1, MS MARCO V2
- Reproducción de experimentos DPR
- Reproducción de experimentos BPR.
- Reproducción de experimentos ANCE
- Reproducción de experimentos de DistilBERT KD
- Reproducción de experimentos de muestreo consciente de temas equilibrados de DistilBERT
- Reproducción de experimentos de recuperación densa SBERT
- Reproducción de experimentos de recuperación densos de ADORE
- Reproducción de experimentos de Vector PRF
- Reproducción de experimentos ANCE-PRF.
- Reproduciendo los experimentos del Sr. TyDi
- Reproducción de experimentos DKRR
Recuperación híbrida escasa y densa
Recuperación híbrida escasa y densa
- Reproducción de experimentos uniCOIL + TCT-ColBERTv2 en las colecciones MS MARCO V2
Corporas disponibles
Corporas disponibles
corpus | Tamaño | Suma de comprobación |
---|
Pasaje MS MARCO V1: uniCOIL (noexp) | 2,7 GB | f17ddd8c7c00ff121c3c3b147d2e17d8 |
Pasaje MS MARCO V1: uniCOIL (d2q-T5) | 3,4GB | 78eef752c78c8691f7d61600ceed306f |
Documento MS MARCO V1: uniCOIL (noexp) | 11GB | 11b226e1cacd9c8ae0a660fd14cdd710 |
Documento MS MARCO V1: uniCOIL (d2q-T5) | 19GB | 6a00e2c0c375cb1e52c83ae5ac377ebb |
Pasaje MS MARCO V2: uniCOIL (noexp) | 24GB | d9cc1ed3049746e68a2c91bf90e5212d |
Pasaje MS MARCO V2: uniCOIL (d2q-T5) | 41GB | 1949a00bfd5e1f1a230a04bbc1f01539 |
Documento MS MARCO V2: uniCOIL (noexp) | 55GB | 97ba262c497164de1054f357caea0c63 |
Documento MS MARCO V2: uniCOIL (d2q-T5) | 72GB | c5639748c2cbad0152e10b0ebde3b804 |
? Documentación adicional
- Guía de índices prediseñados
- Guía para la búsqueda interactiva.
- Guía para la clasificación de textos con el conjunto de datos 20Newsgroups
- Guía para trabajar con el conjunto de datos de investigación abierta COVID-19 (CORD-19)
- Guía para trabajar con la vinculación de entidades
- Guía para trabajar con spaCy
- Uso de la API del analizador
- Uso de la API del lector de índices
- Uso de la API del generador de consultas
- Uso de la API de colección
- Interacción directa a través de Pyjnius
️ Historial de lanzamientos
- v0.43.0 (con Anserini v0.38.0): 11 de noviembre de 2024 [Notas de la versión]
- v0.42.0 (con Anserini v0.38.0): 8 de noviembre de 2024 [Notas de la versión] [Problemas conocidos]
- v0.41.0 (con Anserini v0.38.0): 7 de noviembre de 2024 [Notas de la versión] [Problemas conocidos]
- v0.40.0 (con Anserini v0.38.0): 28 de octubre de 2024 [Notas de la versión]
- v0.39.0 (con Anserini v0.38.0): 27 de septiembre de 2024 [Notas de la versión]
- v0.38.0 (con Anserini v0.38.0): 11 de septiembre de 2024 [Notas de la versión]
- v0.37.0 (con Anserini v0.37.0): 26 de agosto de 2024 [Notas de la versión]
- v0.36.0 (con Anserini v0.36.1): 17 de junio de 2024 [Notas de la versión]
- v0.35.0 (con Anserini v0.35.0): 4 de abril de 2024 [Notas de la versión]
más antiguo... (y notas históricas)
- v0.25.0 (con Anserini v0.25.0): 31 de marzo de 2024 [Notas de la versión]
- v0.24.0 (con Anserini v0.24.0): 28 de diciembre de 2023 [Notas de la versión]
- v0.23.0 (con Anserini v0.23.0): 17 de noviembre de 2023 [Notas de la versión]
- v0.22.1 (con Anserini v0.22.1): 19 de octubre de 2023 [Notas de la versión]
- v0.22.0 (con Anserini v0.22.0): 31 de agosto de 2023 [Notas de la versión]
- v0.21.0 (con Anserini v0.21.0): 6 de abril de 2023 [Notas de la versión]
- v0.20.0 (con Anserini v0.20.0): 1 de febrero de 2023 [Notas de la versión]
- v0.19.2 (con Anserini v0.16.2): 16 de diciembre de 2022 [Notas de la versión]
- v0.19.1 (con Anserini v0.16.1): 12 de noviembre de 2022 [Notas de la versión]
- v0.19.0 (con Anserini v0.16.1): 2 de noviembre de 2022 [Notas de la versión] [Problemas conocidos]
- v0.18.0 (con Anserini v0.15.0): 26 de septiembre de 2022 [Notas de la versión] (Primera versión basada en Lucene 9)
- v0.17.1 (con Anserini v0.14.4): 13 de agosto de 2022 [Notas de la versión] (versión final basada en Lucene 8)
- v0.17.0 (con Anserini v0.14.3): 28 de mayo de 2022 [Notas de la versión]
- v0.16.1 (con Anserini v0.14.3): 12 de mayo de 2022 [Notas de la versión]
- v0.16.0 (con Anserini v0.14.1): 1 de marzo de 2022 [Notas de la versión]
- v0.15.0 (con Anserini v0.14.0): 21 de enero de 2022 [Notas de la versión]
- v0.14.0 (con Anserini v0.13.5): 8 de noviembre de 2021 [Notas de la versión]
- v0.13.0 (con Anserini v0.13.1): 3 de julio de 2021 [Notas de la versión]
- v0.12.0 (con Anserini v0.12.0): 5 de mayo de 2021 [Notas de la versión]
- v0.11.0.0: 18 de febrero de 2021 [Notas de la versión]
- v0.10.1.0: 8 de enero de 2021 [Notas de la versión]
- v0.10.0.1: 2 de diciembre de 2020 [Notas de la versión]
- v0.10.0.0: 26 de noviembre de 2020 [Notas de la versión]
- v0.9.4.0: 26 de junio de 2020 [Notas de la versión]
- v0.9.3.1: 11 de junio de 2020 [Notas de la versión]
- v0.9.3.0: 27 de mayo de 2020 [Notas de la versión]
- v0.9.2.0: 15 de mayo de 2020 [Notas de la versión]
- v0.9.1.0: 6 de mayo de 2020 [Notas de la versión]
- v0.9.0.0: 18 de abril de 2020 [Notas de la versión]
- v0.8.1.0: 22 de marzo de 2020 [Notas de la versión]
- v0.8.0.0: 12 de marzo de 2020 [Notas de la versión]
- v0.7.2.0: 25 de enero de 2020 [Notas de la versión]
- v0.7.1.0: 9 de enero de 2020 [Notas de la versión]
- v0.7.0.0: 13 de diciembre de 2019 [Notas de la versión]
- v0.6.0.0: 2 de noviembre de 2019
️ Notas históricas
⁉️ Transición de Lucene 8 a Lucene 9. En 2022, Pyserini experimentó una transición de Lucene 8 a Lucene 9. La mayoría de los índices prediseñados se reconstruyeron con Lucene 9, pero todavía hay algunos basados en Lucene 8.
Más detalles:
- PyPI v0.17.1 (commit
33c87c
, lanzado el 13/08/2022) es la última versión de Pyserini construida en Lucene 8, basada en Anserini v0.14.4. A partir de entonces, el troncal Anserini se actualizó a Lucene 9. - PyPI v0.18.0 (commit
5fab14
, lanzado el 26/09/2022) se basa en Anserini v0.15.0, utilizando Lucene 9. A partir de entonces, el tronco de Pyserini avanzó a Lucene 9.
Explicaciones:
¿Cuál es el impacto? Los índices creados con Lucene 8 no son totalmente compatibles con el código de Lucene 9 (consulte Anserini #1952). La solución es deshabilitar el desempate consistente, lo que ocurre automáticamente si Pyserini detecta un índice de Lucene 8. Sin embargo, el código de Lucene 9 que se ejecuta en índices de Lucene 8 dará resultados ligeramente diferentes a los del código de Lucene 8 que se ejecuta en índices de Lucene 8. Tenga en cuenta que el código de Lucene 8 no puede leer índices creados con Lucene 9.
¿Por qué es esto necesario? Aunque disruptiva, es necesaria una actualización a Lucene 9 para aprovechar los índices HNSW de Lucene, lo que aumentará las capacidades de Pyserini y abrirá el espacio de diseño de híbridos densos/dispersos.
Con v0.11.0.0 y anteriores, las versiones de Pyserini adoptaron la convención de XYZW , donde XYZ rastrea la versión de Anserini y W se usa para distinguir diferentes versiones en el extremo de Python. A partir de Anserini v0.12.0, las versiones de Anserini y Pyserini se han desacoplado.
Anserini está diseñado para funcionar con JDK 11. Hubo un cambio de ruta de JRE por encima de JDK 9 que interrumpe pyjnius 1.2.0, como se documenta en este número, también informado en Anserini aquí y aquí. Este problema se solucionó con pyjnius 1.2.1 (lanzado en diciembre de 2019). El error anterior se documentó en este cuaderno y este cuaderno documenta la solución.
Referencias
Si utiliza Pyserini, cite el siguiente artículo:
@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",
}
Expresiones de gratitud
Esta investigación cuenta principalmente con el apoyo parcial del Consejo de Investigación en Ingeniería y Ciencias Naturales (NSERC) de Canadá.