FedRAG 数据准备指南:基于 FAISS 的医疗语料下载与索引构建(Flower 联邦 RAG 实践)

发布时间:2026/9/17 20:57:23
FedRAG 数据准备指南:基于 FAISS 的医疗语料下载与索引构建(Flower 联邦 RAG 实践) FedRAG 数据准备指南基于 FAISS 的医疗语料下载与索引构建Flower 联邦 RAG 实践【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower本文围绕 Flower 联邦框架中 FedRAG 示例的examples/fedrag/data目录系统讲解四大医疗/通用语料的下载、分块chunking与 FAISS 检索索引的构建全流程。读者将掌握prepare.sh/prepare.py的使用方法、各语料的规模与磁盘占用、retriever.yaml的嵌入模型配置以及IndexIVFFlat METRIC_L2索引的底层工作原理从而能自主复现 FedRAG 的数据准备阶段。FedRAG 中数据准备目录的角色在 FedRAG 示例 的整体流水线中客户端依赖本地的文档库完成 top-k 检索。而examples/fedrag/data目录正是这个“本地文档库”的构建入口它负责下载语料、执行必要的分块操作并为更高效的文档检索生成 FAISS 索引。该目录的核心文件包括prepare.sh一键下载与建索引的 Bash 入口脚本prepare.py执行下载、建索引、抽样查询及 QA 基准数据下载的 Python 脚本download.py负责各语料的下载与分块statpearls.pyStatPearls 语料的 XML 解析与分块脚本README.md本数据准备指南文档。下载后的语料统一存放于examples/fedrag/data/corpus/dataset_name/目录每个语料目录下包含原始数据与chunk/分块目录索引构建产物faiss.index与all_doc_ids.npy也生成于此。支持的语料与规模概览当前版本支持四个语料全部衍生自 MedRAG 工具包。下表完整列出了各语料的体量数据来自 data/README.md语料大小文档数分块数Snippets领域PubMed~70 GB2390 万2390 万生物医学StatPearls~2 GB9.3k30.12 万临床Textbooks~209 MB1812.58 万医学Wikipedia~44 GB650 万2990 万通用[!NOTE] 对每个语料而言其对应的索引所需磁盘空间可能与被索引文档本身相当。即索引的磁盘开销与语料大小基本是 1:1 的关系在规划存储时需要预留双倍空间。默认情况下示例使用体量较小的Textbooks与StatPearls两个语料来演示 FedRAG 流水线——因为PubMed与Wikipedia的文档数量极为庞大下载与建索引会消耗大量时间。一键执行prepare.sh 与 prepare.py默认行为在examples/fedrag/data目录下直接运行./prepare.sh默认情况下脚本会下载StatPearls与Textbooks两个语料并使用每个语料前 100 个分块即前 100 个 chunk 文件来创建索引。这样做的目的是快速生成索引、引导示例跑通而非构建完整索引。全量下载与全量建索引若需要下载全部四个语料并使用每个语料的全部文件建索引运行./prepare.sh --datasets pubmed statpearls textbooks wikipedia --index_num_chunks 0其中--datasets空格分隔的语料名列表合法取值为pubmed、statpearls、textbooks、wikipedia--index_num_chunks建索引时考虑的分块文件数量设置为0时表示使用全部文件。从 prepare.sh 的源码可以看到其参数解析逻辑--datasets会清空默认值并逐个收集后续参数直至遇到下一个--开头参数--index_num_chunks则直接读取下一个参数值脚本最终将参数透传给python ./prepare.py执行。脚本开头设置了set -e任一环节失败即终止避免在下载或建索引出错时继续执行后续步骤。prepare.py 的执行流程prepare.py 是实际执行者其流程为解析--datasets默认textbooks与--index_num_chunks默认0对--datasets去重后逐个调用DownloadCorpora.download(corpus...)下载语料调用retriever.build_faiss_index(dataset_name..., batch_size32, num_chunks...)构建 FAISS 索引每个语料索引构建完成后用样例查询What are the complications of a cardiovascular disease?执行一次knn2的检索验证最后下载 MIRAGE QA 基准数据到data/mirage.json。注意--index_num_chunks 0在 prepare.py 中被转换为None从而在后续建索引时不做截断、使用全部文件。语料下载机制解析语料下载由 download.py 中的DownloadCorpora.download()方法完成不同语料的来源与方式不同PubMed / Textbooks / Wikipedia通过git clone从 Hugging Face 的 MedRAG 数据集仓库拉取如https://huggingface.co/datasets/MedRAG/corpus。clone 时先以GIT_LFS_SKIP_SMUDGE1跳过 LFS 大文件再在目标目录内执行git lfs pull拉取全部大文件避免一次性下载所有二进制内容StatPearls根据 StatPearls 的隐私政策其内容不允许被再分发因此不通过 Hugging Face 获取而是用wget直接从 NCBI Bookshelf 下载statpearls_NBK430685.tar.gz解压后调用 statpearls.py 进行分块处理若目标目录已存在则跳过下载幂等处理。StatPearls 语料为 NXML 格式statpearls.py 使用xml.etree.ElementTree解析每个.nxml文件提取文章标题、章节标题与子标题拼接为title -- section -- subtitle形式的前缀对正文段落p标签与列表list标签进行智能合并短段落与相邻内容合并单条列表项超过 1000 字符时拆分最终为每个分块生成形如{id, title, content, contents}的 JSON 记录写入corpus/statpearls/chunk/filename.jsonl每个文件一行一个分块。这里生成的id形如文件名_序号后续检索时会依据该格式还原文档名与分块序号。FAISS 索引器构建与查询索引构建与查询都由 retriever.py 中的Retriever类完成FAISS 库负责索引创建与相似度检索。嵌入模型默认使用sentence-transformers/all-MiniLM-L6-v2模型将句子与段落映射到384 维的稠密向量空间。模型与维度均可在 retriever.yaml 中修改embedding_model: sentence-transformers/all-MiniLM-L6-v2 embedding_dimension: 384更换嵌入模型时必须同步更新embedding_dimension为对应模型的实际输出维度否则索引构建阶段 retriever.py 的维度过滤逻辑embedding.shape (self.emb_dim,)会过滤掉全部向量。从源码看设备放置由sentence_transformers.util.get_device_name()决定并交由SentenceTransformer构造函数处理。构建索引build_faiss_index()build_faiss_index(dataset_name, batch_size32, num_chunksNone)的构建流程为读取corpus/dataset_name/chunk/下所有.jsonl文件num_chunks非空时只取前num_chunks个文件便于开发调试按batch_size默认 32批量编码文本为嵌入向量convert_to_numpyTrue过滤维度不符的向量统一转为float32FAISS 的硬性要求以IndexFlatL2作为量化器quantizer簇数nlist int(sqrt(嵌入总数))构建faiss.IndexIVFFlat(quantizer, d, nlist, faiss.METRIC_L2)执行train()与add()保存faiss.index与all_doc_ids.npy文档 ID 与嵌入一一对应用于检索后映射回原文。每次调用会先删除旧的faiss.index与all_doc_ids.npy保证索引可重建。注意IndexIVFFlat需要先train()再add()如果语料极少或嵌入维度异常训练阶段可能因数据不足而失败这也是默认只截取前 100 个 chunk 依然足以跑通的原因之一。查询索引query_faiss_index()query_faiss_index(dataset_name, query, knn8)是配套的检索辅助函数前提是索引已生成可通过Retriever.index_exists()检查faiss.index与all_doc_ids.npy是否存在。流程为加载faiss.index与all_doc_ids.npy对查询文本生成嵌入向量调用index.search()返回 top-k 的得分与索引位置依据文档 ID 的文件名_序号格式从chunk/目录还原出对应分块的title与content按{rank, score, title, content}结构返回有序结果。检索度量语义当前实现使用IndexIVFFlat与faiss.METRIC_L2。由于 L2 距离衡量的是不相似度dissimilarity因此检索得分越低越好——这一定义贯穿客户端检索与服务端合并排序见 README.md 的 Document Retrieval and Merge 一节。QA 基准数据集MIRAGE除语料与索引外数据准备阶段还会下载 QA 基准数据集。所有 QA 基准数据来自 MIRAGE 基准由 mirage_qa.py 中的MirageQA.download()从 MIRAGE 仓库的benchmark.json流式下载并保存为data/mirage.json。FedRAG 流水线支持 PubMedQA、BioASQ、MMLU、MedQA、MedMCQA 五个 QA 基准默认评估pubmedqa与bioasq的前 10 个问题。prepare.py会在所有语料下载完成、所有 FAISS 索引构建完毕之后才执行这一 QA 数据的下载。磁盘占用与执行建议综合 data/README.md 与 示例主 README仅下载TextbooksStatPearls全部文档约需3 GB磁盘空间默认快速模式仅拉取部分分块占用更小下载全部四个语料的全部文档约需120 GB再加上每个语料索引的同等磁盘开销全量场景下请按约240 GB预留空间。实操建议先用默认命令./prepare.sh快速验证流程确认跑通后再按需以--index_num_chunks 0对特定语料如textbooks做全量建索引pubmed与wikipedia体量巨大务必评估好下载时长与存储容量后再执行。小结examples/fedrag/data为 FedRAG 提供了完整的数据层支撑从 MedRAG/Hugging Face 与 NCBI 拉取四个领域语料经statpearls.py等脚本分块后由Retriever基于all-MiniLM-L6-v2嵌入模型构建IndexIVFFlat METRIC_L2的 FAISS 索引并最终准备 MIRAGE QA 基准数据供流水线评测使用。理解了这一层就能独立完成 FedRAG 示例从数据到检索的全部前置准备。【免费下载链接】flowerFlower: A Friendly Federated AI Framework项目地址: https://gitcode.com/GitHub_Trending/flo/flower创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询