【论文阅读】Generating Radiology Reports via Memory-driven Transformer (EMNLP 2020)

资料链接

论文原文:https://arxiv.org/pdf/2010.16056v2.pdf
代码链接(含数据集):https://github.com/cuhksz-nlp/R2Gen/

背景与动机

在这里插入图片描述
这篇文章的标题是“Generating Radiology Reports via Memory-driven Transformer”,发表于会议EMNLP2020。它的主要目的是使用记忆驱动的Transformer生成放射性医学影像的报告。
在这里插入图片描述
文章中给出了一个示例的X光片的报告,包含发现和印象两个部分。

文章指出,相比较于传统的NLP任务,放射性医学影像报告生成任务会需要生成内容包含很长的文本描述,详细地解释图像内容,同时生成的内容还具有模板式的特征,因此传统的基于字幕的方式对于这个任务是不太够用的。
在这里插入图片描述
在过往的研究中,针对这一任务,往往采用的两种方式是基于数据库检索的方法和基于模板的方法,然而这两种方法都依赖于大量的数据集或手工创建的模板,存在一定的局现性。

方法

首先在整体的架构方面,采用了一个端到端的Transformer架构,输入的图像序列首先进行Patch Partition操作,然后输入到特征提取网络中,得到一组Patch Features,用于Transformer的输入。论文对Transformer的改进主要集中在Decoder部分。
在这里插入图片描述
可以看到上面右侧这张图,在Decoder部分作者主要引入的两个机制是Relational Memory和Memory-driven Conditional LN。用一个公式来表示的话,其中hi是来自encoder的输出序列,yt是t时刻生成的新token。整体仍然保留了Transformer的架构,只是在它的基础上有一些模块的增加和改变。

为了描述方便,后面就统称Relational Memory为RM, Memory-driven Conditional LN为MCLN。
在这里插入图片描述
首先来看到RM部分。该部分的主要作用是使得模型能够学到更好的report patterns,它和retrieval-based的方法里面的模板的准备差不多,但这里的模板是可训练的,而不是需要手工去做的。

具体看到它的结构,可以看见该部分使用一个矩阵Mt来保存t时刻的记忆信息,根据文章的介绍,该矩阵的每个行是一个存储槽,代表一些重要的模式信息。在decoder生成token的过程中,矩阵结合前面时间步的输出逐步更新,更新的过程参考右边的这三个公式。首先在时间步t上,将来自时间步t-1的矩阵Mt-1通过一个Wq转化为Q,然后将Mt-1和前一时刻的输出yt-1连接,并转化为K和V,一起送进多头注意力模块中,得到结果Z。

考虑到这个记忆存储器是循环运行的,所以随着时间推移可能会发生梯度消失或爆炸的问题,因此引入了残差连接,同时引入了类似于LSTM中的门机制。

门机制的示意图如上面右下角的图片所示,Mt-1是上一时刻的记忆矩阵M,yt-1是上一时刻输出的token,两者分别送入遗忘门和输入门中,最后得到输出Mt。
在这里插入图片描述
接下来看到MCLN部分。这一部分我认为是整篇论文创新点最大的部分,它创新性地将记忆力机制引入到了LayerNorm层中。使得每一时刻的Mt对LN层中的γ和β产生作用。它的思路也不复杂,分别通过一个MLP得到拉长后的Mt对γ和β的影响,然后将它们与原来的γ和β相加,然后再应用LayerNorm。LN的结果作为第一个MultiHead Attention的Q,V和K来源于编码器。

结果

在这里插入图片描述
最后来到结果部分。论文主要是针对IU X-RAY和MIMIC-CXR这两个数据集进行实验。在与baseline对比的过程中,在多个评价指标下都超过了baseline。同时与先前的研究进行比较,也取得了不错的结果。

作者也针对结果进行了调参与分析,发现记忆槽size=3时效果最佳,size=4时产生了性能下降,意味着太大的记忆槽可能会记忆过多的冗余和无效信息,从而对文本生成过程产生负面影响。并且还做了消融实验,比之于BASE+RM,BASE+RM+MCLN生成的报告长度分布更接近于ground truth,这表明将记忆机制应用在更多的内部层中,会对模型生成的内容有更细粒度的控制。
在这里插入图片描述

总结

本文将记忆力机制引入到了端到端的放射性医学影像描述生成的任务重,从而确保了生成结果能够准确、详细地描述输入的影像,并且遵循常规的模式性的描述机制。
在引入记忆力机制的过程中,其更改Transformer的结构的地方比较新颖,在LN层上动刀子,从而将记忆的影响带到了Decoder内部的隐层状态中,获得了更细粒度的控制。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode—2586.统计范围内的元音字符串数【简单】

2023每日刷题&#xff08;二十二&#xff09; Leetcode—2586.统计范围内的元音字符串数 实现代码 class Solution { public:int vowelStrings(vector<string>& words, int left, int right) {int ans 0;for(int i left; i < right; i) {string s words[i];i…

解决:ImportError: cannot import name ‘get_config‘

解决&#xff1a;ImportError: cannot import name ‘get_config’ 背景 今天使用Conda构建项目运行环境的时候报错&#xff1a;ImportError: cannot import name ‘get_config’ ##报错问题 from keras.callbacks import LearningRateScheduler, ModelCheckpointFile "D…

GreenPlum简介

简介 Greenplum是一家总部位于**美国加利福尼亚州&#xff0c;为全球大型企业用户提供新型企业级数据仓库(EDW)、企业级数据云(EDC)和商务智能(BI)提供解决方案和咨询服务的公司&#xff0c;在全球已有&#xff1a;纳斯达克&#xff0c;纽约证券交易所&#xff0c;Skype. FOX&…

idea 模板参数注释 {@link}

1. 新增组 2. 设置方法注释及变量 增加模板文本 ** * $param$ * return {link $return$} */3. 设置变量表达式 勾选跳过param 参数表达式 groovyScript("def result ;def params \"${_1}\".replaceAll([\\\\[|\\\\]|\\\\s], ).split(,).toList();def param…

7.spark sql编程

目录 概述RDD ,Datasets,DataFrames 之间的区别Datasets , DataFrames和 RDD 入门people.jsonSparkSession创建 DataFramesDataFrame 操作编程方式运行 sql 查询创建 DatasetsDataFrames 与 RDDs 互相转换使用反射推断模式编码问题 编程指定 Schema官方文档的代码不全问题 结束…

idea使用gradle教程 (idea gradle springboot)2024

这里白眉大叔&#xff0c;写一下我工作时候idea怎么使用gradle的实战步骤吧 ----windows 环境----------- 1-本机安装gradle 环境 &#xff08;1&#xff09;下载gradle Gradle需要JDK的支持&#xff0c;安装Gradle之前需要提前安装JDK8及以上版本 https://downloads.gra…

Python - 面向现实世界的人脸复原 GFP-GAN 简介与使用

目录 一.引言 二.GFP-GAN 简介 1.GFP-GAN 数据 2.GFP-GAN 架构 3.GFP-GAN In Wave2Lip 三.GFPGAN 实践 1.环境搭建 2.模型下载 3.代码测试 4.测试效果 四.总结 一.引言 近期 wav2lip 大火&#xff0c;其通过语音驱动唇部动作并对视频质量进行修复&#xff0c;其中…

【微信小程序】新版获取手机号码实现一键登录(uniapp语法)(完整版附源码)

需求 如图&#xff0c;点击按钮&#xff0c;获取用户手机号实现一键登录&#xff0c;当然&#xff0c;用户也可以自行输入其他手机号进行登录 问题 要想获取用户手机号并不复杂&#xff0c;但由于近几年微信小程序获取手机号的api进行了更新&#xff0c;当前很多帖子使用的…

VB.NET—DataGridView控件教程详解

目录 前言: 过程: 第一步: 第二步: 第三步: 第四步: 第五步&#xff1a; 番外篇: 总结: 前言: DataGridView是.NET FormK中的一个Windows窗体控件&#xff0c;它提供了一个可视化的表格控件&#xff0c;允许用户以表格形式显示和编辑数据。它通常用于显示和编辑数据库…

Rust教程5:泛型和特征

文章目录 泛型函数特征特征泛型 Rust系列&#xff1a;初步⚙所有权⚙结构体和枚举类⚙函数进阶 泛型函数 Rust采纳了C中的泛型机制&#xff0c;并且形式上也几乎借鉴了C&#xff0c;示例如下 fn add<T: std::ops::Add<Output T>>(a:T, b:T) -> T {a b } fn…

Java智慧工地管理平台可视化大数据建造工地APP源码

建筑行业是国民经济的重要物质生产部门和支柱产业之一&#xff0c;同时&#xff0c;建筑业也是一个安全事故多发的高危行业。如何加强施工现场安全管理、降低事故发生频率、杜绝各种违规操作和不文明施工、提高建筑工程质量&#xff0c;是摆在各级政府部门、施工企业面前的一道…

一文学会Scala【Scala一站式学习笔记】

文章目录 为什么要学习Scala语言什么是Scala如何快速掌握Scala语言Scala环境安装配置Scala命令行 Scala的基本使用变量数据类型操作符if 表达式语句终结符循环高级for循环 Scala的集合体系集合SetListMapArrayArrayBuffer数组常见操作Tuple总结 Scala中函数的使用函数的定义函数…

Python+Selenium+Unittest 之selenium12--WebDriver操作方法2-鼠标操作1(ActionChains类简介)

在我们平时的使用过程中&#xff0c;会使用鼠标去进行很多操作&#xff0c;比如鼠标左键点击、双击、鼠标右键点击&#xff0c;鼠标指针悬浮、拖拽等操作。在selenium中&#xff0c;我们也可以去实现常用的这些鼠标操作&#xff0c;这时候就需要用到selenium中的ActionChains类…

Android transform旋转rotate圆角矩形图roundedCorners,Kotlin

Android transform旋转rotate圆角矩形图roundedCorners&#xff0c;Kotlin import android.graphics.Bitmap import android.os.Bundle import android.util.Log import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import com.bumptech.glide.…

【IO多路转接】pollepoll

文章目录 1 :peach:poll:peach:1.1 :apple:poll函数接口:apple:1.2 :apple:poll接口的使用:apple:1.3 :apple:poll的优缺点:apple: 2 :peach:epoll:peach:2.1 :apple:epoll函数接口:apple:2.1.1 :lemon:epoll_create:lemon:2.1.2 :lemon:epoll_ctl:lemon:2.1.3 :lemon:epoll_wa…

pcie对phy的skew要求

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 pcie的设计中有这样一条要求&#xff0c;所有但phy/tx*_clk pin的clock skew要小于skew要求。 这里提供一下实现方法&#xff0c;如果你有更好的办法可以在评论区留言或者私信…

利用maven的dependency插件将项目依赖从maven仓库中拷贝到一个指定的位置

https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html 利用dependency:copy-dependencies可以将项目的依赖从maven仓库中拷贝到一个指定的位置。 使用默认配置拷贝依赖 如果直接执行mvn dependency:copy-dependencies&#xff0c;是将项目…

IP地址与MAC地址(硬件地址)的区别

IP地址和硬件地址都是用于标识网络设备的地址&#xff0c;但它们的作用和使用方式不同。IP地址是用于在网络中唯一标识一个设备的逻辑地址它是由网络协议栈分配的&#xff0c;可以动态地分配和改变。而硬件地址是设备的物理地址&#xff0c;也称为MAC地址&#xff0c;是由设备制…

TCP/IP的基础知识

文章目录 TCP/IP的基础知识硬件&#xff08;物理层&#xff09;网络接口层&#xff08;数据链路层&#xff09;互联网层&#xff08;网络层&#xff09;TCP/IP的具体含义传输层应用层&#xff08;会话层以上的分层&#xff09;TCP/IP分层模型与通信示例发送数据包的一个例子接收…

什么是微服务?与分布式又有什么区别?

什么是微服务&#xff0c;我们先从传统的单体结构进行了解&#xff0c;对两者进行对比。 单体结构 单体结构是一种传统的软件架构模式&#xff0c;它将应用程序划分为一组相互依赖的模块和组件。这些模块和组件通常都是构建在同一个平台上的&#xff0c;并且紧密耦合在一起。…