Repositori ini berisi implementasi resmi algoritma UPR (tanpa pengawasan ulang) yang diperkenalkan dalam makalah "Meningkatkan pengambilan bagian dengan pembuatan pertanyaan nol-shot".


Untuk menggunakan repo ini, diperlukan instalasi standar Pytorch. Kami memberikan dependensi dalam file persyaratan.txt.
Kami merekomendasikan menggunakan salah satu wadah Pytorch NGC yang lebih baru. Gambar Docker dapat ditarik dengan perintah docker pull nvcr.io/nvidia/pytorch:22.01-py3 . Untuk menggunakan gambar Docker ini, pemasangan toolkit wadah NVIDIA juga diperlukan.
Di atas wadah Docker, silakan instal transformers perpustakaan dan sentencepiece menggunakan pemasangan pip.
Kami mengikuti konvensi DPR dan segmen artikel Wikipedia menjadi bagian panjang 100 kata. File bukti yang disediakan DPR dapat diunduh dengan perintah tersebut
python utils / download_data . py - - resource data . wikipedia - split . psgs_w100File bukti ini berisi bidang yang dipisahkan tab untuk ID bagian, teks bagian, dan judul bagian.
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
... ... ... Format data input adalah JSON. Setiap kamus dalam file JSON berisi satu pertanyaan, daftar yang berisi data dari bagian-bagian Top-K yang diambil, dan daftar (opsional) dari kemungkinan jawaban. Untuk setiap bagian atas-K, kami memasukkan ID (bukti), has_answer, dan (opsional) atribut skor retriever. Atribut id adalah ID bagian dari file bukti Wikipedia, has_answer menunjukkan apakah teks bagian berisi rentang jawaban atau tidak. Berikut ini adalah templat file .json
[
{
"question" : " .... " ,
"answers" : [ " ... " , " ... " , " ... " ],
"ctxs" : [
{
"id" : " .... " ,
"score" : " ... " ,
"has_answer" : " .... " ,
},
...
]
},
...
]Contoh ketika bagian -bagian diambil menggunakan BM25 ketika kueri menggunakan set pertanyaan alami.
[
{
"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 ,
},
...
]
},
...
]Kami menyediakan bagian teratas yang diambil untuk pembelahan Dev/Tes dari Naturalquestions-Open (NQ), TriviaqA, Squad-Open, Webquestions (WebQ), dan Dataset Entityquestions (EQ) yang mencakup 5 Retriever: BM25, MSS, ContrieVe, DPR, dan MSS-DPR. Silakan gunakan perintah berikut untuk mengunduh set data ini
python utils / download_data . py
- - resource { key from download_data . py 's RESOURCES_MAP}
[ optional - - output_dir { your location }] Misalnya, untuk mengunduh semua data Top-K, gunakan dalam --resource data . Untuk mengunduh data Top-K Retriever tertentu, misalnya BM25, gunakan --resource data.retriever-outputs.bm25 .
Untuk menunggang ulang bagian-bagian yang diambil dengan UPR, silakan gunakan perintah berikut di mana jalur file bukti dan file bagian yang diambil atas-K perlu diindikasikan.
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 " --use-bf16 memberikan penghematan kecepatan dan penghematan memori pada GPU Ampere seperti A100 atau A6000. Namun, ketika bekerja dengan V100 GPU, argumen ini harus dihapus.
Kami telah memberikan contoh skrip "upr-demo.sh" di bawah direktori "contoh". Untuk menggunakan skrip ini, harap modifikasi data dan input / output path yang sesuai.
Kami memberikan skor evaluasi pada set tes set data saat menggunakan model bahasa T0-3B di UPR.
| RETRIEVER (+ranker ulang) | Skuad-terbuka | Triviaqa | Pertanyaan alami-terbuka | Pertanyaan Web | Pertanyaan entitas |
|---|---|---|---|---|---|
| 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 |
| Contrliever | 63.4 | 73.9 | 67.9 | 65.7 | 63.0 |
| Contrliever + upr | 81.3 | 82.8 | 80.4 | 75.7 | 76.0 |
| RETRIEVER (+ranker ulang) | Skuad-terbuka | Triviaqa | Pertanyaan alami-terbuka | Pertanyaan Web | Pertanyaan entitas |
|---|---|---|---|---|---|
| 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 |
Kami menempati ulang Union of Top-1000 Passages yang diambil dari masing-masing BM25 dan MSS mengambil set pengembangan terbuka pertanyaan alami. File data ini dapat diunduh sebagai:
python utils/download_data.py --resource data.retriever-outputs.mss-bm25-union.nq-dev Untuk eksperimen ablasi ini, kami lulus argumen --topk-passages 2000 karena file ini berisi persatuan dua set 10 bagian Top.
| Model Bahasa | 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 |
Model GPT dapat dijalankan di UPR dengan menggunakan skrip gpt/upr_gpt.py . Script ini memiliki opsi yang mirip dengan skrip upr.py , tetapi kita perlu lulus --use-fp16 sebagai argumen alih-alih --use-bf16 . Argumen --hf-model-name dapat berupa EleutherAI/gpt-neo-2.7B atau EleutherAI/gpt-j-6B .
Silakan lihat Direktori Open-Domain-QA untuk detail untuk melakukan pelatihan dan inferensi dengan pos pemeriksaan terlatih.
Untuk kesalahan atau bug di basis kode, silakan buka edisi baru atau kirim email ke Devendra Singh Sachan ([email protected]).
Jika Anda menemukan kode atau data ini bermanfaat, harap pertimbangkan mengutip makalah kami sebagai:
@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 "
}