多跳密集检索项目(MDR)使用与启动教程
1. 项目介绍
多跳密集检索(MDR)是一种简单且通用的密集检索方法,它可以递归地检索支持文本段落,用于回答复杂的开放域问题。本项目提供了代码和预训练的检索模型,这些模型在两个多跳问答数据集(HotpotQA 数据集和 FEVER 事实抽取与验证数据集的多跳子集)上产生了最先进的检索性能。更多关于我们方法的细节,可以在我们的 ICLR 论文 "Answering Complex Open-Domain Questions with Multi-Hop Dense Retrieval" 中找到。
2. 项目快速启动
以下步骤将帮助您快速启动并运行多跳密集检索项目:
首先,安装必要的环境:
conda create --name MDR python=3.6
conda activate MDR
git clone git@github.com:facebookresearch/multihop_dense_retrieval.git
cd multihop_dense_retrieval
bash setup.sh
接下来,下载所需的数据文件和预训练的检索模型:
bash ./scripts/download_hotpot.sh
启动一个简单的演示:
streamlit run scripts/demo.py
3. 应用案例和最佳实践
检索性能评估
要评估检索性能,并保存用于下游问答的 top-k 检索段落链,可以使用以下脚本:
python scripts/eval/eval_mhop_retrieval.py \
data/hotpot/hotpot_qas_val.json \
data/hotpot_index/wiki_index.npy \
data/hotpot_index/wiki_id2doc.json \
models/q_encoder.pt \
--batch-size 100 \
--beam-size 1 \
--topk 1 \
--shared-encoder \
--model-name roberta-base \
--gpu \
--save-path ${SAVE_RETRIEVAL_FOR_QA}
问答性能评估
要评估基于预训练模型的问答性能,可以按照以下步骤操作:
python scripts/train_qa.py \
--do_predict \
--predict_batch_size 200 \
--model_name google/electra-large-discriminator \
--fp16 \
--predict_file data/hotpot/dev_retrieval_top100_sp.json \
--max_seq_len 512 \
--max_q_len 64 \
--init_checkpoint models/qa_electra.pt \
--sp-pred \
--max_ans_len 30 \
--save-prediction hotpot_val_top100.json
4. 典型生态项目
MDR 项目可以作为开放域问答系统的一个重要组成部分,与自然语言处理、知识图谱、机器学习等领域的大量开源项目相结合,构建更加复杂和智能的应用。以下是一些可能的生态项目:
- 一个集成了 MDR 的问答机器人
- 一个基于 MDR 的在线学习平台,为学生提供自动解答
- 一个利用 MDR 改善搜索结果的搜索引擎插件
以上步骤和实践为您提供了开始使用 MDR 项目的坚实基础。根据具体需求,您可以进一步定制和扩展这些步骤。