【多模态】37、TextSquare | 借助 Gemini-Pro 通过四个步骤来生成高质量的文本问答数据

在这里插入图片描述

文章目录

    • 一、背景
    • 二、方法
      • 2.1 Square-10M
      • 2.2 模型结构
      • 2.3 使用 Square-10M 进行有监督微调
    • 三、效果
      • 3.1 实验设置
      • 3.2 Benchmark 测评

论文:TextSquare: Scaling up Text-Centric Visual Instruction Tuning

代码:暂无

出处:字节 | 华中科技大学 | 华东科技大学

时间:2024.04

一、背景

当前多模态大模型在 text-centric VQA 任务中已经取得了很好的效果,比如 GPT-4V 和 Gemini 在某些方面都超过了人类的识别能力,但一些开源的模型还远不如闭源的模型,如图 1 所示,这种差距的来源有很多,如模型结构、模型参数量、图像分辨率、训练数据、训练策略等

在这里插入图片描述

因此,有一些模型围绕数据来探究,想要得到更好的微调数据:

  • Monkey,使用了专家模型来对图像生成不同的描述,然后使用 GPT-4 来组合出高质量的包含更多细节信息的描述
  • LLaVAR [51] 和 TG-Doc [46] 使用 GPT-4 将 OCR 结果整合到指令中来生成与文本丰富的图像相关的对话。
  • ShareGPT4V[5] 通过 GPT4V 构建了一个高质量图像描述数据集

但上述方法还是以文本为中心的,图像层面上还存在一些约束,如图像内容呈现方式,图像规模等等

为了解决这一差距,本文提出了一种策略,称为 Square,用于从复杂且多功能的闭源 MLLMs 获取大量高质量、以文本为中心的 VQA 数据,从而构建一个包含数千万实例的数据集(Square-10M),用于指令调优。

该方法包括四个步骤:

  • 自我提问:利用 MLLM 在文本-图像分析和理解方面的能力生成与图像文本内容相关的问题
  • 回答:利用不同的 prompting 技术(链式思维(Chain-of-Thought)和少样本提示等)来回答这些问题
  • 推理:探讨模型回答背后的推理过程
  • 评估:评估问题的有效性、图像文本内容的相关性、答案的正确性,从而提高数据质量并减轻幻觉现象

此外,为了丰富图像多样性,作者收集了大量的 text-rich images,包括自然场景、表格、图表、小票、书籍、幻灯片、pdf、文档、产品标签、网络数据等,构建了 Square-10M 数据集

多模态大模型现状:

最近的研究越来越多地关注将视觉知识引入大语言模型(LLMs)中 [52, 2, 7]。一般的尝试是通过中间模块(如 Projector [29]、QFormer [23]、Perceiver Resampler [1] 等)连接视觉编码器和 LLM,并进行预训练对齐和指令微调,以实现视觉-语言理解。

最近,一些研究 [48, 11, 10, 50, 47, 44, 33, 27] 提出了增强多模态大语言模型(MLLMs)理解文本元素(OCR、以文本为中心的 VQA 等)的能力。其中,mPLUG-DocOwl [48] 创建了新的指令跟随数据集,以增强调优过程。

TextMonkey [7] 采用了移位窗口注意机制,并过滤掉了重要的标记。

DocPedia [10] 和 HRVDA [27] 则通过扩大输入分辨率来弥合 MLLMs 与视觉文档理解之间的差距。

尽管现有开源 MLLMs 已取得了显著进展,但它们仍然与最先进的闭源模型(如 GPT4V [38] 和 Gemini Pro [8])存在巨大差距。本文提出通过训练大规模且高质量的指令跟随数据来缩小这一差距。

以文本为中心的 VQA 现状:

以文本为中心的视觉问答(Text-Centric Visual Question Answering)旨在理解图像中文本和视觉元素之间的交互。

Donut [20] 首次提出了一种基于 Transformer 的端到端训练方法,不需要 OCR。

Pix2Struct [22] 引入了一种可变分辨率的输入表示,以适应文档图像。

DoCo [24] 通过对齐多模态输入的文档对象,增强了图像编码器在大视觉语言模型(LVLMs)中的视觉表示。

BLIVA [16] 通过连接学习的查询嵌入和编码的补丁嵌入,扩大了输入标记空间。一些研究 [11, 46, 51] 在这方面进行了以数据为中心的尝试。

UniDoc [11] 从 PowerPoint 演示文稿中构建了60万对面向文档的图像-文本对。

LLaVAR [51] 和 TG-Doc [46] 通过将 OCR 结果整合到指令中,提示仅包含文本的 GPT-4 为文本丰富的图像生成对话。这些研究都局限于小规模注释或基于单一模态输入的生成。

在这里插入图片描述

二、方法

2.1 Square-10M

下图为数据处理的整个流程:

  • 数据收集:收集包含多种属性的文本元素的大规模图像。
  • 数据生成:包括自我提问、回答和推理。在这个阶段,提示多模态大语言模型(MLLM)基于给定图像生成 VQA 对,以及其答案背后的推理过程。
  • 数据过滤:对生成的内容进行自我评估,旨在通过利用 MLLMs 的评估能力来丢弃无意义的问题和错误的答案。

在这里插入图片描述

  • 总计 380 万张包含丰富文本元素的图像
  • 通过数据生成阶段获得了 2000 万个问答对
  • 最终,通过 Square 策略提炼出了 910 万个问答对及其推理背景。图 2 中展示了对 Square-10M 的更精确分析。

下图为数据示例和数量分布:

在这里插入图片描述

如何使用 Gemini 进行数据生成呢:

  • 自我提问。在这一阶段,我们提示 Gemini Pro 针对给定图像生成深刻、有意义且非平凡的问题。我们要求 Gemini Pro 首先全面分析图像,然后根据其理解提出问题,如图 3 所示。考虑到高级多模态大语言模型(MLLMs)通常在理解文本元素方面比视觉元素较弱,我们还通过使用专业的 OCR 模型将提取的文本预先添加到提示中。
  • 回答。然后,指示 Gemini Pro 对生成的问题给出适当的答案。我们利用各种提示技术来丰富上下文信息并提高生成答案的可靠性,例如链式思维(Chain-of-Thought)和少样本提示(few-shot prompting)。图 3 展示了一个为给定问题生成答案的示例提示。
  • 推理。我们要求 Gemini Pro 阐述其答案背后的详细理由。这样的努力促使 Gemini Pro 更深入地思考问题与视觉元素之间的联系,从而减少幻觉并提供准确的答案。此外,生成的理由可以作为针对特定问题的额外上下文信息,有助于研究上下文学习机制。图 3 展示了一个用于自我推理的示例提示。

如何进行数据过滤:

  • MLLMs 的自我评估:我们提示 Gemini Pro 以及其他高级 MLLMs 判断生成的问题是否有意义,答案是否足够好以正确回答问题。图 3 展示了一个用于自我评估的示例提示。

  • 多个 prompt 的一致性:除了对生成内容进行直接评估外,我们在数据生成阶段手动扩展了提示和上下文空间。一个正确且有意义的 VQA 对在提供不同提示时应该在语义上保持一致。具体来说,在回答阶段,我们为 Gemini Pro 提供不同但语义相似的提示来回答给定问题。如果生成的答案在语义上不稳定,我们就会丢弃这些 VQA 对。图 3 中给出了一个示例。

  • 多个上下文一致性:类似于多提示一致性,我们通过预先添加不同的上下文信息来进一步验证 VQA 对。对于生成的问题,Gemini Pro 在不同上下文下生成三种类型的答案:(1)带推理的回答。Gemini Pro 在详细解释之前回答问题(即在推理阶段生成的内容)。(2)上下文内回答。Gemini Pro 使用链式思维或少样本提示回答问题。(3)简单回答。Gemini Pro 在没有额外上下文的情况下回答问题。如果生成的答案在语义上不一致,我们就会丢弃这些 VQA 对。

2.2 模型结构

  • A Vision Encoder modified from OpenAI CLIP ViT-L14-336 [41], where the resolution is increased to 700 for improved performance.
  • A LLM based on InternLM-2 [3], utilizing InternLM2-7B-ChatSFT as the practical variant.
  • A Projector, which semantically aligns the vision token and the text token.

2.3 使用 Square-10M 进行有监督微调

TextSquare 是通过使用 Square-10M 数据集进行监督微调(SFT)实现的。SFT 过程包括三个阶段:

  • 第一阶段:解冻所有三个组件(即视觉编码器、LLM 和投影器),并在分辨率为 490 的情况下训练模型。
  • 第二阶段:将输入分辨率提高到 700,并仅训练视觉编码器以适应分辨率变化。
  • 第三阶段:在分辨率为 700 的情况下进一步进行全参数微调。

三、效果

3.1 实验设置

训练数据包括 Square-10M 和 Monkey 的 SFT 数据。

训练过程分为三个阶段,使用相同的数据和 AdamW [32] 优化器,并使用 64 个 A100-80G GPU。

  • 第一阶段:对 InternLM-Xcomposer2 进行全参数微调,学习率从 1e-5 降到 1e-6,耗时约 9520 GPU 小时。
  • 第二阶段:将图像分辨率扩展到 700,并仅训练视觉变换器(VIT),学习率从 1e-4 降到 1e-5,耗时约 7280 GPU 小时。
  • 第三阶段:在分辨率为 700 的情况下进行全参数微调,学习率从 1e-5 降到 1e-6,耗时约 12350 GPU 小时。

3.2 Benchmark 测评

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/24388.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 服务器上离线安装 node nvm

因为是离线环境 如果你是可以访问外网的 下面内容仅供参考 也可以继续按步骤来 node 安装路径 Node.js — Download Node.js nvm 安装路径 Tags nvm-sh/nvm GitHub 后来发现 nvm安装后 nvm use 版本号 报错 让我去nvm install 版本 我是内网环境 install不了 下面 你要 把安…

玄机平台应急响应—apache日志分析

1、前言 apache的日志一共有两个,一个是access.log,这个日志记录了所有对Web服务器的访问,被入侵时重点排查这个。另一个是error.log,错误日志记录了服务器运行期间遇到的各种错误,以及一些普通的诊断信息&#xff0c…

【Python】推荐比print更好用的调试方法

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【Vue】作用域插槽

插槽分类 默认插槽:组件内定制一处结构 具名插槽:组件内定制多处结构 插槽只有两种,作用域插槽不属于插槽的一种分类。作用域插槽只是插槽的一个传参语法 作用: 定义slot 插槽的同时, 是可以传值的。给 插槽 上可以 绑定数据&a…

LeetCode 算法:滑动窗口最大值c++

原题链接🔗:滑动窗口最大值 难度:困难⭐️⭐️⭐️ 题目 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动…

Skins

本主题解释如何将DevExpress主题/皮肤应用到应用程序中,如何允许用户在运行时在主题之间切换,如何自定义现有皮肤或创建自己的皮肤,等等。 WinForms订阅包括许多基本控件:按钮、复选框、表单、消息框、对话框、对话框等。 我们实现…

MFC 使用sapi文字转换为语音

文章目录 添加头文件声明变量 添加头文件 声明变量 pSpVoice NULL; //默认构造函数中初始化为空 bool CChKBarSCCodeApp::InitSpVoice() {HRESULT hr ::CoInitialize(NULL); // COM初始化if (!SUCCEEDED(hr)){AfxMessageBox(_T("声音环境初始化失败!…

自定义模块设置示例

CSDN 针对部分博主开放了自定义模块设置&#xff0c;我也是简单的使用了一下这个功能&#xff0c;感觉很不错&#xff0c;下面是我编写的参考代码大家可以复制下面代码来使自己的博客主页多样化。 <div class"pmusic"><iframe frameborder"no" bo…

.net core 使用js,.net core 使用javascript,在.net core项目中怎么使用javascript

.net core 使用js&#xff0c;.net core 使用javascript&#xff0c;在.net core项目中怎么使用javascript 我项目里需要用到“文字编码”&#xff0c;为了保证前端和后端的编码解码不处bug, 所以&#xff0c;我在项目中用了这个 下面推荐之前在.net F4.0时的方法 文章一&#…

将div渲染成textarea框,类似于ant design 的TextArea

一 先看效果 原始效果 输入时效果 二 代码如下 1. html 代码 <div className{style.divTextArea} contentEditable"true"></div> 2. Css(Less)代码 .divTextArea {width: 90%;margin-top: 10px;line-height: 28px;min-height: 60px;border: 1px solid …

MySQL有哪些锁?

文章目录 前言一、全局锁1.全局锁是怎么用的&#xff1f;2.全局锁应用场景是什么&#xff1f;3.加全局锁又会带来什么缺点呢&#xff1f;4.既然备份数据库数据的时候&#xff0c;使用全局锁会影响业务&#xff0c;那有什么其他方式可以避免&#xff1f; 二、表级表1.MySQL 表级…

selenium中, quit 和close的区别

close时 """ close和quit的区别 close关闭当前页 (只是关闭了当前) quit离开整个浏览器 &#xff08;走远了&#xff09; """ from selenium import webdriver import time# 创建浏览器驱动对象 from selenium.webdriver.co…

js如何实现当文本内容过长时,中间显示省略号...,两端正常展示

前一阵做需求时&#xff0c;有个小功能实现起来废了点脑细胞&#xff0c;觉得可以记录一下。 产品的具体诉求是&#xff1a;用户点击按钮进入详情页面&#xff0c;详情页内的卡片标题内容过长时&#xff0c;标题的前后两端正常展示&#xff0c;中间用省略号...表示&#xff0c…

如何在MySQL中实现upsert:如果不存在则插入?

目录 1 使用 REPLACE 2 使用 INSERT ... ON DUPLICATE KEY UPDATE 使用 INSERT IGNORE 有效会导致 MySQL 在尝试执行语句时忽略执行错误 INSERT 。这意味着 包含 索引或 字段 INSERT IGNORE 中重复值的语句 不会 产生错误&#xff0c;而只是完全忽略该特定 命令。其明显目的是…

[word] word大括号怎么打两行 #其他#其他#微信

word大括号怎么打两行 Word给用户提供了用于创建专业而优雅的文档工具&#xff0c;帮助用户节省时间&#xff0c;并得到优雅美观的结果。 一直以来&#xff0c;Microsoft Office Word 都是最流行的文字处理程序。 作为 Office 套件的核心程序&#xff0c; Word 提供了许多易…

秒杀优化+秒杀安全

1.Redis预减库存 1.OrderServiceImpl.java 问题分析 2.具体实现 SeckillController.java 1.实现InitializingBean接口的afterPropertiesSet方法&#xff0c;在bean初始化之后将库存信息加载到Redis /*** 系统初始化&#xff0c;将秒杀商品库存加载到redis中** throws Excepti…

【YOLOv10】使用 TensorRT C++ API 调用GPU加速部署 YOLOv10 实现 500FPS 推理速度——快到飞起!

NVIDIA TensorRT ™ 是一款用于高性能深度学习推理的 SDK&#xff0c;包含深度学习推理优化器和运行时&#xff0c;可为推理应用程序提供低延迟和高吞吐量。YOLOv10是清华大学研究人员近期提出的一种实时目标检测方法&#xff0c;通过消除NMS、优化模型架构和引入创新模块等策…

平稳交付 20+ 医院,卓健科技基于 OpenCloudOS 的落地实践

导语&#xff1a;随着数字化转型于各个行业领域当中持续地深入推进&#xff0c;充当底层支撑的操作系统正发挥着愈发关键且重要的作用。卓健科技把 OpenCloudOS 当作首要的交付系统&#xff0c;达成了项目交付速度的提升、安全可靠性的增强、运维成本的降低。本文将会阐述卓健科…

【转】ES, 广告索引

思考&#xff1a; 1&#xff09;直接把别名切换到上一个版本索引 --解决问题 2&#xff09;广告层级索引如何解决&#xff1f; -routing、join 3&#xff09;查询的过程&#xff1a;query and fetch, 优化掉fetch 4&#xff09;segment合并策略 5&#xff09;全量写入时副…

gcc与g++的原理

程序的翻译 1 快速认识gcc/g2 程序翻译的过程2.1 预处理阶段2.2 编译阶段2.3 汇编阶段2.4 链接阶段 3 动静态库 1 快速认识gcc/g 首先我们需要在linux系统中安装对应的编译器gcc/g&#xff0c;安装命令如下&#xff08;centos7环境下&#xff09;&#xff1a; gcc: yum instal…