从 RAG 应用中你能学到什么? (文件内容解析)
lipiwang 2025-03-26 13:50 24 浏览 0 评论
前面文章全面介绍了RAG 的整个流程,今天重点介绍RAG第一步——各种文件内容理解、解析,用户的输入文件较好的无损理解是实现高性能RAG 的第一步。
日常常见接触到的文件格式有doc、pdf、excel 等文件格式,这些不同文件格式的文件其中内容有文本、表格、图像夹杂其中。其中文字内容的读取重要的是保留其中板式,文字内容的读取一般各种python库基本能支持;
本文重点讲解非文字读取方面的技术,如遇到图片,如果是表格需要 OCR 识别技术、如果是非文字转成的物理场景的图片,则需要对图像内容进行理解;这些基本都涉及到多模态大模型相关内容。典型的OCR识别方面,最近AllenAI 开源的 olmOCR 具备对多种复杂文档元素的识别能力,包括:
表格:能够解析文档中的表格结构,确保数据完整性。
公式:保留数学表达式,避免丢失关键信息。
手写内容:具备一定的手写识别能力,提高可读性。
这一切得益于 olmOCR独特的训练方法,它在大量学术论文、技术文档数据集上进行了专门微调,并采用了一种提示技术(Prompting Technique),显著提升了文本识别准确性,同时减少幻觉现象(hallucinations),即误识别或虚构内容的情况;
而olmOCR 使用 Qwen2.5-VL 作为基座训练的模型;而对于实际的物理场景图片识别理解 Qwen2.5-VL 也具备较强的能力. 值得注意的是 Qwen2.5-VL 本身具备能自动识别表格、公式、乐谱等复杂元素并输出结构化数据的能力.
总结下来,当前多模态大模型结构一般包括至少一个Vision-Encoder 一般是一个ViT 结构,或者ViT 的变体结构,然后加一个LLM 模型(整体思路将文本、视频输入ViT 得到token 表达)然后结合 text token 的embedding 一起输入到LLM 的结构,以 Qwen2.5-VL 其架构图如下:
下面对Qwen2.5-VL论文中描述的训练技巧进行阐述:
预训练阶段:
我们从零开始训练了一个 Vision Transformer(ViT),使用 DataComp(Gadre 等,2023)和部分内部数据集作为视觉编码器的初始化,同时利用 预训练的 Qwen2.5 大语言模型(LLM)(Yang 等,2024a)作为 LLM 组件的初始化。正如表 2 所示,预训练过程分为三个不同阶段,每个阶段采用不同的数据配置和训练策略,以逐步增强模型的能力。
在第一阶段,仅训练 Vision Transformer(ViT) 以提高其与语言模型的对齐性,为多模态理解奠定坚实基础。此阶段的主要数据来源包括 图片字幕(image captions)、视觉知识(visual knowledge)和 OCR 数据。这些数据集经过精心挑选,以培养 ViT 提取有意义视觉表示的能力,并能够有效地与文本信息融合。
在第二阶段,所有模型参数全部解冻,并在多种多模态图像数据集上进行训练,以增强其处理复杂视觉信息的能力。
这一阶段引入了更复杂、更注重推理能力的数据集,包括:
- 交错数据(interleaved data)
- 多任务学习数据集(multi-task learning datasets)
- 视觉问答(VQA)
- 多模态数学(multimodal mathematics)
- 基于智能体的任务(agent-based tasks)
- 视频理解(video understanding)
- 纯文本数据集(pure-text datasets)
这些数据集加强了模型在视觉和语言模态之间建立深层次联系的能力,使其能够处理更加复杂的任务。
在第三阶段,为了进一步增强模型在 长序列推理 方面的能力,加入了 视频数据和基于智能体的数据,同时增加了序列长度。这一阶段的训练使模型能够更精准地应对更高级、更加复杂的多模态任务。
通过扩展 序列长度,模型能够处理更长的上下文信息,特别适用于需要 长距离依赖和复杂推理 的任务。
在训练过程中,图像大小和文本长度的不同会导致计算负载不均衡,为了解决这一问题,我们采用了一种优化训练效率的策略:
- 主要计算开销来源于 LLM 和视觉编码器。
- 由于 视觉编码器的参数较少,并且我们引入了窗口注意力(window attention)以进一步降低其计算需求,因此我们主要关注如何在不同 GPU 之间平衡 LLM 的计算负载。
- 动态打包数据样本,根据 LLM 的输入序列长度分配计算资源,以确保计算负载均衡。
在不同阶段,我们使用了不同的 序列长度:
- 第一、二阶段:数据被统一打包成 8,192 长度的序列进行训练。
- 第三阶段:序列长度增加至 32,768,以适应模型在长序列任务中的增强能力。
这样,模型不仅能够生成更长的推理序列,还能维持较快的训练迭代速度。
后训练阶段:
Qwen2.5-VL 的后训练过程包括两个阶段:监督微调(SFT) 和 直接偏好优化(DPO),其中 Vision Transformer(ViT) 参数保持冻结。
- SFT 阶段:模型在多样化的多模态数据上进行微调,包括图文对、视频和纯文本,数据来源涵盖通用 VQA(视觉问答)、拒绝采样(Rejection Sampling),以及文档与 OCR、目标定位(Grounding)、视频和智能体相关任务等专业数据集。
- DPO 阶段:专注于图文数据和纯文本数据,利用偏好数据来对齐模型与人类偏好。在此过程中,每个样本仅处理一次,以确保高效优化。
这种精简的训练流程在增强模型跨模态推理能力和任务特定表现的同时,确保了其与用户意图的高度一致性。关于Qwen2.5 -VL 模型原理就介绍到这里。
相关其他开源模型如 DeepSeek-VL2,其结构类似;
视觉图片经过一个Vision Encoder ,然后经过一个适配层,VL Adaptor 输入到LLM。
DeepSeek-VL2 采用三阶段训练流程:
1.初始阶段:训练 视觉编码器(vision encoder) 和 视觉-语言适配器 MLP,同时保持语言模型固定,使用图文对数据(详见 3.1 节)。
2.预训练阶段:进行视觉-语言预训练,使用3.2 节描述的数据。
3.微调阶段:利用 3.3 节中的数据 进行监督微调。
在 预训练和微调阶段,所有模型参数(包括视觉编码器、视觉-语言适配器和语言模型)都会解冻,并进行同步训练。
DeepSeek-VL2 通过监督微调(SFT) 来增强预训练模型的指令跟随能力和对话能力。
采用内部视觉-语言 SFT 数据,优化所有参数,但仅监督模型的回答和特殊标记,并屏蔽系统和用户提示词。为了加强对话理解能力,DeepSeek 将多模态数据与 DeepSeek-V2 的纯文本对话数据 相结合。这种方法确保了模型在各种视觉-语言任务中的强大性能,包括:
密集图像描述(dense image captioning)
通用视觉问答(VQA)
OCR 识别
表格/图表/文档/图形理解
视觉转代码(visual-to-code)
视觉推理(visual reasoning)
视觉目标定位(visual grounding)
语言理解 等。
最后介绍一类使用Google SigLIP 视觉理解的模型,构建自己多模态模型的相关做法,训练一个较好的视觉编码器是较为困难的,很多厂商直接基于 SigLIP 直接开发自己的大模型,Qwen2.5-SigLIP、DeepSeek Janus-Pro 等都是这方面尝试。
本文从RAG 流程中内容文本化读取引入,在OCR、表格信息、图像理解场景刨根问底;搬运工追溯到多模型大模型相关知识点;以Qwen2.5-VL,DeepSeek-VL2 为例总结了目前多模态构建原理,关注AIGC-LANDING,搬运工将分享最前沿的AI技术,谢谢大家!
相关推荐
- 小程序-如何获取用户表单控件中的值
-
背景在小程序开发中,经常有用到表单,我们往往需要在小程序端获取用户表单输入框中的值(通常用户输入的有:switch,input,checkbox,slider,radio,picker)等,通过触发事...
- Js基础7:表单元素属性
-
一、封装获取元素的方法封装思想——函数封装——代码复用 function get_id(id){ //这个函数是专门来通过id获...
- 泰媒:到泰国曼谷旅游,注意别被嘟嘟车司机坑!
-
据泰国《世界日报》微信公众号报道,近日,一名导游投诉称,3名外籍游客在泰国曼谷搭载嘟嘟车时,被嘟嘟车司机坑。该导游认为嘟嘟车司机坑害外国游客的行为,破坏泰国的旅游形象,希望能以此为戒。当地时间25日上...
- 快速了解JavaScript的表单操作
-
前言在HTML中使用<form>表单元素在JavaScript中对应的是HTMLFormElement类型,而HTMLFormElement继承了HTMLElement接口...
- 10《Vue 入门教程》Vue 双向绑定指令
-
1.前言本小节我们将介绍Vue中数据的双向绑定指令v-model。v-model的学习相对简单。我们可以用v-model指令在表单<input>、<textarea&...
- 手把手教你搭建消防安全答题小程序-实现答题及提交答卷到数据库
-
手把手教你搭建答题活动小程序系列,第一阶段为界面设计篇,分别描写了如何搭建答题小程序界面。第二阶段为功能交互篇。而上两篇文章分别描写了,如何用云开发实现查询题库功能,以及将获取到的题目数据动态更新到答...
- 你还在使用Guava的Lists.newArrayList()吗
-
Guava说起Guava,做Java开发的应该没人不知道吧,毕竟“google出品,必属精品”。虽然应该没有Spring那样让Javaer无法避开,但是其中很多工具类的封装还是让人欲罢不能。而我们今天...
- Mybatis参数传递
-
1.概述Mybatis的sql参数传递就是将接口方法中定义的参数传输到sql中。sql有两种形式,一种是XML格式(Mapper映射器)中的sql;一种是注解方式的sql。常用参数的类型主要包括:基...
- python中的map和filter避坑指南
-
Pythonic的方式使用map和filter列表迭代在python中是非常pythonic的使用方式definc(x):returnx+1>>>list(map...
- 2025 年 Object 和 Map 如何选择?
-
大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。1.什么是...
- 如何使用Java读取Excel文件到List>格式
-
引言在开发过程中,我们经常会遇到需要读取Excel文件并将数据转换成Java对象的需求。ApachePOI是一个强大的库,它提供了读取和写入MicrosoftOffice格式文件的功能,包括Exc...
- Nginx L4 stream Solution white list map
-
nginx正向透明代理nginx正向透明代理安全方面的一些限制对于代理而已,有时候可能还不够安全,而且这个是基于4层的,所以想要在http上,或者所谓的http头上做限制还是比较难实现了。所以变...
- Java响应式编程 第五篇 flatMap vs map
-
1作用不同1.2映射?展平?map只执行映射flatMap既执行映射,也执行展平什么叫只能执行映射?我理解是把一个数据执行一个方法,转换成另外一个数据。举个例子:mapper函数把输入的字符...
- Java对象拷贝原理剖析及最佳实践
-
作者:宁海翔1前言对象拷贝,是我们在开发过程中,绕不开的过程,既存在于Po、Dto、Do、Vo各个表现层数据的转换,也存在于系统交互如序列化、反序列化。Java对象拷贝分为深拷贝和浅拷贝,目前常用的...
- mybatis手把手教学,希望大家能拿下它
-
目录1.jdbc封装中的问题12.mybatis介绍43.框架搭建41)导包52)配置文件6配置dtd约束73)创建SqlSessionFactory对象94.入门案例91.部门实体...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- maven镜像 (69)
- undefined reference to (60)
- zip格式 (63)
- oracle over (62)
- date_format函数用法 (67)
- 在线代理服务器 (60)
- shell 字符串比较 (74)
- x509证书 (61)
- localhost (65)
- java.awt.headless (66)
- syn_sent (64)
- settings.xml (59)
- 弹出窗口 (56)
- applicationcontextaware (72)
- my.cnf (73)
- httpsession (62)
- pkcs7 (62)
- session cookie (63)
- java 生成uuid (58)
- could not initialize class (58)
- beanpropertyrowmapper (58)
- word空格下划线不显示 (73)
- jar文件 (60)
- jsp内置对象 (58)
- makefile编写规则 (58)