SemStyle: Learning to Generate Stylised Image Captions using Unaligned Text
1、提出问题
早期关于多样性的图像描述模型的工作大多在单词变化和单词嵌入转换上,但没有明确区分内容和风格。而且还需要手动创建的、特定样式的图像描述数据集,并且无法使用大量没有配对图像的文本。
我们要解决的问题主要有三个:
使用给定样式的大量文本来组成多样化的图像描述,这些文本没有和图像配对。这与现有的需要对齐图像和样式文本的模型形成对比。表示一个图像,以便在允许灵活使用单词和语法的同时保留语义。确保文本具有描述性并与图像相关。
2、创新点
图:SemStyle 先将图像提取成一组语义术语,然后使用这些语义术语形成不同风格的描述。
提出了一个 SemStyle 的模型,通过从大量没有对齐图像的风格化文本语料库中学习来生成多样化的图像描述。核心是分离内容和风格。
提出了一种新颖的语义术语表示方法,该方法简洁,提高了词义选择的灵活性。
提出了一个用于获得与图像相关的术语列表的 term generator ,以及一个将有序的语义术语列表解码成多样化句子的 language generator 。term generator 是根据图像和对应的句子中导出的术语进行训练的,language generator 在句子集合上训练,并根据条件生层对应风格的句子。
3、方法
图:SemStyle 模型。term generator 网络(绿色)显示在左下角。 language generator 网络(蓝色)在右上方。
我们提出了一种新的编码-解码器模型来生成多样化的描述。 首先该模型通过 term generator 将图像映射为语义术语表示,然后 language generator 使用这些术语生成多样化的描述。模型如上图所示。
term generator 以图像作为输入,使用 CNN 提取特征,然后生成有序的术语序列。 language generator 将术语序列作为输入,使用 RNN 对其进行编码,然后使用基于注意力的 RNN 将其解码为具有特定风格的自然语言。
我们设计了一个两阶段的学习策略,我们仅使用标准的图像描述数据集来学习 term generator 网络,例如MSCOCO,并使用带有风格的文本数据来训练 language generator 网络,如 romantic novels 。
3.1、Semantic term representation
为了生成既有语义相关性又有适当风格的图像描述,我们的结构化语义表示应该捕捉视觉语义而不是语言风格。 我们希望图像中所有的语义都会被表示,而 language generator 可以自由地选择具有具有特定风格语言结构。我们希望在没有图像的情况下训练 language generator ,所以我们需要一种表示方法来表示文本。
给定一个句子 w = {w1,w2,···,wn},wi∈\in∈Vin,我们定义一种规则将其映射到我们的有序术语列表 x = {x1,x2,···,xM}, xi∈\in∈Vterm。我们的目标是定义一组足够广泛的语义术语和映射规则,以涵盖图像和文本的语义,又能够避免编码的风格。
我们构建了三组规则:
A. Filtering non-semantic words:
虚词被认为是编码风格而不是语义,所以这里我们去掉虚词,以便编码语义而不是风格。从输入的句子 S 中,我们过滤例如 “nah”、“nt” 的词,或者是数字,例如“one”、“two”。使用词性标签(POS),我们进一步删除:标点符号、副词、形容词、代词和连词。通过这些操作我们保留一些常用搭配,例如 “hot dog” 和 “fire hydrant” 。
B. Lemmatization and tagging:
把句子中的单词被转换为语义术语。对于大多数单词,我们选择把单词和词性(POS)的标签拼接,例如 “rock” 变成 “rock NOUN” 。这样使 language generator 能够更自由地使用术语,如时态和主动/被动语态。词性标签区分同一个词的不同意义,例如动词 “rock” 和名词 “rock” 是不同的。我们使用 Spacy2 自然语言工具包进行语法分类和词性标注。
C. Verb abstraction:
使用 FrameNet 框架来代替动词,FrameNet 是语义框架的词汇数据库。例如 sitting, laying, parking 全被映射到 Placing 的语义框架。上表包含五个常用的动词框架。我们使用标记工具 SEMAFOR 来注释框架。然后我们将这些原始单词映射到一个简化的词汇表中。
语义词的顺序与原句中的顺序相同。
3.2、Generating semantic terms from images
我们设计了一个 term generator 来处理输入的图像 I ,目的是得到一个有序的语义术语序列 x = {x1,x2,···,xM}, xi∈\in∈Vterm 。它是基于 CNN+RNN 的结构实现的。图像特征通过 ImageNet 上预训练的 inception-v3 CNN 的倒第二层提取。然后通过一个全连接层,作为一个 GRU 单元的输入。术语列表 x 比一个完整的句子要短,这加快了训练速度。
在每个时刻步 i ,GRU 单元有两个输入。一个是上一个时间步隐藏状态 hi-1 ,另一个是当前步的嵌入向量 Exi 。然后,经过一个全连接层和一个 softmax 层通过 hi 来预测下一个单词 xi+1 。
我们将 x1 设置为序列开始的标志,并在序列超过最大长度或生成序列的结束标志时终止。
3.3、Generating styled descriptions
language generator 将语义术语列表变为具有特定样式的描述语句。例如,给定属于列表 “dog NOUN”,“Self motion FRAME”,“grass NOUN” ,可以生成 “The dog bounded through the fresh grass.” 。
给定语义术语 x 的列表,我们生成一个输出描述 y={y1,y2,yt,…,yL} , yt∈\in∈Vout,其中 Vout 是输出单词的词汇表。为此,我们学习一个 RNN 序列到序列的 language generator 网络,加上注意力机制,使用具有样式化的文本,并且文本没有对应的配对图像。
编码端是由具有 GRU 单元的双向 RNN 和可学习术语词的嵌入向量组成。双向 RNN 可以看成两个独立的 RNN 在相反的方向上运行,并具有共享的术语词嵌入。前向 RNN 输出的的隐藏状态 hfwd,i 和反向 RNN 输出的隐藏状态 hbak,i 拼接起来,作为编码端输出的隐藏状态 henc,i =[hfwd,i, hbak,i] 。这些输出的隐藏中的最后一个用于初始化解码器的隐藏状态 hdec,0 = henc,M 。解码器本身是一个单向的 RNN ,具有 GRU 单元、可学习的词嵌入、注意力机制和 Softmax 输出层。
注意力机制避免了将整个序列压缩成单个固定长度的向量,从而提高了序列到序列建模的性能。注意向量 α\alphaαt 表示了输入术语 i 对当前输出时间步 t 的重要性。注意力计算过程为:
利用注意力,我们计算一个上下文向量,该向量包含了编码段输出的隐藏状态对于解码器当前时间步长的重要性。
上下文向量的计算过程为:
然后,我们拼接上下文向量 ct 和解码端的隐藏状态 hdec,t ,再通过一个全连接层和一个 softmax 层来预测输出的下一次单词。
其中,|Vout|是输出词汇表的大小。
3.4、Learning with Unpaired Styled Texts
我们为 term generator 和 language generator 设计了一个两阶段的训练策略。
Training the term generator:
我们在一个带有对应文本描述的数据集上训练 term generator 网络,例如MSCOCO。根据 3.1 节中的步骤,从相应的文本描述中构造出每个图像对应的语义序列。
损失函数定义为:
其中,x^ 表示正确的术语。 在训练时,输入项 x^ i-1,…,x^ 1 是正确的术语,这是常见的 teacher forcing 技巧。
Training the language generator:
language generator 以语义术语序列 x 作为输入,并以所需的样式生成句子 y 。为了创建训练数据,我们按照 3.1 节中的步骤,将训练语句 y 映射到语义序列 x 。 损失函数为交叉熵损失。
我们用带有风格的和描述性的句子来训练 language generator 。训练只需要文本,使其能够适应许多不同的数据集。
将两个数据集拼在一起会导致两种可能的输出样式。但是,我们希望指定样式。 我们的解决方案是在训练和测试期间提供一个 target-style 的术语。具体地说,我们的语言生成器网络是在描述性文本和样式化文本上训练的,每个输入序列都附加了一个 target-style 的术语。