このリポジトリには、論文で「ゼロショットの質問生成によるパッセージ検索の改善」で導入されたUPR(監視されていないパッセージの再ランク)アルゴリズムの公式実装が含まれています。


このリポジトリを使用するには、Pytorchの標準インストールが必要です。 requastion.txtファイルに依存関係を提供します。
NGCの最近のPytorchコンテナの1つを使用することをお勧めします。 Dockerイメージは、コマンドdocker pull nvcr.io/nvidia/pytorch:22.01-py3で引くことができます。このDocker画像を使用するには、NVIDIAコンテナツールキットのインストールも必要です。
Dockerコンテナの上に、PIPインストールを使用してライブラリtransformersとsentencepieceをインストールしてください。
DPRコンベンションに従い、ウィキペディアの記事を100ワードの長い文章に分割します。 DPRの提供された証拠ファイルは、コマンドでダウンロードできます
python utils / download_data . py - - resource data . wikipedia - split . psgs_w100このエビデンスファイルには、パッセージID、通過テキスト、およびパッセージタイトルのタブ分離されたフィールドが含まれています。
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ファイルの各辞書には、1つの質問、Top-K取得されたパッセージのデータを含むリスト、および可能な回答の(オプションの)リストが含まれています。各Top-Kパッセージに、(証拠)ID、has_answer、および(オプションの)レトリバースコア属性を含めます。 id属性は、ウィキペディアの証拠ファイルからのパッセージIDです。HAS_ANSWER has_answer 、パッセージテキストに回答スパンが含まれているかどうかを示します。以下は、.jsonファイルのテンプレートです
[
{
"question" : " .... " ,
"answers" : [ " ... " , " ... " , " ... " ],
"ctxs" : [
{
"id" : " .... " ,
"score" : " ... " ,
"has_answer" : " .... " ,
},
...
]
},
...
]自然な質問DEVセットを使用してクエリするときにBM25を使用してパッセージが取得された場合の例。
[
{
"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 ,
},
...
]
},
...
]NaturalQuestions-Open(NQ)、Triviaqa、Squad-Open、WebQuestions(WebQ)、およびEntityQuestions(eq)データセットのDevir Questions-Open(NQ)、Triviaqa、Squad-Open、WebQuestions(eq)データセットのDEV/テストスプリットの上位1000回の回収されたパッセージを提供します: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を使用します。特定のRetriverのTOP-Kデータ、たとえばBM25をダウンロードするには、 --resource data.retriever-outputs.bm25使用します。
検索されたパッセージをUPRで再ランクするには、エビデンスファイルとトップ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 " --use-bf16オプションは、A100やA6000などのアンペアGPUのスピードアップとメモリの節約を提供します。ただし、V100 GPUを使用する場合、この引数を削除する必要があります。
ディレクトリ「例」の下で、例のスクリプト「UPR-DEMO.SH」を提供しました。このスクリプトを使用するには、それに応じてデータと入力 /出力ファイルパスを変更してください。
UPRでT0-3B言語モデルを使用する場合、データセットのテストセットの評価スコアを提供します。
| Retriver(+再ランカー) | 分隊オープン | Triviaqa | 自然な質問が開かれています | Web質問 | エンティティの質問 |
|---|---|---|---|---|---|
| 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 |
| コントリーバー | 63.4 | 73.9 | 67.9 | 65.7 | 63.0 |
| コントリーバー + upr | 81.3 | 82.8 | 80.4 | 75.7 | 76.0 |
| Retriver(+再ランカー) | 分隊オープン | Triviaqa | 自然な質問が開かれています | Web質問 | エンティティの質問 |
|---|---|---|---|---|---|
| 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 |
BM25およびMSS Retrievers自然質問を開く開発セットから取得した上位1000パッセージの連合を再ランクしました。このデータファイルは、次のようにダウンロードできます。
python utils/download_data.py --resource data.retriever-outputs.mss-bm25-union.nq-devこれらのアブレーション実験では、このファイルにはトップ1000パッセージの2つのセットが含まれているため、引数--topk-passages 2000渡します。
| 言語モデル | レトリバー | Top-1 | トップ5 | トップ20 | トップ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アダプト(250m) | BM25 + MSS | 23.9 | 51.4 | 70.7 | 83.1 |
| T5-LMアダプト(800m) | BM25 + MSS | 29.1 | 57.5 | 75.1 | 84.8 |
| T5-LM-アダプト(3B) | BM25 + MSS | 29.7 | 59.9 | 76.9 | 85.6 |
| T5-LM-アダプト(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モデルは、スクリプトgpt/upr_gpt.pyを使用してUPRで実行できます。このスクリプトには、 upr.pyスクリプトのスクリプトと同様のオプションがありますが、 --use-bf16の代わりに、 --use-fp16引数として渡す必要があります。 --hf-model-nameの引数はEleutherAI/gpt-neo-2.7BまたはEleutherAI/gpt-j-6Bのいずれかです。
事前に訓練されたチェックポイントでトレーニングと推論を行うための詳細については、ディレクトリOpen-Domain-QAを参照してください。
コードベースのエラーまたはバグについては、新しい問題を開くか、Devendra Singh Sachan([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 "
}