RAGLAB:用于检索增强生成的模块化且面向研究的统一框架
RAGLAB 是一个模块化、面向研究的开源框架,用于检索增强生成 (RAG) 算法。它提供了 6 种现有 RAG 算法的复制品和具有 10 个基准数据集的综合评估系统,可以实现 RAG 算法之间的公平比较,并轻松扩展以高效开发新算法、数据集和评估指标。
2024年10月6日:我们的论文已被EMNLP 2024系统演示接收。您可以在 RAGLAB 中找到我们的论文。
2024.9.9:RAGLAB开源了评估结果中的所有日志文件和评估文件?
2024年8月20日:RAGLAB开源了4个模型?: llama3-8B-baseline selfrag-llama3-8b llama3-70B-adaptor selfrag-llama3-70B-adaptor
2024年8月6日:RAGLAB发布了?
全面的 RAG 生态系统:支持从数据收集、培训到自动评估的整个 RAG 管道。
高级算法实现:重现 6 种最先进的 RAG 算法,并具有易于扩展的框架来开发新算法。
交互模式和评估模式:交互模式专为快速理解算法而设计。评估模式是专门为再现论文成果和科学研究而设计的。
公平比较平台:提供跨 5 种任务类型和 10 个数据集的 6 种算法的基准结果。
高效的检索器客户端:提供本地API用于并行访问和缓存,平均延迟低于1秒。
多功能生成器支持:与 70B+ 模型、VLLM 和量化技术兼容。
灵活的教学实验室:针对各种 RAG 场景的可定制教学模板。
有趣的 RAG 应用
自动调查
开发环境:pytorch:2.0.1-py3.10-cuda11.8.0-devel-ubuntu22.04
安装迷你康达
git 克隆 RAGLAB
https://github.com/fate-ubw/RAGLAB.git
从 yml 文件创建环境
cd 拉格实验室 conda env create -f 环境.yml
手动安装 flash-attn、en_core_web_sm、punkt
pip install flash-attn==2.2 python -m spacy 下载 en_core_web_sm python -m nltk.downloader punkt
cd 拉格实验室 mkdir 模型cd 模型 mkdir output_models# 检索器模型mkdir colbertv2.0 Huggingface-cli 下载 colbert-ir/colbertv2.0 --local-dir colbertv2.0/ --local-dir-use-symlinks False mkdir 设计者-msmarco Huggingface-cli 下载 facebook/contriever-msmarco --local-dir contriever-msmarco/ --local-dir-use-symlinks False# 微调生成器# 8B modelmkdir Llama3-8B-baseline Huggingface-cli 下载 RAGLAB/Llama3-8B-baseline --local-dir Llama3-8B-baseline/ --local-dir-use-symlinks False mkdir selfrag_llama3_8b-epoch_0_1 Huggingface-cli 下载 RAGLAB/selfrag_llama3-8B --local-dir selfrag_llama3_8b-epoch_0_1/ --local-dir-use-symlinks False# 70B modelmkdir Llama3-70B-baseline-adapter Huggingface-cli 下载 RAGLAB/Llama3-70B-baseline-adapter --local-dir Llama3-70B-baseline-adapter/ --local-dir-use-symlinks False mkdir selfrag_llama3_70B-适配器 Huggingface-cli 下载 RAGLAB/selfrag_llama3-70B-adapter --local-dir selfrag_llama3_70B-adapter/ --local-dir-use-symlinks False mkdir Meta-Llama-3-70B Huggingface-cli 下载meta-llama/Meta-Llama-3-70B --local-dir Meta-Llama-3-70B/ --local-dir-use-symlinks False#finetune 和 LoRAmkdir Meta-Llama-3 的基本模型-8B Huggingface-cli 下载meta-llama/Meta-Llama-3-8B --local-dir Meta-Llama-3-8B/ --local-dir-use-symlinks False# ALCE Metric Modelsmkdir gpt2-large Huggingface-cli 下载 openai-community/gpt2-large --local-dir gpt2-large/ --local-dir-use-symlinks False mkdir 罗伯塔-大队 Huggingface-cli 下载 gaotianyu1350/roberta-large-squad --local-dir roberta-large-squad/ --local-dir-use-symlinks False mkdir t5_xxl_true_nli_mixture Huggingface-cli download google/t5_xxl_true_nli_mixture --local-dir t5_xxl_true_nli_mixture/ --local-dir-use-symlinks False#factscore模型我们使用gpt3.5进行评估,所以不需要下载本地模型#来自官方selfrag repomkdir selfrag_llama2_7b的模型 Huggingface-cli 下载 selfrag/selfrag_llama2_7b --local-dir selfrag_llama2_7b/ --local-dir-use-symlinks False# 你可以从 Huggingface 下载其他模型作为生成器
如果您只需要了解不同算法如何工作,RAGLAB开发的交互模式可以满足您的需求。
如果你想重现论文中的结果,你需要从Hugging Face上下载所有需要的数据,包括训练数据、知识数据和评估数据。我们已经为您打包了所有数据,因此您只需下载即可使用。
cd 拉格实验室 Huggingface-cli 下载 RAGLAB/data --local-dir data --repo-type 数据集
交互模式专为快速理解算法而设计。在交互模式下,您可以非常快速地运行各种算法,了解不同算法的推理过程,而无需下载任何额外的数据。
raglab 中集成的所有算法都包含两种模式: interact
和evaluation
。测试阶段以interact
方式演示,仅供演示和教育?
笔记
由于colbert对绝对路径的要求,需要修改配置文件中的index_dbPath和text_dbPath以使用绝对路径。
修改配置文件中的index_dbPath
和text_dbPath
:colbert_server-10samples.yaml
index_dbPath:/your_root_path/RAGLAB/data/retrieval/colbertv2.0_embedding/wiki2023-10samples text_dbPath:/your_root_path/RAGLAB/data/retrieval/colbertv2.0_passages/wiki2023-10samples/enwiki-20230401-10samples.tsv
运行科尔伯特服务器
cd 拉格实验室 sh 运行/colbert_server/colbert_server-10samples.sh
笔记
此时colbert embedding会提示由于路径错误,需要重新处理colbert embedding。请输入yes
,然后raglab将自动帮助您处理嵌入并启动colbert服务器。
现在请打开另一个终端并尝试请求 colbert 服务器
cd 拉格实验室 sh 运行/colbert_server/ask_api.sh
如果返回结果,则说明colbert服务器启动成功! ?
运行 selfrag(简短形式和自适应检索)交互模式测试 10 样本嵌入
cd 拉格实验室 sh run/rag_inference/3-selfrag_reproduction-interact-short_form-adaptive_retrieval.sh
恭喜!!!现在您已经知道如何运行 raglab 了吗?
在raglab中,每个算法在交互模式下内置了10个查询,这些查询是从不同的基准测试中采样的
笔记
记得在运行论文结果之前下载 wiki2018 知识数据库和模型
由于colbert对绝对路径的要求,需要修改配置文件中的index_dbPath
和text_dbPath
并处理wiki2018嵌入数据库
cd RAGLAB/config/colbert_server vim colbert_server.yaml index_dbPath:{your_root_path}/RAGLAB/data/retrieval/colbertv2.0_embedding/wiki2018 text_dbPath:{your_root_path}/RAGLAB/data/retrieval/colbertv2.0_passages/wiki2018/wiki2018.tsv
vim /data/retrieval/colbertv2.0_embedding/wiki2018/indexes/wiki2018/metadata.json#更改根路径,其他参数不需要修改"collection": "/{your_root_path}/RAGLAB/data/retrieval/colbertv2. 0_passages/wiki2018/wiki2018.tsv","实验": "/{your_root_path}/RAGLAB/data/retrieval/colbertv2.0_embedding/wiki2018",
修改wiki2018嵌入源文件中绑定的绝对路径
修改配置文件中的路径
注意:colbert_server 至少需要 60GB 内存
cd 拉格实验室 sh 运行/colbert_server/colbert_server.sh
打开另一个终端测试您的 ColBERT 服务器
cd 拉格实验室 sh 运行/colbert_server/ask_api.sh
ColBERT服务器启动成功!!! ?
推理实验需要并行运行数百个脚本,需要使用自动GPU调度器为并行的不同bash脚本自动分配GPU。
安装simple_gpu_scheduler
pip 安装 simple_gpu_scheduler
在一条线上运行数百个实验?
cd 拉格实验室 simple_gpu_scheduler --gpus 0,1,2,3,4,5,6,7 < auto_gpu_scheduling_scripts/auto_run-llama3_8b-baseline-scripts.txt#其他脚本可以用同样的方法运行
如何编写your_script.txt?
# auto_inference_selfreg-7b.txtsh run/rag_inference/selfrag_reproduction/selfrag_reproduction-evaluation-short_form-PubHealth-adaptive_retrieval-pregiven_passages.sh sh run/rag_inference/selfrag_reproduct/selfrag_reproduct-evaluation-short_form-PubHealth-always_retrieval-pregiven_passages.sh
这是一个例子
RAGLAB包括3种经典的评估方法:准确度、F1和EM(精确匹配)。这3种方法计算简单,可以在推理过程中动态计算。然而,ALCE 和 Factscore 这两个高级指标需要在评估之前完成推理过程。
ALCE :RAGLAB 已将 ALCE 存储库集成到 RAGLAB 中。您只需在配置文件中设置推理结果的路径即可。
cd RAGLABcd run/ALCE/# 更改每个 sh 文件中推理生成文件的路径# 例如:# python ./ALCE/eval.py --f './data/eval_results/ASQA/{your_input_file_path}.jsonl' # --mauve # --qasimple_gpu_scheduler --gpus 0,1,2,3,4,5,6,7 < auto_gpu_scheduling_scripts/auto_eval_ALCE.txt
评估结果将与输入文件在同一目录下,文件名后缀为.score
Factscore :Factscore 环境需要安装torch 1.13.1
,这与 RAGLAB 训练和推理模块所需的 flash-attn 版本冲突。因此,RAGLAB目前无法集成Factscore环境,因此用户需要单独安装Factscore环境进行评估。
安装Factscore环境后,请修改bash文件中推理结果的路径
cd RAGLAB/run/Factscore/# 更改每个 sh 文件中推理生成文件的路径# 例如:# python ./FActScore/factscore/factscorer.py # --input_path './data/eval_results/Factscore/{your_input_file_path }.jsonl' # --model_name "retrieval+ChatGPT"# --openai_key ./api_keys.txt # --data_dir ./data/retrieval/colbertv2.0_passages/wiki2023 # --verbosesimple_gpu_scheduler --gpus 0,1,2, 3,4,5,6,7 < auto_gpu_scheduling_scripts/auto_eval_Factscore.txt
评估结果将与输入文件在同一目录下,文件名后缀为_factscore_output.json
笔记
在Factscore评估过程中,我们使用GPT-3.5作为评估模型,因此无需下载本地模型。如果需要使用本地模型评估Factscore,请参考Factscore
如果您想自行处理知识库,请参考以下步骤。 RAGLAB已将处理后的知识库上传至Hugging Face
文档:process_wiki.md
本节介绍 RAGLAB 中训练模型的过程。您可以从 HuggingFace? 下载所有预训练模型,或使用下面的教程从头开始训练。
所有数据提供了微调所需的所有数据。
文档:train_docs.md
如果您发现此存储库有用,请引用我们的工作。
@inproceedings{zhang-etal-2024-raglab, title = "{RAGLAB}: A Modular and Research-Oriented Unified Framework for Retrieval-Augmented Generation", author = "Zhang, Xuanwang and Song, Yunze and Wang, Yidong and Tang, Shuyun and others", booktitle = "Proceedings of the 2024 Conference on Empirical Methods in Natural Language Processing: System Demonstrations", month = dec, year = "2024", publisher = "Association for Computational Linguistics", }
RAGLAB 根据 MIT 许可证获得许可。