❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦
🚀 快速阅读
功能:解决长文本问答中的全局上下文理解和事实细节识别难题。
技术:基于混合检索器、LLM增强信息提取器、CoT引导过滤器和LLM增强生成器。
应用:客户服务、医疗咨询、法律咨询、教育与研究、企业决策支持。
正文(附运行示例)
LongRAG 是什么
LongRAG是由清华大学、中国科学院和智谱的研究团队共同推出的,面向长文本问答(LCQA)的双视角鲁棒检索增强生成(RAG)框架。该框架通过混合检索器、LLM增强信息提取器、CoT引导过滤器和LLM增强生成器四个组件,有效解决了长文本问答中的全局上下文理解和事实细节识别难题。
LongRAG不仅在多个数据集上超越了长上下文LLM、高级RAG系统和Vanilla RAG等基线模型,还展现出卓越的性能和鲁棒性。此外,LongRAG提供了自动化微调数据构建管道,增强了系统的“指令跟随”能力和领域适应性。
LongRAG 的主要功能
- 双视角信息处理:基于全局信息和事实细节的双视角来理解和回答长文本上下文问题。
- 混合检索器:快速从大量数据中检索与问题相关的信息片段。
- LLM增强信息提取器:将检索到的片段映射回原始长文本段落,提取全局背景和结构信息。
- CoT引导过滤器:用链式思考(Chain of Thought, CoT)指导模型关注与问题相关的信息,过滤掉不相关的内容。
- LLM增强生成器:结合全局信息和关键事实细节生成最终答案。
- 自动化微调数据构建:基于自动化流程构建高质量的微调数据集,提升模型在特定任务上的表现。
LongRAG 的技术原理
- 检索增强生成(RAG):基于RAG框架,检索外部知识辅助语言模型生成回答。
- 全局信息和细节信息的整合:系统不仅关注局部事实细节,还整合长文本中的全局信息,提供更全面的答案。
- 映射策略:将检索到的片段映射回原始长文本,恢复上下文信息,提供更准确的背景结构。
- 链式思考(CoT):用CoT作为全局线索,指导模型逐步关注与问题相关的知识,提高证据密度。
- 过滤策略:基于CoT的全局线索,过滤掉不相关的信息片段,保留关键的事实细节。
如何运行 LongRAG
环境设置
首先,安装所需的依赖包:
pip install -r requirements.txt
推荐使用FlashAttention 2进行优化和节省GPU内存,相关依赖可以参考FlashAttention的代码库进行安装。
数据准备
原始训练数据来自HotpotQA, 2WikiMultihopQA, MuSiQue和Qasper。评估数据和相应的检索语料库原始数据来自LongBench。
可以通过以下命令下载标准化的原始数据集:
bash download/raw_data.sh
数据将下载到data/
目录中。
数据处理
构建LRGinstruction数据集用于SFT:
cd src
python gen_instruction.py --per_task_num 200 --min_res_tokens 20 --long_ratio 0.2
处理后的数据将保存在data/train/processed
目录中。
构建检索索引并保存分块与原始文本之间的映射关系:
cd src
python gen_index.py --dataset hotpotqa --chunk_size 200 --min_sentence 2 --overlap 2
处理后的数据将保存在data/corpus/processed
目录中。
训练 LongRAG
首先,下载LLaMA-Factory到项目中。然后将构建的指令数据放入LLaMA-Factory/data
,并在dataset_info.json
中添加以下条目:
"LRGinstruction": {
"file_name": "LRGinstruction.json",
"columns": {
"prompt": "instruction",
"query": "input",
"response": "output"
}
}
然后运行以下脚本开始微调:
cd scripts
bash sft.sh $model_name_or_path $template $cutoff_len
model_name_or_path
应与模板对应,cutoff_len
是截断长度。
评估
以下是一些在HotpotQA上进行推理和评估的示例脚本。首先导航到src
目录。
使用不同方法
我们提供了使用ChatGLM3-6B-32k模型的推理示例。
LongRAG-ChatGLM3-6B-32k (without SFT):
CUDA_VISIBLE_DEVICES=0 python main.py --dataset hotpotqa --model chatGLM3-6b-32k --rb --rl --ext --fil --ext_fil
LongRAG-ChatGLM3-6B-32k (with SFT):
CUDA_VISIBLE_DEVICES=0 python main.py --dataset hotpotqa --model LongRAG-chatglm3-32k --rb --rl --ext --fil --ext_fil
组件可迁移性
仅使用Extractor,生成器使用GPT-3.5-turbo,Extractor使用LongRAG-chatglm3-32k:
CUDA_VISIBLE_DEVICES=0,1 python main.py --dataset hotpotqa --model gpt-3.5-turbo --lrag_model LongRAG-chatglm3-32k --ext
仅使用Filter,生成器使用GPT-3.5-turbo,Filter使用LongRAG-chatglm3-32k:
CUDA_VISIBLE_DEVICES=0,1 python main.py --dataset hotpotqa --model gpt-3.5-turbo --lrag_model LongRAG-chatglm3-32k --fil
同时使用Extractor和Filter,生成器使用GPT-3.5-turbo,Extractor和Filter使用LongRAG-chatglm3-32k:
CUDA_VISIBLE_DEVICES=0,1 python main.py --dataset hotpotqa --model gpt-3.5-turbo --lrag_model LongRAG-chatglm3-32k --ext_fil
注意:参数--rb
、--rl
、--ext
、--fil
和--ext_fil
分别表示运行RAG-Base、RAG-Long、Extractor、Filter和Extractor & Filter。这些参数可以任意组合。
评估结果将保存在log
目录中。
资源
- GitHub 仓库:https://github.com/QingFei1/LongRAG
- arXiv 技术论文:https://arxiv.org/pdf/2410.18050
- LLaMA-Factory:https://github.com/hiyouga/LLaMA-Factory/tree/v0.6.3
- FlashAttention:https://github.com/Dao-AILab/flash-attention
- HotpotQA, 2WikiMultihopQA, MuSiQue:https://github.com/StonyBrookNLP/ircot
- Qasper:https://allenai.org/data/qasper
- LongBench:https://github.com/THUDM/LongBench
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发非常感兴趣,我会每日跟你分享最新的 AI 资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!
🥦 微信公众号|搜一搜:蚝油菜花 🥦