Ce référentiel contient la mise en œuvre officielle de l'algorithme UPR (rediffusion de passage non supervisé) introduit dans l'article "Amélioration de la récupération de passage avec la génération de questions zéro-shot".


Pour utiliser ce dépôt, une installation standard de pytorch est nécessaire. Nous fournissons des dépendances dans le fichier exigences.txt.
Nous vous recommandons d'utiliser l'un des conteneurs Pytorch les plus récents de NGC. Une image Docker peut être tirée avec la commande docker pull nvcr.io/nvidia/pytorch:22.01-py3 . Pour utiliser cette image Docker, une installation de la boîte à outils NVIDIA Container est également requise.
Sur le conteneur Docker, veuillez installer les transformers de bibliothèques et sentencepiece à l'aide de PIP Installer.
Nous suivons la convention DPR et segmentons les articles Wikipedia en passages de 100 mots. Le fichier de preuves fourni par DPR peut être téléchargé avec la commande
python utils / download_data . py - - resource data . wikipedia - split . psgs_w100Ce fichier de preuves contient des champs séparés par TAB pour l'ID de passage, le texte du passage et le titre de passage.
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
... ... ... Le format de données d'entrée est JSON. Chaque dictionnaire du fichier JSON contient une question, une liste contenant des données des passages récupérés supérieurs et une liste (facultative) de réponses possibles. Pour chaque passage supérieur, nous incluons les attributs (preuves) ID, HAS_ANSWER et (facultatif) Retriever. L'attribut id est l'ID de passage du fichier de preuves Wikipedia, has_answer indique si le texte de passage contient ou non la réponse de réponse. Voici le modèle du fichier .json
[
{
"question" : " .... " ,
"answers" : [ " ... " , " ... " , " ... " ],
"ctxs" : [
{
"id" : " .... " ,
"score" : " ... " ,
"has_answer" : " .... " ,
},
...
]
},
...
]Un exemple lorsque les passages sont récupérés à l'aide de BM25 lorsque les requêtes à l'aide de questions naturelles de développement.
[
{
"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 ,
},
...
]
},
...
]Nous fournissons les 1000 premiers passages récupérés pour les divisions Dev / Test de NaturalQuestions-Open (NQ), Triviaqa, Squad-Open, WebQuestions (WebQ) et EntityQuestions (EQ) Couvrant 5 retrievers: BM25, MSS, Contriever, DPR et MSS-DPR. Veuillez utiliser la commande suivante pour télécharger ces ensembles de données
python utils / download_data . py
- - resource { key from download_data . py 's RESOURCES_MAP}
[ optional - - output_dir { your location }] Par exemple, pour télécharger toutes les données supérieures, utilisez --resource data . Pour télécharger les données Top-K d'un Retriever spécifiques, par exemple BM25, utilisez --resource data.retriever-outputs.bm25 .
Pour ré-classez les passages récupérés avec UPR, veuillez utiliser la commande suivante où les chemins du fichier de preuves et le fichier de passage récupéré supérieur doivent être indiqués.
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 " - L'option --use-bf16 fournit des vitesse et des économies de mémoire sur des GPU AMPERE tels que A100 ou A6000. Cependant, lorsque vous travaillez avec des GPU V100, cet argument doit être supprimé.
Nous avons fourni un exemple de script "upr-demo.sh" dans le répertoire "Exemples". Pour utiliser ce script, veuillez modifier les chemins de fichier de données et d'entrée / sortie en conséquence.
Nous fournissons les scores d'évaluation sur les ensembles de tests d'ensembles de données lors de l'utilisation du modèle de langue T0-3B dans UPR.
| Retriever (+ Re-Ranker) | Ouverture d'escouade | Triviaqa | Questions naturelles-ouvertes | Questions Web | Questions d'entité |
|---|---|---|---|---|---|
| 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 |
| Contourner | 63.4 | 73.9 | 67.9 | 65.7 | 63.0 |
| Contriever + UPR | 81.3 | 82.8 | 80.4 | 75.7 | 76.0 |
| Retriever (+ Re-Ranker) | Ouverture d'escouade | Triviaqa | Questions naturelles-ouvertes | Questions Web | Questions d'entité |
|---|---|---|---|---|---|
| DPR | 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 |
Nous recommandons le syndicat des 1000 meilleurs passages extraits de chacun des ensembles de développement de questions naturelles de BM25 et MSS Retrievers. Ce fichier de données peut être téléchargé comme:
python utils/download_data.py --resource data.retriever-outputs.mss-bm25-union.nq-dev Pour ces expériences d'ablation, nous passons l'argument --topk-passages 2000 car ce fichier contient l'union de deux ensembles de passages top-1000.
| Modèle de langue | Retriever | 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-adapt (250m) | BM25 + MSS | 23.9 | 51.4 | 70.7 | 83.1 |
| T5-LM-adapt (800m) | BM25 + MSS | 29.1 | 57.5 | 75.1 | 84.8 |
| T5-LM-ADAPT (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 |
Les modèles GPT peuvent être exécutés en UPR en utilisant le script gpt/upr_gpt.py . Ce script a des options similaires à celle du script upr.py , mais nous devons passer --use-fp16 comme argument au lieu de --use-bf16 . L'argument de --hf-model-name peut être EleutherAI/gpt-neo-2.7B ou EleutherAI/gpt-j-6B .
Veuillez consulter le répertoire Open-Domain-QA pour plus de détails pour effectuer la formation et l'inférence avec les points de contrôle pré-formés.
Pour toute erreur ou bogue dans la base de code, veuillez ouvrir un nouveau problème ou envoyer un e-mail à Devendra Singh Sachan ([email protected]).
Si vous trouvez ce code ou ce code utile, veuillez envisager de citer notre article comme:
@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 "
}