当前位置: 首页 > news >正文

【Datawhale夏令营】多模态RAG学习

目的

打造一个能看懂图片、读懂文字、并将两者关联起来思考的AI助手,构建一个先进的智能问答系统,以应对真实世界中复杂的、图文混排的信息环境。

  • AI模型能够阅读并理解包含大量图标、图像和文字的pdf文档 ,基于信息回答用户问题。
  • 能找到答案的同时还需要标注出答案的出处,比如源自于哪一个文件的哪一页。

技术点

多模态检索增强生成 (Multimodal RAG),其中需要涉及到:

  • 多模态信息处理 (Multimodal Information Processing)

  • 向量化与检索技术 (Embeddings & Retrieval)

  • 跨模态检索与关联 (Cross-Modal Retrieval)

  • 大语言模型(LLM)的应用与推理 (LLM Application & Reasoning)

Baseline文件结构

  • fitz_pipeline_all, 数据处理脚本,自动完成PDF解析、内容结构化、分块合并

    • process_pdfs_to_chunks函数, 使用PyMuPDF提取文本,生成JSON文件。
  • rag_from_page_chunks.py, RAG检索与问答脚本,支持向量检索与大模型生成式问答

    • PageChunkLoader, 加载块数据
    • EmbeddingModel,文本批量转换为向量
    • SimpleVectorStore,一个简单的内存向量数据库
    • SimpleRAG,RAG系统的初始化
  • get_text_embedding.py, 文本向量化,支持批量处理

    • batch_get_embeddings 批量获取文本的嵌入向量函数
    • get_text_embedding,获取文本的嵌入向量函数
  • extract_json_array.py, 从大模型输出中提取JSON结构,保证结果可解析

  • all_pdf_page_chunks.json 所有PDF分页内容合并结果,供RAG检索

  • .env 环境变量配置,存放API密钥、模型等参数

  • caches/ 预留目录

  • datas/ 原始PDF文件及测试集存放目录

  • data_base_json_content/ PDF解析后的内容列表(中间结果)

  • output/ 其他输出文件目录

Baseline方案思路

  • 离线预处理(构建知识库)
    • 文档解析(Parse)
    • 知识库构建(Index)
  • 在线推理(生成答案)
    • 问题向量化(Query)
    • 信息检索(Retrieve)
    • 答案生成(Generate)

Baseline调整上分

  • 分块策略

    • 目前按“页”分块,简单粗糙。
  • 检索优化

    • 当前策略:Top-K检索策略,简单可用
  • Prompt工程: rag_from_page_chunks.py

    • Prompt是整个生成环节的灵魂。
    • 提升:设计更好的Prompt提示词,是的生成更加精确
  • 多模态融合

    • 当前是“图片”转为“文字描述”,信息有损失。
  • 升级解析方案

    • 当前解析是fitz
    • 提升: 升级为MinerU

Baseline提分优化

1、提示词优化, rag_from_page_chunks.py, 效果不明显:0.00346 -> 0.00369

# 压缩TOKEN、强化“命中率”,将「评分标准」写入提示词
prompt = ("任务:在三步内生成 40 字以内答案并精确定位。\n""步骤 1:在「检索内容」中找出与「问题」语义最贴合的 1 句话,标星*。\n""步骤 2:提取该句所在文件名与页码;无页码填 0。\n""步骤 3:用该句直接回答,禁止推理、禁止换行。\n""输出格式:{\"answer\":\"步骤3结果\",\"filename\":\"步骤2文件名\",\"page\":步骤2页码}\n\n"f"检索内容:\n{context}\n\n"f"问题:{question}\n"
)

2、输出格式优化,根据提交文件submit.json示例。在rag_from_page_chunks.py生成修改输出标准的提交格式, 将answer, filename, page输出补全。评分变化:0.00369 -> 0.16001

# 只保留结果部分,并去除 retrieval_chunks 字段
idx2result = {idx: {k: v for k, v in r.items() if k != 'retrieval_chunks'} for idx, r in results}
filtered_results = []
for idx, item in enumerate(test_data):if idx in idx2result:filtered_results.append(idx2result[idx])elif FILL_UNANSWERED:# 未被回答的,补默认内容filtered_results.append({"question": item.get("question", ""),"answer": item.get("answer", ""),"filename": item.get("filename", ""),"page": item.get("page", ""),})

3、修改temparature参数: 0.2 -> 0.5。评分变化:0.16001->0.1611

completion = client.chat.completions.create(model=qwen_model,messages=[{"role": "system", "content": "你是一名专业的金融分析助手。"},{"role": "user", "content": prompt}],temperature=0.5,max_tokens=1024
)

参考

源码:AISumerCamp_multiModal_RAG

http://www.lryc.cn/news/618501.html

相关文章:

  • 【Bug经验分享】由jsonObject-TypeReference引发的序列化问题
  • 【昇腾】关于Atlas 200I A2加速模块macro0配置3路PCIE+1路SATA在hboot2中的一个bug_20250812
  • STM32_bug总结(TIM定时中断进不去和只进1次)
  • 高性能web服务器Nginx
  • 【Android】【bug】Json解析错误Expected BEGIN_OBJECT but was STRING...
  • linux 开机进入initramfs无法开机
  • 跨设备开发不再难:HarmonyOS 分布式任务管理应用全解析
  • 《Fast Automatic White Balancing Method by Color Histogram Stretching》论文笔记
  • 让齿轮与斑马线共舞:汽车文化驿站及安全教育基地的展陈实践
  • 农业智慧大屏系统 - Flask + Vue实现
  • 安全合规5--终端安全检测和防御技术
  • Python初学者笔记第二十二期 -- (JSON数据解析)
  • 【智慧城市】2025年湖北大学暑期实训优秀作品(3):基于WebGIS的南京市古遗迹旅游管理系统
  • 机器学习 [白板推导](十)[马尔可夫链蒙特卡洛法]
  • js高阶-总结精华版
  • [ 数据结构 ] 时间和空间复杂度
  • 机器学习之TF-IDF文本关键词提取
  • 机器学习-决策树(上)
  • HCIP项目之OSPF综合实验
  • 《算法导论》第 21 章-用于不相交集合的数据结构
  • Linux下命名管道和共享内存
  • django celery 动态添加定时任务后不生效问题
  • 自建知识库,向量数据库 体系建设(二)之BERT 与.NET 8
  • “生成式UI革命”:Tambo AI如何让你的应用“开口说话、动手搭界面” | 全面深剖、案例实践与未来展望
  • 深度学习自动并行技术:突破计算瓶颈的智能调度艺术
  • 每日任务day0812:小小勇者成长记之挤牛奶
  • 13-docker的轻量级私有仓库之docker-registry
  • Dataset类案例 小土堆Pytorch入门视频记录
  • 【Vue.js】生产设备规划工具(报价单Word文档生成)【开发全流程】
  • [TryHackMe]Internal(hydra爆破+WordPress主题修改getshell+Chisel内网穿透)