5分钟上手FiD:从零到跑通首个问答任务的完整教程

📅 2026/8/22 13:40:47
5分钟上手FiD:从零到跑通首个问答任务的完整教程
5分钟上手FiD从零到跑通首个问答任务的完整教程【免费下载链接】FiDFusion-in-Decoder项目地址: https://gitcode.com/gh_mirrors/fi/FiDFiDFusion-in-Decoder是开源的开放域问答Open-Domain QA生成式模型核心思想是把问题与检索到的上百个段落同时送入 T5 编码器再由解码器融合生成最终答案。本教程带你从零开始5 分钟内完成环境配置、数据下载并用预训练模型跑通你的首个问答任务最后还将带你训练自己的问答模型 一、FiD 是什么为什么值得学习传统的抽取式问答只能从给定段落中复制答案而 FiD 采用生成式方式模型像写句子一样写出答案因此能跨多个段落整合信息回答更自然、更完整。它的工作流程非常直观检索针对问题从维基百科等知识库中检索 Top-100 相关段落编码把问题 每个段落共 100 个输入并行编码融合生成解码器同时参考 100 个编码结果自回归生成答案。项目代码结构清晰核心模块都在 src/ 目录下文件作用train_reader.py训练问答模型Readertest_reader.py评测问答模型输出 EM 分数train_retriever.py训练段落检索模型Retrieverpassage_retrieval.py用检索模型对问题做段落检索src/model.pyFiD 核心模型定义FiDT5二、一键安装环境准备三步走 ️FiD 只依赖 Python 3、PyTorch、Transformers 和 NumPy安装非常简单。第 1 步克隆项目git clone https://gitcode.com/gh_mirrors/fi/FiD cd FiD第 2 步安装依赖pip install -r requirements.txt第 3 步确认 PyTorch 已安装⚠️新手必看项目基于 PyTorch 1.6.0 测试且 Transformers必须使用 3.0.2 版本其他版本很可能不兼容。如果你已安装过 Transformers请执行pip install transformers3.0.2降级到指定版本这是新手最容易踩的坑三、最快获取数据与预训练模型 官方提供了两个一键脚本无需手动拼数据。下载问答数据集NaturalQuestions TriviaQA 维基百科段落数据会保存到open_domain_data/目录bash get-data.sh下载预训练模型保存到pretrained_models/目录bash get-model.sh -m nq_reader_base可用模型共 6 个nq_reader_base、nq_reader_large、tqa_reader_base、tqa_reader_large、nq_retriever、tqa_retriever。预训练模型的效果如下模型规模NQ devNQ testTQA devTQA testbase49.250.168.769.3large52.754.472.572.5四、跑通首个问答任务一条命令完成评测 这是本教程的核心目标——用预训练模型评测你的第一个问答任务。第 1 步了解数据格式评测数据是 JSON 列表每条记录包含问题、标准答案和上下文段落{ id: 0, question: What element did Marie Curie name after her native land?, answers: [Polonium, Po (chemical element), Po], ctxs: [ { title: Marie Curie, text: She named the first chemical element... } ] }其中ctxs是检索到的段落列表通常取 100 个这也是后面--n_context 100参数的含义。第 2 步运行评测脚本python test_reader.py \ --model_path pretrained_models/nq_reader_base \ --eval_data open_domain_data/nq_open_dev_w100.json \ --per_gpu_batch_size 1 \ --n_context 100 \ --name my_first_qa \ --checkpoint_dir checkpoint运行结束后日志会输出类似EM xx.xx的结果EMExact Match即预测答案与标准答案的精确匹配率是开放域问答最常用的指标。小技巧加上--write_results参数模型会把每道题的预测答案写到checkpoint/my_first_qa/test_results/下方便你人工检查模型答得怎么样。五、进阶训练你自己的问答模型 ️想用自己的数据训练只需一条命令train_reader.py已封装好全部训练逻辑python train_reader.py \ --train_data open_domain_data/nq_open_train_w100.json \ --eval_data open_domain_data/nq_open_dev_w100.json \ --model_size base \ --per_gpu_batch_size 1 \ --n_context 100 \ --use_checkpoint \ --name my_experiment \ --checkpoint_dir checkpoint常用参数速查表参数说明--model_size模型规模base小显存或large效果更好--n_context每道题使用的段落数官方模型为 100--per_gpu_batch_size单卡批量大小100 段落场景下建议设为 1--use_checkpoint激活值重计算显著降低显存占用--answer_maxlength固定解码侧张量长度进一步节省显存--eval_freq每多少步评测一次默认 500最优模型自动保存为best_dev六、延伸阅读从 Reader 蒸馏出更强的 Retriever FiD 仓库还实现了从阅读器向检索器蒸馏知识的方法形成检索 → 阅读 → 优化检索的闭环共 4 步用test_reader.py --write_crossattention_scores生成段落交叉注意力分数用train_retriever.py训练检索模型用generate_passage_embeddings.py对维基百科段落建立索引用passage_retrieval.py检索 Top-100 段落再回到第 1 步迭代。官方蒸馏出的检索器在 NQ 上 R20 达 84.3值得进阶学习者尝试。七、新手常见问题 FAQ ❓Q1启动时报 transformers 相关的 import 或 API 错误基本是版本问题请务必pip install transformers3.0.2。Q2GPU 显存不够OOM怎么办依次尝试加--use_checkpoint、把--per_gpu_batch_size设为 1、设置--answer_maxlength固定解码张量、改用--model_size base。Q3为什么--n_context要设为 100官方预训练模型都是在 100 个上下文段落条件下训练的评测时保持一致才能获得表中公布的效果。Q4模型文件保存在哪里统一保存在checkpoint_dir/name/下训练最优权重位于checkpoint/my_experiment/checkpoint/best_dev可直接用于后续评测。写在最后恭喜你已经完成了 FiD 开放域问答模型的完整上手之旅从环境安装、数据下载到用预训练模型跑通首个问答任务再到训练自定义模型与检索蒸馏进阶路线。建议下一步用large模型对比效果差异或尝试自己的问答数据集进一步熟悉这套开源工具链 【免费下载链接】FiDFusion-in-Decoder项目地址: https://gitcode.com/gh_mirrors/fi/FiD创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考