https://github.com/cuc-zihang-liu/text-based-rag-framework
基于文本的RAG框架(多种编码器组合)
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (6.1%) to scientific vocabulary
Keywords
Repository
基于文本的RAG框架(多种编码器组合)
Basic Info
Statistics
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 0
Topics
Metadata Files
README.md
多策略RAG问答系统框架
一个基于多路召回(BM25, TF-IDF, BGE向量)与重排序模型的检索增强生成(RAG)问答系统实验框架。
目录
关于项目
本项目是一个为解决特定问答任务(基于初赛训练数据集.pdf)而搭建的RAG实验平台。它旨在通过模块化的方式,系统性地测试和评估不同信息检索(IR)和自然语言处理(NLP)技术组合在问答场景下的表现。
框架核心在于探索 "召回 -> 重排序 -> 生成" 的范式,通过结合传统的关键词匹配算法(BM25, TF-IDF)和现代的密集向量检索(BGE, M3E),实现了一个强大的多路召回系统,并利用重排序模型进一步优化送入大语言模型(LLM)的上下文质量。
功能特性
- 多种召回策略: 支持并实现了三种主流的召回方法:
- TF-IDF: 经典的词频-逆文档频率算法。
- BM25: 业界领先的概率相关性排序算法。
- 向量检索: 使用BGE和M3E等前沿模型将文本编码为向量进行语义相似度搜索。
- 多路召回与融合: 能够将来自不同召回策略的结果进行合并,取长补短,提高召回的全面性。
- 重排序精选: 集成了BGE-Reranker模型,对召回的文档进行二次排序,筛选出与问题最相关的上下文。
- 模块化实验脚本: 项目中的
test系列脚本,每个都代表一个完整的、可独立运行的RAG流程,方便进行对比实验和消融研究。 - Prompt优化集成: 在最终生成答案的环节,脚本中包含了对Prompt的优化逻辑,以提升大语言模型(LLM)回答的准确性。
实现技术
- 核心语言: Python
- 数据处理:
pandas,numpy - 文本检索:
scikit-learn(TF-IDF),rank-bm25(BM25) - 向量与模型:
sentence-transformers,FlagEmbedding,transformers,torch - 进度显示:
tqdm - PDF读取:
PyPDF2(或类似库)
项目架构
本项目遵循一个经典且高效的RAG流程,具体步骤如下:
- 数据加载与预处理: 从
questions.json和初赛训练数据集.pdf中加载问答对和知识库。 - 索引构建: 针对知识库,分别构建 TF-IDF、BM25 和 BGE 向量索引。
- 多路召回 (Recall):
- 对于每个问题,同时使用 TF-IDF、BM25 和 BGE 向量索引进行检索,获取候选文档列表。
- 对各路召回的结果进行合并去重。
- 重排序 (Rerank):
- 使用
BGE-Reranker模型对合并后的候选文档列表进行打分和重新排序。 - 选取得分最高的 Top-K 个文档作为最终的上下文(Context)。
- 使用
- 答案生成 (Generate):
- 构建优化的 Prompt,将原始问题和经过重排序的上下文结合起来。
- 调用外部大语言模型(LLM)API,生成最终答案。
- 结果保存: 将生成的答案保存为
submit-*.json格式的文件。
mermaid
graph TD;
A[用户问题] --> B{多路召回};
B --> C[BM25];
B --> D[TF-IDF];
B --> E[BGE 向量检索];
C --> F[结果融合];
D --> F;
E --> F;
F --> G[BGE 重排序];
G --> H{构建Prompt};
A --> H;
H --> I[大语言模型 LLM];
I --> J[生成最终答案];
上手指南
请按照以下说明在本地设置并运行该项目。
开发前的配置要求
- Python 3.8+
- pip (Python包管理工具)
- 建议使用虚拟环境 (如
venv或conda)
安装与运行
- 克隆仓库到本地
sh git clone https://github.com/your_github_name/your_repository.git cd your_repository - (建议) 创建
requirements.txt文件,并写入以下依赖:txt pandas numpy scikit-learn rank_bm25 sentence-transformers FlagEmbedding transformers torch torchaudio torchvision tqdm PyPDF2 - 通过
pip安装依赖sh pip install -r requirements.txt - 运行实验脚本
选择一个
test5-*.py脚本来运行一个完整的RAG流程。例如,要运行包含BM25和BGE双路召回及重排序的流程:sh python "test5-多路召回重排序模型-BM25-BGE-Reranker-文本问答Promopt优化.py"程序运行后会进行计算,并将最终结果输出到对应的submit-*.json文件中。
文件目录说明
项目主要由一系列Python脚本构成,每个脚本都有明确的功能定位:
.
├── test1-API调用.py # 基础功能测试:调用大语言模型API
├── test2-BM25-读取问答数据集.py # 模块测试:实现BM25召回
├── test2-TFIDF-读取问答数据集.py # 模块测试:实现TF-IDF召回
├── test3-BGE-文本编码模型.py # 模块测试:使用BGE模型进行文本向量化
├── test3-M3E-文本编码模型.py # 模块测试:使用M3E模型进行文本向量化
├── test4-重排序逻辑模型.py # 模块测试:实现BGE-Reranker重排序逻辑
├── test5-*.py # 端到端流程:组合不同模块进行完整的问答实验
│
├── questions.json # 问答数据集
├── 初赛训练数据集.pdf # 用于构建知识库的原始PDF文件
├── submit-*.json # 各个实验流程生成的最终答案文件
└── README.md # 本文件
版本控制
该项目使用Git进行版本管理。您可以在repository参看当前可用版本。
版权说明
该项目签署了MIT 授权许可,详情请参阅 LICENSE.txt
Owner
- Name: 刘子航
- Login: CUC-ZIHANG-LIU
- Kind: user
- Company: 中国传媒大学
- Repositories: 1
- Profile: https://github.com/CUC-ZIHANG-LIU
GitHub Events
Total
- Watch event: 1
- Push event: 1
Last Year
- Watch event: 1
- Push event: 1
Dependencies
- actions/checkout v4 composite
- actions/setup-python v3 composite