现有的基于 LSTM 的方法都存在两个问题:
提出了一种 coarse-to-fine 的算法,以两阶段的方式生成图像的描述:首先,生成图像描述的骨架句子,包含图像中涉及的主要对象词及其关系词。然后,再使用注意力机制的方法通过目标对象生成对应的属性词。如图所示。
提出了一种使用单个模型生成可变长度的句子的机制,这使我们能够根据用户的需求来调整图像描述生成的长度,其中句子包含不同数量的对象词和属性词。
在训练阶段,将真实的描述分解为骨架句子和属性词,以训练两个独立的网络。在测试阶段,为给定图像生成骨架句子,然后生成以骨架句子为条件的属性词。然后再将它们合并以形成最终的描述。模型的总体框架如图所示:
图:提出的算法的总体框架。在训练阶段,训练图像描述被分解为骨架句子和相应的属性词。训练 Skel-LSTM 根据图像中的主要对象词及其关系词来生成骨架句子,然后训练 Attr-LSTM 为每个骨架句子生成属性词。
为了提取骨架句子和属性词,我们使用 Stanford constituency 解析器。如图所示,解析器从原始的描述中构造了一个选区树,而节点则分层形成了不同类型的短语。常见的短语类型是名词短语 (NP),动词短语 (VP),介词短语 (PP) 和形容词短语 (AP)。
为了提取骨架句子中的对象,我们找到最低级别的 NP ,并将短语中的最后一个单词保留为骨架的对象单词。在同一 NP 中位于其前面的单词是描述此骨架对象的属性词。其他类型的最低级别短语保留在骨架句子中。
我们有时候很难确定名词短语中除了最后一个单词之外的所有单词是否都是属性。例如,短语 “coffee cup” 是一个 noun-noun 的复合词。我们应该保留 “coffee cup” 作为一个单一的对象词,还是使用 “coffee” 作为修饰词?在这项工作中,我们并没有将名词复合词与其他属性名词词组区分开来,而是将 “coffee” 视为 “cup” 的属性。我们的经验是, coarse-to-fine 网络可以学习他们的对应关系,尽管它们不是 attribute-object 对。
我们使用从 CNN 提取的图像特征作为语言模型的输入。对于解码器部分,我们的 coarse-to-fine 模型由两个 LSTM 子模型组成:一个用于生成骨架句子,另一个用于生成属性词。我们将这两个子模型分别表示为 Skel-LSTM 和 Attr-LSTM 。
Skel-LSTM:
Skel-LSTM 预测给定图像特征的骨架句子。对于 Skel-LSTM ,我们采用基于软注意的 LSTM 。
我们将位置 (i,j) ∈ \in ∈L×L 处的图像特征表示为 vi,j ∈ \in ∈RD 。归一化权重 αij,t 表示 t 时刻的注意力,它由先前的隐藏状态 ht-1 为条件的多层感知器计算得到:
然后,在 t 时刻的上下文向量 zt 计算为:
然后将上下文向量馈送到当前时间步长的 LSTM 单元以预测下一个单词。
与传统方法不同的是,在我们的模型中,注意力 αij,t 不仅用于预测当前的骨架词,还用于指导接下来的属性词预测,我们从 Skel-LSTM 获得的注意力信息可以在 Attr-LSTM 中重复使用,以指导在哪里关注。因为骨干句子中的目标词和该词的属性词是在同一个关注区域的。
Attr-LSTM:
生成骨架句子后, Attr-LSTM 预测每个骨架词的属性序列。 Attr-LSTM 不是针对一个对象分别预测多个属性词,而是可以从整体上预测属性序列,自然会关注到属性词的顺序。
之前方法中 LSTM 的原始输入序列为:
在我们的 coarse-to-fine 框架中,属性生成以它所描述的骨骼词为条件,同时也考虑骨架句子的上下文向量。通过实验分析,发现将当前时间步长的 Skel-LSTM 的隐藏状态输入 Attr-LSTM 会产生最佳结果。
在第一个时间步 Attr-LSTM 的输入为:
其中,T 是当前骨架词的时间步长;zt ∈ \in ∈RD 是注意力机制的上下文向量;sTskel ∈ \in ∈Rms 是 T 时刻的骨架词的嵌入;hTskel ∈ \in ∈Rns 是 Skel-LSTM 的隐藏状态。 Attr-LSTM 的剩余输入与上面传统的 LSTM 相同。
在训练阶段,将真实的骨架句子输入 Skel-LSTM 中,而 sTskel 是真实的骨架词嵌入;在测试阶段,sTskel 是预测得到的骨架词的嵌入。
Attention refinement for attribute prediction:
我们可以细化 Skel-LSTM 中获取的注意力,以更好地定位骨架词,从而提高属性词的预测。注意力 α \alpha α 是在预测单词之前生成的。它可以覆盖多个对象,甚至可以位于与预测单词不同的位置。因此,对当前词预测后的注意力向量进行细化,可以为属性词的预测提供更准确的指导。
在时间步 T 处的 LSTM 单元输出单词概率预测为 Pattend=(p1,p2,…,pQ) ,其中 Q 是 Skel-LSTM 中的词汇量大小。除了上下文向量 zT 之外,我们还可以将每个位置中的特征向量 vij 用作 Skel-LSTM 的输入。因此对于每个L2位置,我们可以得到单词预测的概率 Pij 。我们可以使用空间词概率来细化注意力权重 α \alpha α :
其中, Z 是归一化因子,使得 α \alpha αpost(ij) 的和为1。图中说明了注意力细化的过程。
Fusion of Skeleton-Attributes:
在所有的骨架词对应的属性词被预测后,属性词被合并到在相应的骨架词之前,并形成最终的描述。
大多数时候,我们会学习到噪声,噪音来自识别不正确的名词短语,以及带有一个或几个缺失对象的简短骨架句子。因此,这会导致 Skel-LSTM 中的骨架句子预测更短,从而最终导致整个句子的预测更短。
为了克服这个问题,我们设计了一个简单而有效的技巧来改变生成的句子的长度。在不修改网络的情况下,在 Skel-LSTM 或 Attr-LSTM 的推理阶段,我们使用长度因子修改句子概率:
其中 ,P 是生成句子的概率,而 P^ 是修改句子的概率。l 是生成的句子的长度。 γ \gamma γ 是鼓励或阻止句子长度的因子。注意,修改是在每个单词的生成期间执行的,而不是在生成整个句子之后执行的。相当于从单词概率分布中采样下一个单词时,除了句末标志 EOS 之外,每个单词对数概率都增加了 γ \gamma γ 。
我们的 coarse-to-fine 算法尤其受益于这种机制,因为它可以应用于 Skel-LSTM 或 Attr-LSTM ,从而在任何一个对象或这些对象的描述中产生不同的信息。这使我们能够根据用户对句子的复杂性和句子中的信息量的偏好来生成描述。