在本文档中,我们将介绍如何在统一的设置下复现我们表格中列出的各种方法的结果。有关每种方法的具体设置和解释,请参考实现细节。建议事先对本仓库有一定的基本了解,可以在初学者介绍中找到。
- 安装 FlashRAG 及其依赖项
- 下载 Llama3-8B-instruct,E5-base-v2
- 下载数据集(你可以从我们的仓库下载:这里)
- 下载检索语料库(从这里下载)
- 使用 E5 构建检索索引(参见如何构建索引?)
所有使用的代码都基于仓库的 example/methods。我们为各种方法设置了适当的超参数。如果你需要自己调整它们,可以参考为每种方法提供的配置字典以及每种方法的原始论文。
首先,你需要在 my_config.yaml 中填写各种下载的路径。具体来说,你需要填写以下四个字段:
- model2path:用你自己的路径替换 E5 和 Llama3-8B-instruct 模型的路径
- method2index:填写使用 E5 构建的索引文件的路径
- corpus_path:填写
jsonl格式的 Wikipedia 语料库文件的路径 - data_dir:更改为你自己的数据集下载路径
对于一些需要使用额外模型的方法,需要额外的步骤。我们将在下面介绍需要额外步骤的方法。如果你知道你想要运行的方法不需要这些步骤,你可以直接跳到第三部分。
目录:
- AAR
- LongLLMLingua
- RECOMP
- Selective-Context
- Ret-Robust
- SKR
- Self-RAG
- Spring
- Adaptive-RAG
- RQRAG
- R1-Searcher
这种方法需要使用一个新的检索器,因此你需要下载检索器并构建索引。
- 额外步骤1:下载 AAR-Contriever(从这里)
- 额外步骤2:为 AAR-Contriever 构建索引(注意,池化方法应该是 'mean')
- 额外步骤3:在
run_exp.py中的AAR函数中修改index_path和model2path
这种方法需要下载 Llama2-7B。
- 额外步骤1:下载 Llama2-7B(从这里)
- 额外步骤2:在
run_exp.py中的llmlingua函数中修改refiner_model_path
这种方法需要下载作者训练的三个检查点(分别在 NQ、TQA 和 HotpotQA 上训练)。
- 额外步骤1:下载作者的检查点(NQ 模型,TQA 模型,HotpotQA 模型)
- 额外步骤2:在
recomp函数的model_dict中填写下载的模型路径
这种方法需要下载 GPT2。
- 额外步骤1:下载 GPT2(从这里)
- 额外步骤2:在
run_exp.py中的sc函数中修改refiner_model_path
这种方法需要下载作者训练的 Lora 并下载 Llama2-13B 模型以加载 Lora。
- 额外步骤1:下载 Llama2-13B(从这里)
- 额外步骤2:下载作者训练的 Lora,训练于 NQ(从这里)和训练于 2WikiMultihopQA(从这里)
- 额外步骤3:在
retrobust函数的model_dict中修改相应的 Lora 路径,并在my_config.yaml中修改 Llama2-13B 路径
我们建议根据不同的数据集调整 SelfAskPipeline 中的 single_hop 参数,该参数控制是否分解查询。对于 NQ, TQA, PopQA, WebQ,我们将 single_hop 设置为 True。
这种方法需要一个嵌入模型和推理阶段使用的训练数据。我们提供了作者给定的训练数据。如果你想使用自己的训练数据,可以根据训练数据的格式和原始论文生成它。
- 额外步骤1:下载嵌入模型(从这里)
- 额外步骤2:下载训练数据(从这里)
- 额外步骤3:在
skr函数的model_path中填写嵌入模型路径 - 额外步骤4:在
skr函数的training_data_path中填写训练数据路径
这种方法需要使用一个训练好的模型,目前只支持在 vllm 框架中运行。
这种方法需要一个虚拟 Token 嵌入文件,目前只支持在 hf 框架中运行。
- 额外步骤1:从官方仓库下载 embedding 文件
- 额外步骤2:在
spring函数中修改token_embedding_path
该方法需要一个分类器对查询进行分类。由于作者没有提供官方的检查点,我们使用了其他人在Huggingface上训练的检查点进行实验(这可能会导致结果不一致)。
后续如果官方开源了checkpoint,我们将更新实验结果。
- 额外步骤1:从 Huggingface 仓库下载分类器模型(非官方):illuminoplanet/combined_flan_t5_xl_classifier
- 额外步骤2:修改
adaptive函数中的model_path。
这种方法需要下载 RQRAG 模型。
- 额外步骤1:从 Huggingface 仓库下载 RQRAG 模型:zorowin123/rq_rag_llama2_7B
- 额外步骤2:在
rqrag函数中修改generator_model_path
使用以下命令在 NQ 数据集上运行实验。
python run_exp.py --method_name 'naive' \
--split 'test' \
--dataset_name 'nq' \
--gpu_id '0,1,2,3'可以从以下方法中选择:
naive zero-shot AAR-contriever llmlingua recomp selective-context sure replug skr flare iterretgen ircot trace
这种方法需要下载 R1-Searcher 模型。
- 额外步骤1:从 Huggingface 仓库下载 R1-Searcher 模型:XXsongLALA/Qwen-2.5-7B-base-RAG-RL
- 额外步骤2:在
r1searcher函数中修改generator_model_path