RAG2.0的推出与Adaptive-RAG优化策略:兼看结合文档布局编码与大模型解码的LayoutLLM文档理解方案

今天是2024年3月23日,星期六,北京,天气晴。

我们先来看看大模型进展,来关注RAG进展、高效参数微调以及长文本的一些事情。

其中,关于高效微调的综述方面,推荐大家关注,《Parameter-Efficient Fine-Tuning for Large Models: A Comprehensive Survey》(https://arxiv.org/pdf/2403.14608)一文对各种高效微调(PEFT)算法进行了全面研究,对其性能和计算开销进行综合。此外,该工作概述了使用不同PEFT算法开发的应用,并讨论了用于降低PEFT计算成本的常用技术。

例如,关于lora的一些变体如下:

另外,大模型用于文档图表理解(layoutllm)以及关于RAG(RAG2.0)的一些进展,我们也可以看看,供大家一起参考并思考

一、大模型用于文档图表理解的进展

我们昨天回顾了关于大模型用于文档图表理解的综述工作《From Pixels to Insights: A Survey on Automatic Chart Understanding in the Era of Large Foundation Models》(https://arxiv.org/pdf/2403.12027.pdf),其对当下大模型进行图表理解的工作进行了综述,值得一看。

我们则继续关注文档理解,LayoutLLM: 大模型指令微调用于视觉丰富文档理解的工作。

丰富视觉的文档理解(VrDU)专注于分析文档图像(例如发票),以自动提取和组织结构化信息。不同的文档有不同的风格、格式和内容,因此与传统的文本信息提取任务不同,VrDU同时依赖于文本和视觉信息因此,利用视觉丰富的文档的多模式特性至关重要。

之前的工作,例如LayoutLMs,提出通过联合预训练文本、视觉和布局信息来获取特征表示。在单个模型中进行最终调整,如图1所示:

微调过程是对每个任务进行的,如图1(a)所示。然而,这种方法需要对每个任务和数据集进行复杂的微调步骤,从而显着增加培训和运营成本。

大模型LLM由于在自然语言处理任务中的成功而受到了广泛关注,可以通过根据输入文本的响应微调知识来执行各种任务,例如翻译和摘要,虽然它们可以通过提示(输入指令)执行各种任务,但它们只能处理一维文本信息序列,必须改进它们以处理具有重要二维结构的文本,例如文档图像。

《LayoutLLM: Large Language Model Instruction Tuning for Visually Rich Document Understanding》 一文提出了一种新方法LayoutLLM,它通过结合VrDU模型和LLM的优点来解决传统模型的局限性。

编码器采用了擅长文档布局理解的模型,而作为解码器,使用了擅长语言理解的LLM,所提出的单一模型可以通过微调多个VrDU任务来灵活地执行多个任务,例如文档图像分类、信息提取和文档视觉问答,使用预训练的LayoutLMv3作为编码器预训练的Llama-7B解码器及其官方权重

具体地,

在编码器方面,首先使用预先训练的LayoutLMv3架构对文档图像中的ORed文本和视觉信息进行编码,用于捕获文档的布局结构和文本,并生成与文档相对应的特征,生成成最大序列长度为512的一维序列输入到后续的Llama中,最大序列由LayoutLMv3配置确定。此外,还使用一个线性层来对应Llama的输入维度,输入到Llama。

在解码器方面,使用Llama接收输入数据和任务指令,并产生相应的输出,本研究中使用了7B参数模型,文档特征和VrDU任务指令提示用作VrDU任务的输入,其在对任务指令提示进行标记化和编码之后,首先将文档特征输入到LLM,然后是任务指令信息,该特征与嵌入自然语言提示后的特征在同一阶段输入,微调方法完全遵循Alpaca

地址:https://arxiv.org/pdf/2403.14252

二、关于RAG优化的一些进展

1、关于RAG进展, Adaptive-RAG:学习适应检索增强的大模型以解决问题复杂性

《Adaptive-RAG: Learning to Adapt Retrieval-Augmented Large Language Models through Question Complexity》一文提出了一个新颖的自适应框架,根据查询的复杂程度,从最简单到最复杂,动态地为(检索增强的)LLM 选择最合适的策略。

如下图所示,包括三种方式:

(A)在回答查询时,这种单步方法先检索相关文档,然后生成答案。但是,对于需要多步骤推理的复杂查询,这种方法可能还不够。

(B) 这种多步骤方法会迭代检索文档并生成中间答案,虽然功能很好,但对于简单查询来说效率很低,因为它需要多次访问LLM和检索器。

(C) 自适应方法可以根据分类器确定的给定查询的复杂性,为检索增强 LLM 选择最合适的策略,包括迭代、单一甚至无检索方法。

其中,这种选择过程通过分类器来实现,分类器是一个较小的LLM,经过训练,利用自动收集的标签来预测传入查询的复杂程度。

这块的核心在于如何训练这个分类器,为了训练较小的分类器语言模型,采用两种特殊策略来自动构建训练数据集。

首先根据三种不同的检索增强LLM策略的结果,对查询复杂度进行标注,以便根据需要确定标注。例如,如果最简单的非基于检索的方法正确生成了答案,那么其对应查询的标签就是"A"。

此外,为了打破不同模型在为查询提供标签方面的平局,会为更简单的模型提供更高的优先级。换句话说,如果单步方法和多步方法都产生了相同的正确答案,而基于非检索的方法却失败了,就会给其相应的查询分配标签"B",但这种标注策略有一个局限性,即并非所有查询都能得到标注,因为所有三种检索增强方法都可能无法生成正确答案。

另一方面,考虑到基准数据集的创建方式(例如,需要顺序推理的质量保证数据集通常需要多步骤方法;而使用单步骤方法可以理想地回答那些标注了单个文档的查询),基准数据集可能已经对最适合其查询的检索增强LLM策略产生了有意义的归纳偏差。因此,对于那些在第一步标注后仍未标注的查询,给单跳数据集的查询赋予"B",给多跳数据集的查询赋予"C"。

最后,利用这些自动收集的查询复杂度对,通过交叉熵损失来训练分类器。在推理时,可以确定查询的复杂度,即{o=Classifier(q)。

可以看一个具体的例子:

地址:https://arxiv.org/pdf/2403.14403

2、关于RAG2.0,使用上下文优化的端到端RAG方案

今天有个词很火,叫RAG2.0(来自https://contextual.ai/introducing-rag2/),RAG最初的发明者现任Contextual AI 的CEO Douwe Kiela等人对外发布了RAG 2.0。该方法将所有组件作为单个集成系统进行预训练、微调和对齐,通过语言模型和检索器进行反向传播以最大化性能。【看了全篇,也无细节,但可以跟进】

其中有几个图很有意思:

例如,对RAG1.0和RAG2.0的对比:

对RAG1.0和RAG2.0在pretrain、SFT、强化上的流程对比:

总结

本文主要回顾了关于RAG以及文档智能的一些事情,其中所涉及到的一些分流策略(引入小模型做分类)以及关于文档智能的结合(针对文档进行版式识别分析特征建模+大模型做解码)的方案,都很有意思。

文档智能在RAG流程中扮演着十分重要的角色,大家可以多关注这方面的进展。

参考文献

1、https://arxiv.org/pdf/2403.14608

2、https://contextual.ai/introducing-rag2

关于我们

老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。

老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。

对于想加入更优质的知识图谱、事件图谱、大模型AIGC实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。


相关推荐

  • 为什么感觉欧美AI比我们强?
  • 国产数据库,一半都是花架子?
  • AWS祖传技能——重生(创建fork分支)之 “我是真开源”
  • 鹏厂好礼派送中:咖啡机/空气炸锅/耳机限量送!
  • [开源]轻量、安全的问卷系统,适用于市场调研、在线考试、投票、报道、测评等众多场景
  • 一行命令,本地、离线运行大模型
  • 2.1K Star微软开源的高质量IOT库
  • 17K一个即用即走的API客户端,鄙视登录才能用
  • Java服务优雅上下线
  • 2100亿消失后,李宁再救李宁
  • 通用图大模型HiGPT:一己之力建模任何图结构关系!来自港大数据智能实验室&百度
  • Kimi连续宕机打醒巨头!阿里百度360连夜出手长文本,大模型商业化厮杀开始了
  • Stable Diffusion老板也跑了!核心研发已集体辞职,“稳定AI”乱成一锅粥
  • Mixtral、Solar及OpenChat三大模型融合,效果能拉多高?
  • 复刻Sora的通用视频生成能力,开源多智能体框架Mora来了
  • OpenAI进军好莱坞:电影制作用Sora指日可待
  • 成为网红,马斯克Neuralink脑机接口植入者上线表演意念发帖
  • 突发!Stability AI的CEO,跑路了
  • 今日代码 PK | 处理 Spring 事务和锁冲突
  • Redis 有几种缓存读写策略?