【论文笔记】Contrastive Learning for Sign Language Recognition and Translation

基本信息

标题: Contrastive Learning for Sign Language Recognition and Translation
作者: Shiwei Gan, Yafeng Yin, Zhiwei Jiang, K. Xia, Linfu Xie, Sanglu Lu
发表: IJCAI 2023

基本信息

摘要

当前端到端手语处理架构中广泛存在两个问题。一个是 CTC 尖峰 现象,这削弱了连续手语识别(CSLR)中的视觉表征能力。另一个是 暴露偏差 问题,这导致在手语翻译(SLT)推理过程中翻译错误的累积。

在这篇论文中,我们通过引入对比学习来解决这些问题,旨在增强视觉级特征表示和语义级错误容忍度。

具体来说,为了缓解 CTC 尖峰现象并增强视觉级表示,我们设计了一种视觉对比损失,通过最小化同一手语视频中不同增强样本帧之间的视觉特征距离,从而使模型能够进一步探索特征,利用大量未标记的帧以无监督的方式。

为了缓解暴露偏差问题并提高语义级错误容忍度,我们设计了一种语义对比损失,通过将预测的句子重新输入到语义模块,并比较真实序列和预测序列的特征,使模型暴露于自身的错误中。

此外,我们提出了两种新的指标,即空白率和连续错误词率,直接反映我们在两个问题上的改进。在当前手语数据集上的广泛实验结果证明了我们方法的有效性,该方法达到了最先进的性能。

主要贡献

  • 为了缓解 CSLR 中的 CTC 尖峰现象并增强视觉级特征表示,我们提出了一种视觉对比损失,通过利用大量未标记的帧来探索特征。
  • 为了缓解 SLT 中的暴露偏差问题并提高语义级错误容忍度,我们提出了一种语义对比损失,通过将预测序列重新输入到语义模块中,使模型暴露于自身的翻译错误。
  • 提出了两种新的指标,即空白率和连续错误词率,以反映我们在两个问题上的改进。
  • 广泛的实验表明,所提出的损失函数和框架在 CSLR 和 SLT 上达到了最先进的性能。

方法

在这一节中,我们首先概述了我们的框架。然后,我们简单地描述了 CSLR 中的 CTC 尖峰现象,并提出了一种增强视觉表示的可视对比损失。

接着,我们描述了 SLT 中的暴露偏差问题,并提出了一种增强语义层错误容忍度的语义对比损失。最后,我们设计了联合损失,以训练我们的模型同时适用于 CSLR 和 SLT。

总体框架

对于一个包含nn 帧的手语视频f={fi}i=1nf=\{f_i\}_{i=1}^n,CSLR 的目标是学习从ffg={gi}i=1ϑg=\{g_i\}_{i=1}^\vartheta 的映射,其中gg 包含ϑ\vartheta 个手语符号,而 SLT 的目标是将ff 翻译成包含tt 个单词的口语句子w={wi}i=1tw=\{w_i\}_{i=1}^t

Framework of common end-to-end CSLR and SLT model

如图 1 所示,CSLR 和 SLT 的过程可以简化如下。

视觉特征提取

视觉模块VE\mathcal{VE} 处理帧以获得视觉特征v=VE(f)v=\mathcal{VE}(f),其中vv 包含mm 个向量,v={viRdv}i=1mv=\{v_i \in \mathbb{R}^{d_v}\}_{i=1}^mmnm \leq n),dvd_vviv_i 的维度。

时间特征提取

时间模块TE\mathcal{TE}vv 中提取全局上下文信息以获得u=TE(v)u=\mathcal{TE}(v),其中u={uiRdt}i=1mu=\{u_i \in \mathbb{R}^{d_t}\}_{i=1}^mdtd_tuiu_i 的维度。

识别和翻译

对于 CSLR,添加了一个全连接层,权重为WrW_r 和偏差brb_r,以及一个 softmax 层SMSM,以获得识别的手语序列的最终概率矩阵:R=SM(Wru+br)R = SM(W_r *u + b_r)

对于SLT,需要一个 RNN-like 或 transformer 解码器SESE,以获得第ii 步的翻译概率矩阵:Yi=SM(WySE(u,{yj}j=0i1)+by)Y_i = SM(W_y*\mathcal{SE}(u, \{y_j\}_{j=0}^{i-1}) + b_y) 中,WyW_ybyb_y 是语义模块中全连接层的权重和偏差。

视觉级对比学习用于 CTC 尖峰现象

CTC 尖峰现象

在 CSLR 中,CTC 损失通过最大化所有可能路径的概率来解决未分段手语视频的时间分类问题,这些路径将帧与标记的 gloss 序列gg 在概率矩阵R\mathbf{R} 中对齐。

理想情况下,有必要为每一帧标注一个特定的类别。然而,考虑到无意义的帧和连续出现的相同 gloss,CTC 引入了 blank token,并进一步定义了一个多对一映射B\mathcal{B},该映射简单地从路径中删除所有重复的 token 和 blank(例如,在图 2 中,B(PathB)=B(aaa)=aa\mathcal{B}(PathB) = \mathcal{B}(a-aa-) = aa)。因此,CTC损失可以形式化如下:

LCTC(R,g)=πB1(g)log(p(π))\mathcal{L}_{CTC}(\mathbf{R}, g) = -\sum_{\pi \in \mathcal{B}^{-1}(g)} \log(p(\pi))

其中p(π)=i=1mRiπip(\pi) = \prod_{i=1}^{m} \mathbf{R}_i^{\pi_i}π\pi 表示一个对齐路径(即,B(π)=g\mathcal{B}(\pi) = g),而Riπi\mathbf{R}_i^{\pi_i} 是第ii 个 tokenπi\pi_i 的概率。

Illustration of CTC loss. ‘-’ denotes blank token

然而,CTC 损失会导致尖峰现象。如图 2 所示,当模型无法自信地区分手势边界时,它倾向于将帧分类为 blank token,因为预测 blank token 是减少损失LCTC\mathcal{L}_{CTC} 的更安全选择。例如,B(PathA)=B(aaabb)=ab\mathcal{B}(PathA) = \mathcal{B}(aaabb) = abB(PathC)=B(ab)=ab\mathcal{B}(PathC) = \mathcal{B}(-a--b) = ab 都是标签序列 ‘ab’ 的正确路径,而 CTC 偏好 PathC 而不是 PathA ,这导致只有少数帧对最终结果有贡献。由于在训练过程中大多数帧被分类为 blank token,视觉模块没有得到充分训练,无法在测试集上提供有效的手语特征。

视觉级的对比学习

为了应对尖峰现象,我们的直观想法是通过使用更多数据训练视觉模块来增强视觉表示能力。

然而,与图像分类任务(ResNet 使用的 128 万张标记图像)或 NLP 任务(Transformer 使用的 450 万句对)不同,当前手语任务中的数据对(视频-手势对或视频-句子对)相当有限,通过手动标记每一帧来增加样本以单独训练视觉模块是不现实的。

但是,手语视频提供的未标记帧是丰富的,例如,Phoenix14 训练集中的 5672 个样本提供了 963,664 帧,Phoenix14T 训练集中的 7096 个样本提供了 827,354 帧。

因此,我们引入了视觉级的对比学习,通过比较同一手势视频的不同增强视图的视觉特征,使得视觉模块能够以无监督的方式进一步探索大量未标记帧中的特征。

为了构建视觉对比损失,我们首先需要从包含nn 个未标记帧的手势视频f={fi}i=1nf=\{f_i\}^n_{i=1} 生成两个增强视频。

Visual-level contrastive learning (‘Aug’: augmentation)

如图 3 所示,我们引入两种不同的增强:软增强SA\mathcal{SA} 和硬增强HA\mathcal{HA},以获得增强视频fsf^sfhf^h

fs=SA(f),fh=HA(f)f^s = \mathcal{SA}(f), \quad f^h = \mathcal{HA}(f)

然后,视觉模块VE\mathcal{VE} 将两个增强视频映射到帧级别的视觉特征向量vs={vis}i=1mv^s=\{v_i^s\}^m_{i=1}vh={vih}im=1v^h=\{v_i^h\}^m_i=1,如下所示。

vs=VE(fs),vh=VE(fh)v^s = \mathcal{VE}(f^s), \quad v^h = \mathcal{VE}(f^h)

接下来,如图 3 所示,一个投影 MLP 头PROvi\mathcal{PRO}_{vi} 和一个预测 MLP 头PREvi\mathcal{PRE}_{vi} 被附加到将视觉特征映射到应用对比损失的空间。

zs=PROvi(vs),zh=PROvi(vh)z^s = \mathcal{PRO}_{vi}(v^s), \quad z^h = \mathcal{PRO}_{vi}(v^h)

ps=PREvi(zs)p^s = \mathcal{PRE}_{vi}(z^s)

在得到psp^szhz^h 后,我们的相似性函数S\mathcal{S} 计算每个psp^szhz^h 在帧级别的负余弦相似性,如下所示。这里,2||\cdot||_22ℓ_2 范数。

S(pis,zih)=pispis2zihzih2\mathcal{S}(p_i^s, z_i^h) = -\frac{p_i^s}{||p_i^s||_2} \cdot \frac{z_i^h}{||z_i^h||_2}

当使用S\mathcal{S} 计算psp^szhz^h 的相似性时,我们可以得到所有帧的平均损失,如下所示。

S(ps,zh)=1mi=1mS(pis,zih)\mathcal{S}(p^s, z^h) = \frac{1}{m} \sum_{i=1}^{m} \mathcal{S}(p_i^s, z_i^h)

最后,遵循 SimSiam,我们进一步以对称方式获得ph=PREvi(zh)p^h=\mathcal{PRE}_{vi}(z^h),并定义对称化的视觉对比损失LViCo\mathcal{L}_{ViCo} 如下,

LViCo=S(ps,detach(zh))+S(ph,detach(zs))2\mathcal{L}_{ViCo} = \frac{\mathcal{S}(p^s, detach(z^h)) + \mathcal{S}(p^h, detach(z^s))}{2}

其中detach()detach(\cdot) 函数表示停止梯度操作,这意味着zhz^hzsz^s 被视为常量而不是具有梯度的变量。

语义级对比学习以解决暴露偏差

暴露偏差

在 SLT 中,seq2seq 架构(更精确地说是自回归架构)通常通过最大似然估计(MLE)进行训练。

The difference between MLE-based training and inference

如图 4 所示,以 RNN 类解码器为例,基于 MLE 的训练通过最大化下一个词yiy_i 基于其前一个真实词wi1w_{i-1}(称为 teacher forcing)的概率来进行优化,如下所示。

这里,θ\theta 表示模型参数,θ\theta^* 表示更新后的参数,hi1h_{i-1} 是语义模块的第(i1)(i-1) 个隐藏状态,uu 表示时间特征。

θ=arg maxθi=1tPθ(yiwi1,hi1,u)\theta^* = \argmax_\theta \prod_{i=1}^{t} P_\theta(y_i | w_{i-1}, h_{i-1}, u)

而在推理阶段,模型需要根据自身生成的前缀词yi1y_{i-1} 来预测YiyiY_i^{y_i}(即词yiy_i 的概率)。

Yiyi=Pθ(yiyi1,hi1,u)Y_i^{y_i} = P_{\theta^*}(y_i | y_{i-1}, h_{i-1}, u)

由于在训练过程中接触到了真实数据,模型可能会过度依赖正确的前缀词。而在推理过程中,错误预测的词yi1y_{i-1} 可能会加剧沿生成序列的误差传播,模型生成的目标概率分布将逐渐扭曲(称为暴露偏差)。暴露偏差会导致性能显著下降,尤其是在训练样本的序列分布不足以覆盖测试样本的序列分布时。

语义级对比学习

为了解决暴露偏差问题,最直接的解决方案是计划采样。计划采样在训练过程中决定是否以概率αα 使用真实词wi1w_{i-1} 或预测词yi1y_{i-1}。通过这种方式,模型可以通过暴露其自身的错误来削弱对真实词的依赖。

然而,直接将计划采样应用于 Transformer 模型并不简单,因为与 RNN 类解码器不同,Transformer 基于整个前缀序列{yj}j=0i1\{y_j\}_{j=0}^{i-1} 而不是最后一个词yi1y_{i-1} 生成第ii 个词。

此外,计划采样训练是一个随时间进行的顺序过程,因此阻碍了并行训练。

在这篇论文中,遵循让模型暴露自身错误的相同理念,我们通过比较语义模块(即解码器模块)中不同输入(真实序列输入和预测序列输入)的语义特征来引入语义级对比学习,以减轻暴露偏差。

与计划采样相比,我们的方法可以用于 RNN 类解码器和 Transformer 解码器,并且可以轻松并行训练。

为了构建语义对比损失,我们首先需要基于真实句子ww 获得翻译句子yy。具体来说,对于时间特征u={ui}i=1mu=\{u_i\}_{i=1}^m,语义模块SE\mathcal{SE}uuww 作为输入以获得语义特征(即隐藏状态)hwh^w

hw=SE(u,w)h^w = \mathcal{SE}(u, w)

然后,采用全连接层和 softmax 函数SM\mathcal{SM} 来获得翻译句子的可能性矩阵Y\mathbf{Y},并通过 argmax 操作进一步获得翻译句子yy

Y=SM(Wyhw+by)\mathbf{Y} = \mathcal{SM}(W_y * h^w + b_y)

y=argmax(Y)y = \text{argmax}(\mathbf{Y})

Semantic-level Contrastive (SeCo) learning for tackling exposure bias by re-inputting predicted sequence

之后,如图 5 所示,我们将预测的句子yy 重新输入到语义模块中以获得另一个语义特征hyh^y,如下所示。这里,重新输入预测序列yy 可以被视为重新输入增强的真实词ww,也可以被视为一种计划采样的形式。

hy=SE(u,y)h^y = \mathcal{SE}(u, y)

接下来,类似于图 3 中的视觉模块,添加了一个投影 MLP 头PROse\mathcal{PRO}_{se} 和一个预测 MLP 头PREse\mathcal{PRE}_{se} 以获得ρw\rho^wξw\xi^w。此外,采用了相似性函数S\mathcal{S} 来计算ρw\rho^wξg\xi^g 之间的距离,

ρw=PROse(hw),ρy=PROse(hy)\rho^w = \mathcal{PRO}_{se}(h^w), \quad \rho^y = \mathcal{PRO}_{se}(h^y)

ξw=PREse(ρw)\xi^w = \mathcal{PRE}_{se}(\rho^w)

最后,我们也得到ξy=PREse(ρy)\xi^y = \mathcal{PRE}_{se}(\rho^y),并定义对称化的语义对比损失LSeCo\mathcal{L}_{SeCo} 如下,

LSeCo=S(ξw,detach(ρy))+S(ξy,detach(ρw))2\mathcal{L}_{SeCo} = \frac{\mathcal{S}(\xi^w, \text{detach}(\rho^y)) + \mathcal{S}(\xi^y, \text{detach}(\rho^w))}{2}

CSLR 和 SLT 的联合损失

为了使用提议的对比损失优化我们的模型,我们需要基于不同的输入两次推断我们的模型MO\mathcal{MO}。一种包含软增强视频fsf_s 和标记的词序列ww。另一种包含硬增强视频fhf^h 和预测的词序列yy,其中y=argmax(Y)y = \arg\max(\mathbf{Y})

R,Y,(ps,zs),(ρw,ξw)=MO(fs,w)\mathbf{R}, \mathbf{Y}, (p^s, z^s), (\rho^w, \xi^w) = \mathcal{MO}(f^s, w)

R,Y,(ph,zh),(ρy,ξy)=MO(fh,y)\mathbf{R}', \mathbf{Y}', (p^h, z^h), (\rho^y, \xi^y) = \mathcal{MO}(f^h, y)

在获得(ps,zs,ph,zh),(ξw,ρw,ρy,ξy)(p^s, z^s, p^h, z^h), (\xi^w, \rho^w, \rho^y, \xi^y) 后,我们可以分别计算对比损失LViCo,LSeCo\mathcal{L}_{ViCo}, \mathcal{L}_{SeCo}。同时,我们得到两个识别概率矩阵R,R\mathbf{R}, \mathbf{R}' 和两个翻译概率矩阵Y,Y\mathbf{Y}, \mathbf{Y}'。为了实现 CSLR 和 SLT 的联合目标,我们采用 CTC 损失LCTC\mathcal{L}_{CTC} 和交叉熵损失LCE\mathcal{L}_{CE} 来训练我们的模型,如下所示,

Lsoft=LCTC(R,g)+LCE(Y,w)\mathcal{L}_{soft} = \mathcal{L}_{CTC}(\mathbf{R}, g) + \mathcal{L}_{CE}(\mathbf{Y}, w)

Lhard=LCTC(R,g)+LCE(Y,w)\mathcal{L}_{hard} = \mathcal{L}_{CTC}(\mathbf{R}', g) + \mathcal{L}_{CE}(\mathbf{Y}', w)

最后,我们得到带有平衡权重α\alpha 的联合损失L\mathcal{L},其中α\alpha 是一个超参数,如下所示,

L=Lsoft+Lhard+α(LViCo+LSeCo)\mathcal{L} = \mathcal{L}_{soft} + \mathcal{L}_{hard} + \alpha (\mathcal{L}_{ViCo} + \mathcal{L}_{SeCo})

实验

空白率和连续错误词率

为了验证我们的方法是否能够有效处理 CTC 尖峰现象和暴露偏差问题,我们提出了两个新的指标:空白率(BRBR)和连续错误词率(CWWRCWWR)。

BRBR 是一个直接反映尖峰现象严重程度的指标,可以表示为以下形式:

BR=#Blank#TotalRBR = \frac{\#Blank}{\#TotalR}

其中#Blank\#Blank 表示识别序列中 blank token 的数量,而#TotalR\#TotalR 表示识别序列中所有 token 的总数。

CWWRCWWR 是一个直接反映模型在翻译中依赖先前预测词汇程度的指标,可以表示为以下公式:

CWWR=#CW#TotalTCWWR = \frac{\sum \#CW}{\#TotalT}

其中#CW\#CW 表示连续错误单词的数量,而#TotalT\#TotalT 表示翻译序列中单词的总数。

An example of BR, CWWR calculation.“***” denotes wrong predicted token and “-” denotes blank token

主实验

Comparison with of SLT performance on Phoenix14T (F: face, M: mouth, H: hands, S: skeleton, P: pretraining on other datasets)

Comparison of SLT performance on CSL-daily dataset

Comparison of CSLR performance on Phoenix14T dataset

Comparison of CSLR performance on CSL-daily dataset

Comparison of CSLR performance on Phoenix14 dataset

消融实验

Effects of beam width about recognition and translation performance on Phoenix14T dev set

Effects of different weights α on Phoenix14T dev set

Comparison of different training strategies

Ablation study on Phoenix14T dev set

Effects of different masking rates

Effects of different padding rates

Qualitative analysis on Phoenix14T test set

总结

在这篇论文中,我们引入对比学习来解决手语任务中广泛存在的两个问题:连续手语识别(CSLR)任务中的 CTC 尖峰现象和手语翻译(SLT)任务中的暴露偏差。

具体来说,为了解决 CTC 尖峰现象,我们设计了一种视觉对比损失,通过从大量未标记的帧中学习特征来增强视觉模块。

为了解决暴露偏差问题,我们设计了一种语义对比损失,通过让模型暴露在自己的错误中来增强语义模块。

此外,我们提出了两种新的指标,即空白率(Blank Rate)和连续错误词率(Consecutive Wrong Word Rate),以直接反映我们在两个问题上的改进。

在公共手语数据集上的实验结果证明了我们方法的有效性。