【论文复现】语言模型中的多模态链式推理

在这里插入图片描述


📕作者简介:热爱跑步的恒川,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐、摄影的一位博主。
📗本文收录于论文复现系列,大家有兴趣的可以看一看
📘相关专栏C语言初阶、C语言进阶系列、恒川的日常汇报系列等,大家有兴趣的可以看一看
📙Python零基础入门系列,Java入门篇系列、docker技术篇系列、Apollo的学习录系列正在发展中,喜欢Python、Java、docker的朋友们可以关注一下哦!

语言模型中的多模态链式推理

  • 简介
  • 摘要
  • 引言
  • 多模态思维链推理的挑战
  • 多模态CoT框架
  • 多模态CoT模型架构细节
    • 编码模块
    • 融合模块
    • 解码模块
  • 实验结果
  • 运行代码
  • 补充细节
    • 安装包
    • 下载Flan-T5
    • 数据集准备
    • rouge
    • nltk
    • all-MiniLM-L6-v2
    • 运行

本文所涉及所有资源均在这里可获取。

简介

本文主要对2023一篇论文《Multimodal Chain-of-Thought Reasoning in Language Models》主要内容进行介绍。

摘要

大型语言模型(LLM)通过利用思想链(CoT)提示生成中间推理链作为推断答案的基本原理,在复杂推理方面表现出了令人印象深刻的性能。然而,现有的CoT研究主要集中在语言模态上。这篇文章提出了多模态CoT,将语言(文本)和视觉(图像)模式结合到一个分为两个阶段的框架中,该框架将基本原理生成和答案推理分开。通过这种方式,答案推理可以利用基于多模式信息的更好生成的理由。使用多模CoT,模型在10亿个参数下的性能比以前最先进的LLM(GPT-3.5)高出16个百分点(75.17%→91.68%的准确率),甚至超过了ScienceQA基准的人类表现。

引言

阅读一本没有数字或表格的教科书。通过联合建模不同的数据模式,如视觉、语言和音频,我们的知识获取能力大大增强。大型语言模型(LLM)通过在推断答案之前生成中间推理步骤,在复杂推理中表现出了令人印象深刻的性能。这种有趣的技术被称为思维链推理(CoT)。

然而,现有的与CoT推理相关的研究在很大程度上是孤立在语言模态中的,很少考虑多模态场景。为了在多模态中引出CoT推理,文章提倡多模态CoT范式。

给定不同模态的输入,多模态CoT将多步骤问题分解为中间推理步骤(基本原理),然后推断答案。由于视觉和语言是最流行的模式,我们在这项工作中重点关注这两种模式。
在这里插入图片描述
一个示例如图1所示。
通常,有两种方法可以引发多模式CoT推理:
(i)提示LLM
(ii)微调小模型

执行多模式CoT的最直接方法是将不同模态的输入转换为一个模态,并提示LLM执行CoT。例如,可以通过字幕模型提取图像的字幕,然后将字幕与要输入LLM的原始语言连接起来。然而,在字幕制作过程中存在严重的信息丢失;因此,使用字幕(与视觉特征相反)可能会在不同模态的表示空间中缺乏相互协同作用。

为了促进模态之间的交互,另一个潜在的解决方案是通过融合多模态特征来微调较小的语言模型。

由于这种方法允许灵活地调整模型架构以包含多模式特征,在这项工作中研究了微调模型,而不是提示LLM。

我们都知道1000亿参数(100B)下的语言模型往往会产生幻觉推理,误导答案推理。

为了减轻幻觉的挑战,文章提出了多模态CoT,将语言(文本)和视觉(图像)模式结合到一个分为两个阶段的框架中,该框架将原理生成和答案推理分开。通过这种方式,答案推理可以利用基于多模式信息的更好生成的理由。我们的实验是在ScienceQA基准上进行的,这是最新的带有注释推理链的多模式推理基准。实验结果表明,我们的方法比以前的GPT-3.5模型提高了+16%(75.17%→91.68%)。文章的贡献总结如下:
(i) 这项工作是第一次以不同的方式研究CoT推理。

(ii)提出了一个两阶段框架,通过微调语言模型来融合视觉和语言表示,以执行多模式CoT。该模型能够生成信息理性,以便于推断最终答案。

(iii)文章的方法在ScienceQA基准上实现了最先进的新性能,比GPT-3.5的精度高出16%,甚至超过了人类的性能。

多模态思维链推理的挑战

现有研究表明,CoT推理能力可能在一定规模的语言模型中出现,例如超过100B参数的大模型。然而在1B模型中激发这种推理能力仍然是一个悬而未决的挑战,更不用说在多模式场景中了。

这篇文章的重点是在1B左右模型,因为这样可以与常规消费级GPU(例如,32G内存)一起进行微调和部署。接下来将阐述1B模型在CoT推理中失败的原因,并研究如何设计一种有效的方法来克服这一挑战。

下面有个有趣的现象:

在ScienceQA基准上微调了CoT推理的纯文本基准模型。采用UnifiedQA-Base作为主干语言模型。任务为文本生成问题,其中模型将文本信息作为输入,并生成由基本原理和答案组成的输出序列。如图1所示的示例,该模型将问题文本(Q)、上下文文本(C)和多个选项(M)的标记串联作为输入。
为了研究CoT的影响,我们将其与三种变体的性能进行了比较:
(i) 直接预测答案,无CoT(QCM→A)
(ii) 推理,其中答案推理以基本原理为条件(QCM→RA);
(iii) 使用基本原理解释答案推理的解释(QCM→AR)。
在这里插入图片描述
令人惊讶的是,我们观察到准确性下降12.54%(80.40%→67.86%),如果模型在回答之前预测理性(QCM→RA)。结果表明,这些理由可能不一定有助于预测正确的答案。

其中的原因可能是模型在获得所需答案之前超过了最大token限制,或者提前停止生成预测。

然而,文章发现生成的输出(RA)的最大长度总是小于400个token,这低于语言模型的长度限制。因此,对理性危害答案推理的原因进行更深入的探讨是值得的。

为了进一步探究上述情况形成的原因,并深入研究原理如何影响答案预测,本文将CoT问题分为两个阶段,即原理生成和答案推理。基本原理生成使用RougeL分数来评估和答案推理使用准确性评估。表3显示了基于两阶段框架的结果。尽管两阶段基线模型在基本原理生成方面获得了91.76的RougeL分数,但答案推理的准确率仅为70.53%。

在这里插入图片描述
与表2中的QCM→A(80.40%)相比,结果表明,在两阶段框架中生成的基本原理并不能提高答案的准确性。在这里插入图片描述
接着随机抽样50个错误案例,发现模型倾向于产生幻觉推理,误导答案推理。如图2所示的例子,由于缺乏对视觉内容的参考,模型(左部分Baseline)产生了“一个磁体的南极最接近另一磁体的南极”的幻觉。在错误案例中,此类错误的发生率为64%。

文章推测,这种幻觉现象是由于缺乏执行有效的多模CoT所需的视觉上下文。为了注入视觉信息,一种简单的方法是将配对的图像转换为字幕,然后将字幕附加在两个阶段的输入中。然而,如表3所示,使用字幕只会产生边际性能增益(增加0.59%). 然后,通过将视觉特征纳入语言模型来探索一种先进的技术。具体而言,将配对图像输入到DETR模型中,以提取视觉特征。然后在提供给解码器之前融合视觉特征,使用编码的语言表示。有了视觉特征,基本原理生成的RougeL分数提高到了96.97%(QCM→R) ,这相应地有助于提高84.91%的回答准确率(QCMR→A.有了这些有效的理由,幻觉现象得到了缓解——其中62.5%的幻觉错误已经得到纠正(图3(b))。这表明,视觉特征确实有利于生成有效的理由并有助于准确的答案推断。作为两阶段方法(QCMR→A) 表3中的方法比表2中的所有一阶段方法都获得了更好的性能,在多模态CoT框架中选择了两阶段方法。

在这里插入图片描述

多模态CoT框架

基于之前的分析,多模式CoT将语言(文本)和视觉(图像)模式合并到一个两阶段的框架中,以减少幻觉输出,提升模型的效果。

多模式CoT由两个训练阶段组成:
(i) 基本原理生成
(ii) 答案推理

两个阶段共享相同的模型体系结构,但输入X和输出Y不同。
整个过程如图4所示。
在这里插入图片描述
在基本原理生成阶段,模型的输入为X,其中X如下:在这里插入图片描述

其中括号中的前者表示第一阶段中的语言输入,后者表示视觉输入,即图像。

X可以看做实例化为多选推理问题的问题、上下文和选项的拼接,如图4所示。目标是学习一个基本原理生成模型R=F(X),其中R是基本原理。

在答案推理阶段,将基本原理R融入到到原始语言输入Description,因此继续构建第二阶段的语言输入:
在这里插入图片描述

其中◦ 表示拼接。然后,我们将更新后的输入Description馈送到答案推理模型,以推断最终答案Description。

现在回过头来看图4,应该就比较清晰明了了。

多模态CoT模型架构细节

上面我们已经知道了文章的多模态CoT流程是怎么样的了,接下来将分析其中关键的模型架构细节也就是上文提到的F( ),以便我们能够对多模态CoT有更深入的理解。

F( )可以分为三个模块:编码模块、融合模块、解码模块

编码模块

在这里插入图片描述
其中
LanguageEncoder(·)指的就是transformer的encoder部分,输出的就是Transformer编码器中最后一层的隐藏状态。

VisionExtractor(·) 用于将输入图像矢量化为视觉特征,使用的应该是现成的视觉提取模型(DETR),其实应该也是类似transformer的encoder,因为计算机视觉中,也有vision transformer。

融合模块

在编码模块获得到文本和图片的表示后,先进行注意力计算,将文本和图像信息联系起来:在这里插入图片描述
其中Q、K、V分别为Description

然后使用门控融合机制进行特征融合:

在这里插入图片描述
其中Description都是可训练的参数。

解码模块

这里就比较简单,使用的就是transformer的decoderDescription作为输入,输出为我们需要的Y

至此,我们对多模态CoT应该有一个比较深入的了解了,关键内容其实就是使用encoder将文本信息和图像信息表示出来,使用门控融合机制进行特征融合,然后预测出我们需要的结果这个过程就是F( )。

所以多模态CoT完整的流程就是先将初始的文本和图像输入F( )得到图片和原始文本融合之后的CoT,然后再使用CoT的结果增强原始文本信息后得到的结果,再和图片信息输入F( )得到我们最终需要的预测结果。此时再去看图4,应该就一目了然了。

实验结果

在这里插入图片描述
表4显示了主要结果。Mutimodal CoTLarge比GPT-3.5高16.51%(75.17%→91.68%),并超过人类表现。具体而言,在8个问题类别中,Mutimodal CoT Large的得分为21.37%(67.43%→88.80%)的性能增益。与现有的UnifiedQA和GPT-3.5方法相比,这些方法利用上下文中的图像字幕来提供视觉语义,结果表明使用图像特征更有效。此外,根据表5中的消融研究结果,我们的两阶段框架有助于获得优异的结果。总体而言,结果验证了多模态的有效性以及通过两阶段框架使用1B模型实现CoT推理的潜力。

运行代码

在这里不得不吐槽一句,huggingface被禁了,下载模型还得用镜像,这就导致代码里设计模型加载的部分都得自己弄了,再加上有些库版本不兼容,一些代码还需要进行修改…历时3天终于跑通了。在这里插入图片描述
因为我batch_size开的比原文大了2倍,训练的时候显存用的就比较多了,自己硬件是否符号复现条件,可供参考。

测试运行代码(epoch小、batch_size大方便加速调试):

# rationale generation 生成理由
python main.py \--data_root data/ScienceQA/data \--caption_file data/instruct_captions.json \--model declare-lab/flan-alpaca-base \--user_msg rationale --img_type resnet \--bs 16 --eval_bs 32 --epoch 1 --lr 5e-5 --output_len 512 \--use_caption --use_generate --prompt_format QCM-E \--output_dir experiments

训练一个epoch大约30min左右,评估+预测得几h+在这里插入图片描述
得到图像增强理由后,对答案进行增强得到结果:

# answer inference 回答
python main.py \--data_root data/ScienceQA/data \--caption_file data/instruct_captions.json \--model declare-lab/flan-alpaca-base \--user_msg answer --img_type resnet \--bs 16 --eval_bs 32 --epoch 1 --lr 5e-5 --output_len 64 \--use_caption --use_generate --prompt_format QCMG-A \--output_dir experiments \--eval_le experiments/rationale_declare-lab-flan-alpaca-base_resnet_QCM-E_lr5e-05_bs16_op512_ep1/predictions_ans_eval.json \--test_le experiments/rationale_declare-lab-flan-alpaca-base_resnet_QCM-E_lr5e-05_bs16_op512_ep1/predictions_ans_test.json

这段就比较快了在这里插入图片描述

补充细节

安装包

pip install -r requirements.txt

下载Flan-T5

从百度网盘下载Flan-T5模型参数,解压到
declare-lab\flan-alpaca-base\

数据集准备

文本数据集:
https://github.com/lupantech/ScienceQA/tree/main/data
的内容下载到data/ScienceQA/data/

图像数据集:
https://hf-mirror.com/cooelf/vision_features/tree/main
的内容下载到vision_features/
这是已经提取好的图像特征有resnet、vit等,想用哪个下哪个

rouge

metric = evaluate.load(r"/mmcot/mm-cot-main/mm-cot-main/myrouge/evaluate-main/evaluate-main/metrics/rouge")

main.py中rouge的路径要修改成自己的路径

nltk

下载nltk需要的数据

import nltk
nltk.download('punkt')

如果下载不下来,就把需要的tokenizers复制到对应的文件夹
cp -r tokenizers /root/nltk_data

all-MiniLM-L6-v2

在utils_evaluate.py中

model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2').cuda()

如果网络不行需要自行下载模型
下载地址:
https://hf-mirror.com/sentence-transformers/all-MiniLM-L6-v2/tree/main
里面所有的东西放在一个文件夹即可
代码里面模型的路径要改成自己的

运行

注意这里为了测试运行,epoch只设置了1,并且batch size设置的比较大
跑通了之后可以参考原文作者参数进行实验。

# rationale generation 生成理由
python main.py \--data_root data/ScienceQA/data \--caption_file data/instruct_captions.json \--model declare-lab/flan-alpaca-base \--user_msg rationale --img_type resnet \--bs 16 --eval_bs 32 --epoch 1 --lr 5e-5 --output_len 512 \--use_caption --use_generate --prompt_format QCM-E \--output_dir experiments# answer inference 回答
python main.py \--data_root data/ScienceQA/data \--caption_file data/instruct_captions.json \--model declare-lab/flan-alpaca-base \--user_msg answer --img_type resnet \--bs 16 --eval_bs 32 --epoch 1 --lr 5e-5 --output_len 64 \--use_caption --use_generate --prompt_format QCMG-A \--output_dir experiments \--eval_le experiments/rationale_declare-lab-flan-alpaca-base_resnet_QCM-E_lr5e-05_bs16_op512_ep1/predictions_ans_eval.json \--test_le experiments/rationale_declare-lab-flan-alpaca-base_resnet_QCM-E_lr5e-05_bs16_op512_ep1/predictions_ans_test.json

详细复现过程的项目源码、数据和预训练好的模型可从该文章下方链接获取:https://www.aspiringcode.com/content。


  如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞👍作为鼓励,并评论收藏一下,谢谢大家!!!
  制作不易,如果大家有什么疑问或给恒川的意见,欢迎评论区留言。

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

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

相关文章

Mysql常用语法一篇文章速成

文章目录 前言前置环境数据库的增删改查查询数据查询所有条件查询多条件查询模糊查询分页查询排序查询分组查询⭐️⭐️关联查询关联分页查询 添加数据insert插入多条记录不指定列名(适用于所有列都有值的情况) 更新数据更新多条记录更新多个列更新不满足条件的记录 删除统计数…

“不可原谅的漏洞”论文导读

文章《Unforgivable Vulnerabilities》由Steve Christey 2007年撰写,主要探讨了在软件安全领域中那些本可以避免的漏洞,即“不可原谅的漏洞”。这些漏洞通常由于开发者忽视了基本的安全开发实践而存在,且容易被发现和利用。文章提出了建立一套…

文件夹无法访问?全面解析与高效恢复策略

一、文件夹无法访问的困境 在日常的计算机使用中,我们时常会遇到文件夹无法访问的尴尬情况。这种故障表现为双击文件夹时,系统毫无反应,或者弹出“无法访问,拒绝访问”的错误提示。更令人头疼的是,有时文件夹内的文件…

Spring @RequestMapping 注解

文章目录 Spring RequestMapping 注解一、引言二、RequestMapping注解基础1、基本用法2、处理多个URI 三、高级用法1、处理HTTP方法2、参数和消息头处理 四、总结 Spring RequestMapping 注解 一、引言 在Spring框架中,RequestMapping 注解是构建Web应用程序时不可…

VLAN间通信以及ospf配置

目录 1.基础知识介绍 1.1 什么是VLAN? 1.2 VLAN有什么用? 1.3 不同VLAN如何实现通信? 1.4 什么是路由汇总? 1.4.1 路由汇总的好处: 2. 实验 2.1 网络拓扑设计 2.2 实验配置要求 2.2.1 三层交换配置&#xff…

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景

Spring Boot 注解大全:全面解析 Spring Boot 常用注解及其应用场景 简介 Spring Boot 是一个基于 Spring 框架的简化开发框架,它旨在简化 Spring 应用的初始搭建和开发过程。Spring Boot 提供了一系列的注解,使得开发者可以更加方便地进行应用开发和配置。本文将详细介绍 S…

SQL Server身份验证模式

SQL Server是一个广泛使用的关系数据库管理系统,通常使用两种身份验证模式:Windows身份验证和SQL Server身份验证。理解这些身份验证方式的概念与更改方式的操作,对于数据库管理员和开发者至关重要。本文将详细介绍身份验证方式的概念以及如何…

ArcGIS005:ArcMap常用操作101-150例动图演示

摘要:本文涵盖了GIS软件操作的多方面内容,包括地图文档的新建、打开、保存及版本兼容性处理;错误与警告的查阅及帮助文档的使用技巧;地图打印比例尺的调整与地图信息的完善;图层操作的撤销与恢复,界面元素的…

从零开始的c++之旅——继承

1. 继承 1.继承概念及定义 继承是面向对象编程的三大特点之一,它使得我们可以在原有类特性的基础之上,增加方法 和属性,这样产生的新的类,称为派生类。 继承 呈现了⾯向对象程序设计的层次结构,以前我们接触的…

【学习】软件测试中V模型、W模型、螺旋模型三者介绍

在软件工程的星辰大海之中,存在着三种独特的航路图:V模型、W模型以及螺旋模型。它们分别以各自的方式描绘了软件开发与测试的不同旅程。 首先映入眼帘的是V模型——一个以垂直线条贯穿始终的简洁图形。这个模型如同一座倒立的“V”字形山峰,…

SpringMVC笔记 一万字

此笔记来自于B站尚硅谷 文章目录 一、SpringMVC 简介1、什么是MVC2、什么是SpringMVC3、SpringMVC的特点 二、HelloWorld1、开发环境2、创建maven工程a>添加web模块b>打包方式:warc>引入依赖 3、配置web.xmla>默认配置方式b>扩展配置方式 4、创建请求…

【快速上手】pyspark 集群环境下的搭建(Standalone模式)

目录 前言 : 一、spark运行的五种模式 二、 安装步骤 安装前准备 1.第一步:安装python 2.第二步:在bigdata01上安装spark 3.第三步:同步bigdata01中的spark到bigdata02和03上 三、集群启动/关闭 四、打开监控界面验证 前…

三周精通FastAPI:31 使用 StaticFiles从目录中自动提供静态文件

官方文档:静态文件 - FastAPI 静态文件 您可以使用 StaticFiles从目录中自动提供静态文件。 使用StaticFiles 导入StaticFiles。"挂载"(Mount) 一个 StaticFiles() 实例到一个指定路径。 from fastapi import FastAPI from fastapi.staticfiles impo…

【双目视觉标定】——1原理与实践

0 前言 双目视觉定位是目前机器(机器人)等领域中使用得非常广泛的视觉定位技术,双目视觉是模拟人的视觉系统利用两个不同位置的摄像头的视差来确定物体的位置。由于有需要采集两个摄像头的图像共同参与计算,所以双目相机装配要求…

【最佳牛围栏——二分】

题目 思路 扩大数据,避免精度问题,拉到整数域解决不用枚举前缀和的 l 和 r,改为求可能 l 的最小值,线性做法不用记录长度来求平均值,改为用平均值处理数据(这是第二条的前提),直接通…

[java][高级]MyBatisPlus

一、MyBatisPlus简介 1. 入门案例 问题导入 MyBatisPlus环境搭建的步骤? 1.1 SpringBoot整合MyBatisPlus入门程序 ①:创建新模块,选择Spring初始化,并配置模块相关基础信息 ②:选择当前模块需要使用的技术集&…

win10/11无休眠设置和断电后电池模式自动休眠而不是睡眠-用以省电

1、打开休眠设置选项 打开控制面板\所有控制面板项\电源选项\ 左侧的选择电源按钮的功能 默认状态没有休眠 1、管理员权限打开cmd或者power shell 2、输入一下指令,打开休眠选项 powercfg -hibernate on关闭后重新打开 控制面板\所有控制面板项\电源选项\左侧的选…

PyQt5实战——多脚本集合包,UI以及工程布局(二)

个人博客:苏三有春的博客 系列往期: PyQt5实战——多脚本集合包,前言与环境配置(一) 布局 2.1 UI页面布局 整体框架分为分为三个部分,垂直分布。 第一个部分为功能选择按钮(如UTF-8转换&#…

Linux驱动开发(3):字符设备驱动

上一章节我们了解到什么是内核模块,模块的加载卸载详细过程以及内核模块的使用等内容。 本章,我们将学习驱动相关的概念,理解字符设备驱动程序的基本框架,并从源码上分析字符设备驱动实现和管理。 主要内容有如下五点:…

中国逐年最大NDVI数据集(250m)

最大NDVI数据集是指通过遥感技术获取的归一化植被指数(NDVI)数据,这些数据反映了地表植被覆盖的密集程度。NDVI的数值范围通常为-1到1,其中-1表示完全被水覆盖,0表示有岩石或裸土等非植被覆盖,而1表示植被完…