Este repositorio contiene la implementación oficial del algoritmo UPR (paseando por pasaje no supervisado) introducido en el documento "Mejora de la recuperación del pasaje con generación de preguntas de disparo cero".


Para usar este repositorio, se necesita una instalación estándar de Pytorch. Proporcionamos dependencias en el archivo requisitos.txt.
Recomendamos usar uno de los contenedores de Pytorch más recientes de NGC. Se puede extraer una imagen de Docker con el comando docker pull nvcr.io/nvidia/pytorch:22.01-py3 . Para usar esta imagen de Docker, también se requiere una instalación del kit de herramientas de contenedores NVIDIA.
A través del contenedor Docker, instale los transformers de bibliotecas y sentencepiece con PIP Install.
Seguimos la convención de DPR y segmentamos los artículos de Wikipedia en pasajes de 100 palabras de largo. El archivo de evidencia proporcionado de DPR se puede descargar con el comando
python utils / download_data . py - - resource data . wikipedia - split . psgs_w100Este archivo de evidencia contiene campos separados por pestañas para ID de pasaje, texto del pasaje y título de pasaje.
id text title
1 " Aaron Aaron ( or ; " " Ahärôn " " ) is a prophet, high priest, and the brother of Moses in the Abrahamic religions. Knowledge of Aaron, along with his brother Moses, comes exclusiv
ely from religious texts, such as the Bible and Quran. The Hebrew Bible relates that, unlike Moses, who grew up in the Egyptian royal court, Aaron and his elder sister Miriam remained
with their kinsmen in the eastern border-land of Egypt (Goshen). When Moses first confronted the Egyptian king about the Israelites, Aaron served as his brother's spokesman ( " " prophet "
" ) to the Pharaoh. Part of the Law (Torah) that Moses received from " Aaron
2 " God at Sinai granted Aaron the priesthood for himself and his male descendants, and he became the first High Priest of the Israelites. Aaron died before the Israelites crossed
the North Jordan river and he was buried on Mount Hor (Numbers 33:39; Deuteronomy 10:6 says he died and was buried at Moserah). Aaron is also mentioned in the New Testament of the Bib
le. According to the Book of Exodus, Aaron first functioned as Moses' assistant. Because Moses complained that he could not speak well, God appointed Aaron as Moses' " " prophet " " (Exodu
s 4:10-17; 7:1). At the command of Moses, he let " Aaron
... ... ... El formato de datos de entrada es JSON. Cada diccionario en el archivo JSON contiene una pregunta, una lista que contiene datos de los pasajes recuperados de Top-K y una lista (opcional) de respuestas posibles. Para cada pasaje de Top-K, incluimos los atributos (evidencia) ID, Has_Answer y Retriever (opcional) Retriever. El atributo id es ID de paso del archivo de evidencia de Wikipedia, has_answer denota si el texto del pasaje contiene el tramo de respuesta o no. El siguiente es la plantilla del archivo .json
[
{
"question" : " .... " ,
"answers" : [ " ... " , " ... " , " ... " ],
"ctxs" : [
{
"id" : " .... " ,
"score" : " ... " ,
"has_answer" : " .... " ,
},
...
]
},
...
]Un ejemplo cuando los pasajes se recuperan usando BM25 cuando consultan el conjunto de desarrollo de preguntas naturales.
[
{
"question" : " who sings does he love me with reba " ,
"answers" : [ " Linda Davis " ],
"ctxs" : [
{
"id" : 11828871 ,
"score" : 18.3 ,
"has_answer" : false
},
{
"id" : 11828872 ,
"score" : 14.7 ,
"has_answer" : false ,
},
{
"id" : 11828866 ,
"score" : 14.4 ,
"has_answer" : true ,
},
...
]
},
...
]Proporcionamos los pasajes recuperados para las divisiones de desarrollo/prueba de NaturalQuestions-Open (NQ), Triviaqa, Squad-Open, WebQuestions (WebQ) y EntityQuestions (EQ) conjuntos de datos que cubren 5 retrievers: BM25, MSS, Contriever, DPR y MSS-DPR. Utilice el siguiente comando para descargar estos conjuntos de datos
python utils / download_data . py
- - resource { key from download_data . py 's RESOURCES_MAP}
[ optional - - output_dir { your location }] Por ejemplo, para descargar todos los datos de Top-K, use --resource data . Para descargar los datos específicos de Top-K, por ejemplo, BM25, use --resource data.retriever-outputs.bm25 .
Para volver a clasificar los pasajes recuperados con UPR, utilice el siguiente comando donde se deben indicar las rutas del archivo de evidencia y el archivo de pasaje recuperado Top-K.
DISTRIBUTED_ARGS= " -m torch.distributed.launch --nproc_per_node 8 --nnodes 1 --node_rank 0 --master_addr localhost --master_port 6000 "
python ${DISTRIBUTED_ARGS} upr.py
--num-workers 2
--log-interval 1
--topk-passages 1000
--hf-model-name " bigscience/T0_3B "
--use-gpu
--use-bf16
--report-topk-accuracies 1 5 20 100
--evidence-data-path " wikipedia-split/psgs_w100.tsv "
--retriever-topk-passages-path " bm25/nq-dev.json " -La opción --use-bf16 proporciona velocidades y ahorros de memoria en GPU de amperios como A100 o A6000. Sin embargo, cuando se trabaja con GPU V100, este argumento debe eliminarse.
Hemos proporcionado un script de ejemplo "UPR-DEMO.SH" en el directorio "Ejemplos". Para usar este script, modifique las rutas de datos de datos y entrada / salida en consecuencia.
Proporcionamos los puntajes de evaluación en los conjuntos de conjuntos de datos cuando se usa el modelo de lenguaje T0-3B en UPR.
| Retriever (+Re-Ranker) | Escuadrón | Triviaqa | Preguntas naturales abiertas | Preguntas web | Preguntas de entidad |
|---|---|---|---|---|---|
| MSS | 51.3 | 67.2 | 60.0 | 49.2 | 51.2 |
| MSS + UPR | 75.7 | 81.3 | 77.3 | 71.8 | 71.3 |
| BM25 | 71.1 | 76.4 | 62.9 | 62.4 | 71.2 |
| BM25 + UPR | 83.6 | 83.0 | 78.6 | 72.9 | 79.3 |
| Contrario | 63.4 | 73.9 | 67.9 | 65.7 | 63.0 |
| Contrario + UPR | 81.3 | 82.8 | 80.4 | 75.7 | 76.0 |
| Retriever (+Re-Ranker) | Escuadrón | Triviaqa | Preguntas naturales abiertas | Preguntas web | Preguntas de entidad |
|---|---|---|---|---|---|
| RPD | 59.4 | 79.8 | 79.2 | 74.6 | 51.1 |
| DPR + UPR | 80.7 | 84.3 | 83.4 | 76.5 | 65.4 |
| MSS-DPR | 73.1 | 81.9 | 81.4 | 76.9 | 60.6 |
| MSS-DPR + UPR | 85.2 | 84.8 | 83.9 | 77.2 | 73.9 |
Volvemos a clasificar la unión de los 1000 pasajes superiores recuperados de cada uno de los BM25 y MSS Retrievers Natural Preguntas, el conjunto de desarrollo. Este archivo de datos se puede descargar como:
python utils/download_data.py --resource data.retriever-outputs.mss-bm25-union.nq-dev Para estos experimentos de ablación, aprobamos el argumento --topk-passages 2000 ya que este archivo contiene la unión de dos conjuntos de pasajes de los 1000 principales.
| Modelo | Perdiguero | Top-1 | Top-5 | Top-20 | Top-100 |
|---|---|---|---|---|---|
| - | BM25 | 22.3 | 43.8 | 62.3 | 76.0 |
| - | MSS | 17.7 | 38.6 | 57.4 | 72.4 |
| T5 (3B) | BM25 + MSS | 22.0 | 50.5 | 71.4 | 84.0 |
| GPT-NEO (2.7B) | BM25 + MSS | 27.2 | 55.0 | 73.9 | 84.2 |
| GPT-J (6B) | BM25 + MSS | 29.8 | 59.5 | 76.8 | 85.6 |
| T5-LM-ADATT (250 m) | BM25 + MSS | 23.9 | 51.4 | 70.7 | 83.1 |
| T5-LM-ADATT (800m) | BM25 + MSS | 29.1 | 57.5 | 75.1 | 84.8 |
| T5-LM-ADATT (3B) | BM25 + MSS | 29.7 | 59.9 | 76.9 | 85.6 |
| T5-LM-ADAPT (11B) | BM25 + MSS | 32.1 | 62.3 | 78.5 | 85.8 |
| T0-3B | BM25 + MSS | 36.7 | 64.9 | 79.1 | 86.1 |
| T0-11B | BM25 + MSS | 37.4 | 64.9 | 79.1 | 86.0 |
Los modelos GPT se pueden ejecutar en UPR utilizando el script gpt/upr_gpt.py . Este script tiene opciones similares a las del script upr.py , pero necesitamos aprobar --use-fp16 como argumento en lugar de --use-bf16 . El argumento de --hf-model-name puede ser EleutherAI/gpt-neo-2.7B o EleutherAI/gpt-j-6B .
Consulte el directorio abre-dominio-QA para obtener detalles para realizar capacitación e inferencia con los puntos de control previamente capacitados.
Para cualquier error o error en la base de código, abra un nuevo problema o envíe un correo electrónico a Devendra Singh Sachan ([email protected]).
Si encuentra útil este código o datos, considere citar nuestro documento como:
@article{sachan2022improving,
title = " Improving Passage Retrieval with Zero-Shot Question Generation " ,
author = " Sachan, Devendra Singh and Lewis, Mike and Joshi, Mandar and Aghajanyan, Armen and Yih, Wen-tau and Pineau, Joelle and Zettlemoyer, Luke " ,
booktitle = " Proceedings of the 2022 Conference on Empirical Methods in Natural Language Processing " ,
publisher = " Association for Computational Linguistics " ,
url = " https://arxiv.org/abs/2204.07496 " ,
year = " 2022 "
}