Этот репозиторий содержит официальную реализацию алгоритма UPR (неконтролируемого перерыва), представленного в статье «Улучшение поиска прохода с генерацией вопросов с нулевым выстрелом».


Чтобы использовать это репо, необходима стандартная установка Pytorch. Мы предоставляем зависимости в файле TEDS.TXT.
Мы рекомендуем использовать один из более поздних контейнеров NGC Pytorch. Изображение Docker можно вытащить с помощью команды docker pull nvcr.io/nvidia/pytorch:22.01-py3 . Чтобы использовать это изображение Docker, также требуется установка инструментария контейнера NVIDIA.
Над контейнером Docker установите transformers библиотек и sentencepiece с помощью PIP Install.
Мы следуем конвенции DPR и сегментировали статьи Википедии на длительные отрывки из 100 слов. DPR предоставил файл доказательств можно загрузить с помощью команды
python utils / download_data . py - - resource data . wikipedia - split . psgs_w100Этот файл доказательств содержит поля, разделенные вкладками, для идентификатора отрывка, текста прохода и заголовка отрывка.
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
... ... ... Формат входных данных - JSON. Каждый словарь в файле JSON содержит один вопрос, список, содержащий данные полученных отрывков Top-K, и (необязательный) список возможных ответов. Для каждого отрывка Top-K мы включаем атрибуты (доказательства), HAS_ANSWER и (необязательно) атрибуты ретривера. Атрибут id - это идентификатор отрывка из файла доказательств в Википедии, has_answer обозначает, содержит ли текст отрывка ответ или нет. Ниже приведен шаблон файла .json
[
{
"question" : " .... " ,
"answers" : [ " ... " , " ... " , " ... " ],
"ctxs" : [
{
"id" : " .... " ,
"score" : " ... " ,
"has_answer" : " .... " ,
},
...
]
},
...
]Пример при получении отрывков с использованием BM25 при запросах с использованием набора натуральных вопросов DEV.
[
{
"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 ,
},
...
]
},
...
]Мы предоставляем топ-1000 извлеченных отрывков для разрывов Dev/Test of NaturalQuestions-Open (NQ), Triviaqa, Squad-Open, Web-Questions (WebQ) и наборов данных Entity-Questions (уравнение), охватывающие 5 Retrievers: BM25, MSS, Contriever, DPR и MSS-DPR. Пожалуйста, используйте следующую команду для загрузки этих наборов данных
python utils / download_data . py
- - resource { key from download_data . py 's RESOURCES_MAP}
[ optional - - output_dir { your location }] Например, чтобы загрузить все данные Top-K, используйте --resource data . Чтобы загрузить данные Top-K конкретного ретривера, например, BM25, используйте --resource data.retriever-outputs.bm25 .
Чтобы повторно оценить полученные отрывки с помощью UPR, используйте следующую команду, в которой необходимо указать следующую команду.
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 обеспечивает скорость и экономию памяти на графических процессорах AMPERE, таких как A100 или A6000. Однако при работе с графическими процессорами V100 этот аргумент должен быть удален.
Мы предоставили пример сценария «upr-demo.sh» в рамках каталога «Примеры». Чтобы использовать этот скрипт, пожалуйста, измените пути и входные / выходные файлы соответствующим образом.
Мы предоставляем оценки оценки на тестовых наборах наборов данных при использовании языковой модели T0-3B в UPR.
| Ретривер (+re-ranker) | Отряд | Витривиака | Естественные вопросы-открытые | Веб -вопросы | Вопросы организации |
|---|---|---|---|---|---|
| Мсс | 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 |
| Противодействие | 63,4 | 73,9 | 67.9 | 65,7 | 63,0 |
| Контроль + UPR | 81.3 | 82,8 | 80.4 | 75,7 | 76.0 |
| Ретривер (+re-ranker) | Отряд | Витривиака | Естественные вопросы-открытые | Веб -вопросы | Вопросы организации |
|---|---|---|---|---|---|
| Дпр | 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 |
Мы переоцениваем союз из топ-1000 отрывков, извлеченных из каждого из набор развития BM25 и MSS Retrievers. Этот файл данных может быть загружен как:
python utils/download_data.py --resource data.retriever-outputs.mss-bm25-union.nq-dev Для этих экспериментов с абляцией мы передаем аргумент --topk-passages 2000 поскольку этот файл содержит объединение двух наборов топ-1000 отрывков.
| Языковая модель | Ретривер | Топ-1 | Топ-5 | Топ-20 | Топ-100 |
|---|---|---|---|---|---|
| - | BM25 | 22.3 | 43,8 | 62,3 | 76.0 |
| - | Мсс | 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 |
Модели GPT можно запускать в UPR, используя скрипт gpt/upr_gpt.py . Этот сценарий имеет сценарии сценария upr.py , но нам нужно передать --use-fp16 в качестве аргумента вместо --use-bf16 . Аргумент --hf-model-name может быть либо EleutherAI/gpt-neo-2.7B , либо EleutherAI/gpt-j-6B .
Пожалуйста, смотрите Directory Open-Domain-QA для получения подробной информации для обучения и вывода с предварительно обученными контрольно-пропускными пунктами.
Для любых ошибок или ошибок в кодовой базе, пожалуйста, откройте новый выпуск, либо отправьте электронное письмо Девендре Сингху Сачану ([email protected]).
Если вы найдете этот код или данные полезным, рассмотрите возможность ссылаться на нашу статью как:
@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 "
}