医学报告生成 On the Automatic Generati
Jing B, Xie P, Xing E. On the Automatic Generation of Medical Imaging Reports[C]//Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers). 2018: 2577-2586.
论文导读
医学图像在诊断和治疗中广泛应用。但对于一个经验不丰富的医生,写报告可能会出错(error-prone),对于经验丰富的医生费时费力。因此需要自动生成医学图像报告,辅助医生诊断。生成报告有如下挑战:
- 报告组成成分多,有findings和tags。
- 图像中的异常区域难以辨别。
- 报告长,包含多句话。
为了解决上述的难题,本文提出了如下方法,并在两个数据集上进行验证:
- 构建了多任务学习框架(multi-task learning framework),同时对tag预测和finding生成。
- co-attention 机制,定位异常区域。
- 提出了层级的LSTM,生成长段落。
模型结构
医学报告一份医学报告长这样,findings里面是对医学影像的描述,tags是报告中的关键词。任务需要输入图像,输出tags分类结果,并输出报告。(impression里面是对病例的诊断)。
模型结构如下图:
模型结构
1. Encoder
输入图像后,使用CNN提取patch,作为visual features,分两条路径:
- 进入MLC(multi-label classification),对tags进行预测。tags再word-embedding得到,作为semantic features。
2.visual features 和semantic features进入co-attention,至此完成encoding过程。
2. Decoder
报告是多个句子的,论文采用了先生成每个句子的high-level topic vector,之后再根据这个vector生成相应的句子。从co-attention中输出的context vector首先输入sentence LSTM,生成每一个句子所对应的topic vector,代表了每一个句子的语义信息。之后topic vector再输入到word LSTM里生成整个句子。
Tag Prediction
多标签分类任务,把visual feature提取出来后,输入到MLC中,生成L个tags的分布:
对于每一个tag,都生成一个预测值,之后作用一个指数函数??个人感觉是想表达softmax,并通过一个阈值确定类别1和0,代表有这个tag和没有这个tag。与多类别分类任务不同,多类别任务是对最终的输出向量整体作用softmax。本文使用了VGG19的卷积层提取visual features,最后两层FC用作MLC。之后,分类出来的tags被embedding为semantic features用于topic generation。
Co-Attention
Visual Attention 可以定位目标(ObjectRecognition),也可以帮助生成图像说明文字(ImageCaption),但可能不会提供高阶的语义信息。然而tags总是可以提供高阶语义信息,因此使用co-attention 机制同时注意visual和semantic模态(modalities)。
这里co-attention会利用,以及sentence LSTM的第步的hidden state计算下一时间步的 joint contest vector 。
首先使用单层feed-forward network计算visual feature 和semantic feature的权重:
这里的正比符号,相当于是在feature channel维度上面做了softmax,最终的 visual and semantic context vector分别是前面的attention和:
visual and semantic context vectors
最后把两个向量拼接在一起,在使用fully connected layer得到最终的输入到sentence LSTM中的joint context vector :
这个地方最终的是有joint的意思了。还有一种思路,在计算权重那个地方就都输入,相当于提前joint在一起。
Sentence LSTM
这一部分是包含Sentence LSTM,topic generator和stop control component。Sentence LSTM 是一个单层的LSTM,接收并通过topic generator生成topic vector,由stop control component决定是否继续生成。
Topic generator
接收Sentence LSTM的hidden state和joint context vector ,计算当前第步的topic vector 。
Stop control
以前一步和当前步的hidden state 和为输入,计算是否继续生成的概率:
如果大于预定好的阈值,则停止,否则继续生成。
Word LSTM
topic vector 和START token作为第一个和第二个输入输入到LSTM中,得到后续的word sequence。得到的hidden state 直接用到了词的预测中:
损失函数
- 在multi-label classification任务中,文中先对tag ground truth 一范数归一化,然后和预测向量计算cross-entropy。个人感觉,不对ground truth归一化,预测向量使用sigmoid函数,然后再计算binary cross entropy效果会好一点。
- 在报告生成阶段,损失函数由两部分组成:停止损失和词损失。
最终的损失函数如下:
loss function
最后害加入了一个正则化项,是关于visual and semantic attentions矩阵的:
这个正则化鼓励模型在不同的图像区域以及不同的tags上面,都有相似的注意力。