KAT: A Knowledge Augmented Transformer for Vision-and-Language

news2025/7/19 15:37:43

Paper name

KAT: A Knowledge Augmented Transformer for Vision-and-Language

Paper Reading Note

URL: https://arxiv.org/pdf/2112.08614.pdf

TL;DR

  • 2022 NAACL 论文,提出了 Knowledge AugmentedTransformer (KAT),提出了一种同时利用显式和隐式知识的 PPL,在 OK-VQA 上取得了 SOTA 效果

Introduction

背景

  • 最近大型 transformer 研究工作的主要重点是优化模型参数中的信息量
  • 在这项工作中,作者提出了一个补充问题:多模态 transformer 能否在推理中利用显式知识?
  • 如下图所示,为了回答左侧示例中的问题,系统需要通过显性知识将生物体与鸟类联系起来,然后应用从爬行动物进化而来的隐性知识来回答问题;同样,对于右边示例中的问题,系统需要识别船只和港口,并需要使用隐式知识判断需要利用锚来阻止船只移动:
    在这里插入图片描述
    • 【现有方案问题】现有的方法主要是单模态的,已经在知识检索和答案预测的范式下有算法方案。但是对检索到的知识的质量和相关性,以及如何整合隐式知识 (如常识) 和显式知识 (如 Wikidata) 的推理过程还没有很好的解决方案,比如现有方案有以下缺陷
      • 使用问题或图像标签中的关键词检索的显性知识可能过于通用,这会导致知识推理过程中产生噪音或不相关的知识
      • 现有的工作主要集中在显性知识上,而显性知识通常以百科全书文章或知识图表的形式出现。虽然这类知识可能有用,但不足以回答许多基于知识的问题。
    • 【挑战】这里的一个关键挑战是准确地将图像内容与抽象的外部知识联系起来

本文方案

  • 本文提出了 Knowledge AugmentedTransformer (KAT),在 OK-VQA 上取得了 SOTA 效果(+6%)
  • 在 encoder-decoder 结构中继承了显式和隐式的知识,同时在生成答案时仍然联合这两个知识来源
    • 此外,显式知识集成提高了本文分析中模型预测的可解释性
  • 本文主要贡献有:
    • 知识提取方案更新:显著提高所提取知识的质量和相关性
      • 对于隐式知识,设计了新的提示,以从冻结参数的GPT-3模型中提取初步答案和支持证据
      • 对于显式知识,使用CLIP模型设计了一个基于对比学习的显式知识检索器,其中所有检索到的知识都集中在视觉对齐的实体上
    • 基于编码器-解码器 transformer 的推理架构
    • OK-VQA 取得了 SOTA 结果

Dataset/Algorithm/Model/Experiment Detail

实现方式

问题定义
  • 对于给定训练数据集
    在这里插入图片描述
    其中 v i v_{i} vi 是第 i 张训练图片;s 是所有的训练图片数目; q i q_{i} qi a i a_{i} ai 分别是第 i 个问题和对应的答案
  • 模型 IO 设计
    • 输入 v i v_{i} vi q i q_{i} qi,自回归地输出 a i a_{i} ai

显式知识检索

  • 构建了一个显式的知识库 K,涵盖了Wikidata中的8类动物、车辆和其他常见物体
    • 知识库中的每个 entry 包含:实体和对应的描述
  • 显式知识检索流程
    • 对于知识库中所有 entry 都基于一个 dense encoder Eent(·) 提取为 d 维特征
    • 对于输入图片,使用滑动窗生成 N 个子区域图片,每个都基于图片 encoder Eimg(·) 来提取 d 维特征
    • 基于上述两者特征计算相似度,每个图像 patch 都挑选前 k 个最相关的知识库特征,共挑选出 Nxk 个知识库 entry,然后基于相似度再选择 top-m 个 entry。
  • 这里图像和知识库的 encoder 使用了 CLIP (ViT-B/16 variant)

知识库构建

  • 使用 English Wikidata (Sep. 20, 2021 版本),包含 95, 870, 584 实体
  • 提取了一个子集,它涵盖了现实场景中的常见对象;删除字符串标签或相应描述为空或非英语的所有实体,最终得到包含 423, 520 实体知识库
    在这里插入图片描述

隐式知识检索

  • 参考之前工作基于 GPT-3 来提取隐式知识
  • 对于每个图像问题对,首先通过 SOTA 的 image caption 模型将图像 vi 转换为文本描述 C,然后构造一个精心设计的文本提示,该提示由一个通用指令语句、文本描述C、问题和一组从训练数据集中提取的上下文问答三元组组成,这些三元组在语义上与当前图像问题对最相似,一个 GPT-3 的输入 prompts 示例如下
    在这里插入图片描述
  • 基于以上输入 GPT-3 可以得到一个初步答案,为了从GPT-3的隐含知识及其原理中获得更深入的见解,设计了另一个提示来查询GPT-3,以获取它生成的候选答案背后的支持证据
    • 更具体地说,对于每个图像问题对(vi,qi),以及 GPT-3 生成的一个暂定答案,我们构建如下形式的提示:“(问题qi)?(答案a)。这是因为”来询问 GPT-3 回复这个答案的支持证据。最终将GPT-3中的初步答案和相应的支持证据整合为隐式知识源

KAT 模型

在这里插入图片描述

  • 以上显式知识检索可能有噪声或者不相关的,另外隐式知识检索中的 GPT-3 提供的支持性证据是通用的或与图像内容无关。不同知识的简单 concat 可能会在模型训练期间引入噪声,这里的模型实现是知识推理模块分别对每个问题和知识对进行编码,在生成答案时,对显性和隐性知识结合起来进行推理
  • encoder:
    • 我们将问题与每个知识连接起来
      • 显式:question:、entity: and description
      • 隐式:question:,candidate: and evidence
    • 使用 an embedding layer 和一些 encoder layers 来分别对问题知识对进行编码
    • 对来自最后一个编码器层的每个问题知识对的 token embeddings 取平均,分别得到:
      • 显式知识:Xexp ∈ Rm×d,d 是 embedding 维度
      • 隐式知识:Ximp∈Rp×d,d 是 embedding 维度
  • Reasoning Module
    • Xexp 和 Ximp concat 后作为输入 X,之前 self-attention 层输出 H 也作为输入,基于 cross attention 提取特征
      在这里插入图片描述
      其中 K、V 来源于 X,Q 来源于 H
  • Decoder:一系列 decoder layer 组成,训练 loss 为 ce loss
    在这里插入图片描述

实验结果

数据集

OK-VQA:最大的基于知识的VQA数据

  • 这些问题都是由Amazon Mechanical Turkers众包的,需要图像以外的外部知识才能正确回答
  • 该数据集包含14031张图片和14055个问题,涉及各种知识类别

实现细节

  • knowledge reasoning 使用预训练的 T5 模型:base (220M) 和 large (770M)
  • 在 OK-VQA 上 finetune
  • 考虑到计算资源限制,检索实体数目设置为 40
  • 16 张 V100 训练,batch size 32
  • 评测:
    • 用规范化后的 gt 来评估模型,规范化步骤包括小写和删除文章、标点符号和重复空格
    • 用3种不同的随机种子训练模型,并使用平均结果提交排行榜

与 SOTA 方法对比

在这里插入图片描述

消融实验

  • 知识检索方法:large 和 base 差距 4 个点左右;显式知识或者隐式知识单独引入都涨点明显
    在这里插入图片描述

  • Knowledge Reasoning 模块设计:看起来模型结构设计的影响和知识库引入相比并不大
    在这里插入图片描述

  • 显式知识利用的检索数目影响,可以看到在 40 时精度最高
    在这里插入图片描述

OK-VQA 数据集上的问答示例

在这里插入图片描述

Thoughts

  • 显式和隐式知识结合 ppl 看起来挺简洁的,知识检索模块利用更新的技术应该还有提升空间

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

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

相关文章

记录第一次安装部署datadonphon遇到的坑和解决办法

故事开始之前,我在3台服务器里新建了一个abin用户,3台服务器都用abin和root账号做了免密登录。故事开始了......按照官网文档一顿操作猛如虎到了配置集群了。那就配置呗,点它。仔细阅读了提示,嗯,明白它的意思了。来吧…

Python进阶-----高阶函数->filter() 函数

目录 前言: filter() 函数介绍 filter() 函数使用示例 1.与循环对比 2.与lambda函数综合使用 3.使用None过滤False 4.过滤字典相关数据 前言: 家人们,当你们获取了一个序列的时候,想要把一些内容去掉,保留一部分…

《JavaEE》进程和线程的区别和联系

👑作者主页:Java冰激凌 📖专栏链接:JavaEE 目录 进程是什么? 线程是什么? 进程和线程之间的联系~ ps1:假设我们当前的大兴国际机场有一条登机口可以登入飞机 ps2:我们为…

运动员最佳匹配问题(详解)

一、问题描述 羽毛球队有男女运动员各n人。给定2个nn矩阵P和Q。 P[i][j]是男运动员i的女运动员j配对组成混合双打的男运动员竞赛优势;Q[i][j]是女运动员i和男运动员j配对的女运动员竞赛优势。由于技术配合和心理状态等各种因素影响,P[i][j]不一定等于Q[…

LearnOpenGL-光照-6.多光源

本人刚学OpenGL不久且自学,文中定有代码、术语等错误,欢迎指正 我写的项目地址:https://github.com/liujianjie/LearnOpenGLProject 文章目录前言例子代码没有聚光灯效果有聚光灯效果前言 此节目的 综合2.5投光物,在此节实现一个场…

超越语言界限,ChatGPT进化之路——Visual ChatGPT

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

操作系统复习

熟练掌握操作系统的定义,操作系统的特征,操作系统的功能熟练掌握多道程序设计的概念,单道程序设计和多道程序设计的区别,多道程序设计的优点熟悉操作系统接口的主要功能,系统调用的基本概念、类型、实现。操作系统接口…

【Mysql】库的操作

一、sql分类 1.DDL(Data Defination Language)数据定义语言 定义数据时候使用的sql语言 creat:建表、drop:删表、alter:改变 2.DML(Data Manipulation Language)数据操纵语言 对数据进行操作的sql语言 insert:插入、delet…

【打造家庭服务器系列03】Frp 实现内网穿透

一、概述 为什么要搞frp,因为我们的服务器处于家里面的网络,是没有公网IP的,所以直接通过ssh连接服务器,此时就需要一个中转来实现转发。 二、服务端配置 - Frp Server 以腾讯云为例,阿里云也一样。Frp 官方文档 -…

chatPDF | 别再自己读文献了!让chatGPT来帮你读吧!~

1写在前面 自从chatGPT开放API以后,相关基于此的app也是层出不穷。🤪 ChatGPT API是基于OpenAI的自然语言处理模型的API。🧐 基于这个API,开发人员可以通过程序调用和使用ChatGPT模型来解决各种文本相关的任务。😉 其实…

Ubuntu软件包管理之apt与apt-get的区别

目录apt和apt-get发展史apt和apt-get命令对比常用命令举例更新存储库索引升级已安装的包列出所有可用安装包关键字搜索安装包安装软件卸载软件查看安装包信息清理没用的依赖包清理下载的缓存包清理残余的配置文件查看安装包的依赖参考apt和apt-get发展史 Debian 使用一套名为 …

STM32—LCD1602

LCD1602(Liquid Crystal Display)是一种工业字符型液晶,能够同时显示 1602 即 32 字符(16列两行) 第 1 脚: VSS 为电源地 第 2 脚: VDD 接 5V 正电源 第 3 脚: VL 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最…

C语言实现快速排序(hoare法、挖坑法、前后指针法与非递归实现)——不看后悔系列

目录 1. hoare法 方法与步骤 代码实现 2. 挖坑法 方法与步骤 代码实现 3. 前后指针法 方法与步骤 代码实现 4. 快速排序的缺点与优化 1.快速排序的缺点 2.快速排序的优化 ① 三数取中法选 key 代码实现 ② 小区间优化 代码实现 5. 快速排序的非递归实现 附录…

数据结构与算法基础(王卓)(16):KMP算法详解(代码实现)

实现代码的过程中 具体细节、问题: (1):关于写Get_next函数的标题: 现象: PPT上写的是: void get_next(SString T, int &next[]) 然而并不能运行,而当我们去掉了引用符号&…

记录踩过的坑-Git

Git命令克隆很慢原命令:git clone -b r1.13.0 https://github.com/tensorflow/models.git现在替换为:git clone -b r1.13.0 https://github.com.cnpmjs.org/tensorflow/models.git也就是把原 URL 中的 github.com 替换为 github.com.cnpmjs.org&#xff…

设计模式第9式:迭代器模式

前言 我们有很多种方法可以把对象集中到一个集合中,比如列表、堆栈、散列表中。每种集合都有自己的特点和使用时机,但都有一个共同的需求:用户想要遍历这些对象。同时我们并不想用户看到集合的实现,本文将讲解如何让用户遍历对象…

JVM垃圾回收器详解

垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的JVM来实现。由于JDK的版本处于高速迭代过程中,因此Java发展至今已经衍生了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。1、垃圾回收器分类1.1、按线…

国际安全领域顶会NDSS 2023录稿整理 (下)

隐私计算研习社 NDSS是网络和系统安全领域的四大顶级国际学术会议(BIG4)之一,第三十届会议于2023年2月27日到3月3日,在美国圣迭戈举办。本文将接着整理剩余论文,并对论文进行分类,感兴趣的小伙伴可以访问论…

【Linux】信号+再谈进程地址空间

目录 一、Linux中的信号 1、Linux中的信号 2、进程对信号的处理 3、信号的释义 二、信号的捕捉 1、信号的捕捉signal() 2、信号的捕捉sigaction() 三、信号如何产生? 1、kill()用户调用kill向操作系统发送信号 通过命令行参数模仿写一个kill命令 2、rais…

pinctrl和gpio子系统

一、pinctrl子系统简介Linux驱动讲究驱动分离与分层,pinctrl和gpio子系统就是驱动分离与分层思想下的产物,pinctrl子系统主要工作内容如下:获取设备树中的pin信息根据获取到的pin信息来设置pin的复用功能根据获取到的pin信息来设置pin的电气属…