RAG Foundry: A Framework for Enhancing LLMs for Retrieval Augmented Generation 论文复现笔记

RAG Foundry框架论文复现笔记

一、论文简介

这篇论文介绍了一个名为RAG Foundry的开源框架,旨在增强大语言模型(LLMs)在检索增强生成(RAG)场景中的性能。以下是论文的核心内容梳理:

1. 研究背景与动机

LLM 的局限性:尽管大语言模型(如 Llama、Phi 系列)能力强大,但存在幻觉(生成错误信息)、事实准确性不足、无法获取训练 cutoff 后的新信息、难以处理长上下文等问题。
RAG 的优势:检索增强生成(RAG)通过整合外部知识检索机制,能缓解上述问题,提升生成内容的相关性、可解释性,并降低成本。
现有工具的不足:现有 RAG 工具(如 LlamaIndex、LangChain)侧重推理流程搭建,但在训练和评估功能上不完善;其他框架要么缺乏训练模块,要么灵活性不足。

2. RAG Foundry 框架核心设计

框架整合了数据创建、训练、推理和评估四个核心模块,形成端到端的 RAG 工作流,支持快速原型设计和多配置实验。
数据创建与处理:
支持从 Hugging Face 或本地加载数据,结合检索工具(如 Haystack)获取外部上下文,生成带检索信息的增强数据集。
包含数据清洗、采样、提示构建(Prompt 设计)等步骤,支持多数据集联动和步骤缓存,提升效率。
训练模块:
基于 TRL 库实现,支持 LoRA(低秩适应)等高效微调方法,可针对 RAG 场景优化模型(如 Llama-3、Phi-3)。
配置文件可指定模型参数、学习率、训练轮次等。
推理模块:
基于处理后的数据集生成预测结果,支持自定义生成参数(如最大新 token 数、采样策略)。
与评估模块分离,便于对同一推理结果进行多维度评估。
评估模块:
支持多种指标,包括精确匹配(EM)、F1、ROUGE、BERTScore,以及 RAG 特有的 Faithfulness(生成内容与上下文的一致性)和 Relevancy(生成内容与查询的相关性)。
可评估检索、排序、推理等多个环节的性能。

3. 实验与结果

实验设置:
模型:Llama-3(8B)和 Phi-3(3.8B)。
数据集:TriviaQA、ASQA、PubmedQA(均为知识密集型问答任务)。
方法:对比基线模型(无检索)、RAG(仅检索增强)、RAG-sft(RAG 微调)、CoT-sft(结合思维链微调)等。
关键发现:
RAG 增强显著提升模型性能,尤其在事实准确性上。
微调(如 RAG-sft、CoT-sft)进一步优化结果,其中 CoT-sft 在 ASQA 等数据集上表现最佳。
Faithfulness 和 Relevancy 等指标与主任务指标(如 EM)不完全相关,说明需多维度评估 RAG 系统。
在这里插入图片描述

4. 贡献与意义

提供开源、模块化的端到端 RAG 框架,简化 RAG 系统的设计、训练和评估流程。
支持灵活配置和自定义组件,便于研究者快速实验不同 RAG 技术(如检索算法、提示策略)。
实验验证了框架的有效性,为 RAG 在知识密集型任务中的应用提供参考。

原文链接:https://arxiv.org/pdf/2408.02545
论文代码开源于:https://github.com/IntelLabs/RAGFoundry

二、环境搭建 (windows11)

1. 创建并激活虚拟环境

# 创建名为 ragfit 的环境,指定 Python 3.10
conda create -n ragfit python=3.10 -y

# 激活环境
conda activate ragfit

激活后命令行前缀会显示 (ragfit),表示当前处于该环境中。

2.克隆代码

git clone https://github.com/IntelLabs/RAG-FiT.git
cd RAG-FiT

或者直接从github链接下载压缩包后解压。

3.安装依赖包

1. 基本依赖安装

使用 pip 安装项目核心依赖:

pip install -e .

2. 可选依赖安装

若需要使用 haystack 相关功能:

pip install -e .[haystack]

若需要使用 deepeval 评估工具:

pip install -e .[deepeval]

三、基线模型复现

基线实验目标:使用 Phi-3-mini-128k-instruct 模型,在 ASQA 数据集上复现「零样本无检索增强」的短答案评估结果(STR-EM 指标)。
因为基线模型无检索增强,所以复现步骤仅包含:数据处理->推理->评估

1、数据处理:生成基线数据集

1.1 核心逻辑

通过processing.py调用configs/paper/processing-asqa-baseline.yaml,生成仅包含问题和短答案的基线数据(无检索上下文)。

1.2 配置文件解读(processing-asqa-baselin

### 如何实现检索增强生成(Retrieval-Augmented Generation, RAG)在知识密集型自然语言处理任务中的应用 #### 设计架构 为了应对大型语言模型(LLM)在处理特定领域或知识密集型任务时遇到的挑战,如幻觉(hallucination)、过时的知识等问题[^1],可以采用RAG框架来提升性能。该方法通过引入外部权威知识库,在生成回复前先进行信息检索并融合这些高质量的信息源。 #### 数据准备 构建一个适合目标应用场景的数据集非常重要。对于知识密集型的任务来说,这通常意味着收集来自可靠资源的事实性陈述或其他形式的相关资料作为补充材料。例如医学文献数据库PubMed可用于医疗咨询类问题解答;法律条文汇编则适用于法规解释场景。 #### 模型选择与配置 选用预训练好的大规模语言模型作为基础组件,并对其进行微调以适应具体业务需求。同时还需要设置专门用于执行文档检索操作的服务端接口或者API客户端工具包。当接收到用户输入后,系统会自动向指定搜索引擎发起请求获取最匹配的结果片段列表。 #### 集成流程说明 整个工作流大致分为三个阶段: - **查询解析**:分析用户的原始提问意图,提取其中的关键概念词组; - **证据搜集**:基于上述关键词利用预先定义好连接至专业知识库(比如维基百科页面链接集合) 的 API 接口抓取若干篇目摘要内容; - **答案合成**:最后一步就是把前面两步得到的信息传递给 LLM 进行最终的回答创作。此时不仅要考虑如何合理安排句子顺序使得表达连贯流畅,还要注意避免直接复制粘贴原文本而造成版权侵权风险。 ```python import requests from transformers import pipeline def rag_pipeline(question): # Query Parsing Stage key_terms = extract_keywords(question) # Evidence Collection Stage retrieved_docs = [] for term in key_terms: response = requests.get(f"https://api.example.com/search?q={term}") docs = response.json()['results'] retrieved_docs.extend(docs[:3]) # Limit to top 3 results per keyword context = "\n".join([doc['snippet'] for doc in retrieved_docs]) # Answer Synthesis Stage using pre-answering') result = qa_model({ 'context': context, 'question': question }) return result['answer'] # Example usage print(rag_pipeline("What are the symptoms of diabetes?")) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值