学习笔记 论文笔记 手语翻译 【论文笔记】Contrastive Learning for Sign Language Recognition and Translation 小嗷犬 2024-12-29 2024-12-29 基本信息 标题 : 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。
总体框架 对于一个包含n n n 帧的手语视频f = { f i } i = 1 n f=\{f_i\}_{i=1}^n f = { f i } i = 1 n ,CSLR 的目标是学习从f f f 到g = { g i } i = 1 ϑ g=\{g_i\}_{i=1}^\vartheta g = { g i } i = 1 ϑ 的映射,其中g g g 包含ϑ \vartheta ϑ 个手语符号,而 SLT 的目标是将f f f 翻译成包含t t t 个单词的口语句子w = { w i } i = 1 t w=\{w_i\}_{i=1}^t w = { w i } i = 1 t 。
如图 1 所示,CSLR 和 SLT 的过程可以简化如下。
视觉特征提取 视觉模块V E \mathcal{VE} V E 处理帧以获得视觉特征v = V E ( f ) v=\mathcal{VE}(f) v = V E ( f ) ,其中v v v 包含m m m 个向量,v = { v i ∈ R d v } i = 1 m v=\{v_i \in \mathbb{R}^{d_v}\}_{i=1}^m v = { v i ∈ R d v } i = 1 m (m ≤ n m \leq n m ≤ n ),d v d_v d v 是v i v_i v i 的维度。
时间特征提取 时间模块T E \mathcal{TE} T E 从v v v 中提取全局上下文信息以获得u = T E ( v ) u=\mathcal{TE}(v) u = T E ( v ) ,其中u = { u i ∈ R d t } i = 1 m u=\{u_i \in \mathbb{R}^{d_t}\}_{i=1}^m u = { u i ∈ R d t } i = 1 m ,d t d_t d t 是u i u_i u i 的维度。
识别和翻译 对于 CSLR,添加了一个全连接层,权重为W r W_r W r 和偏差b r b_r b r ,以及一个 softmax 层S M SM SM ,以获得识别的手语序列的最终概率矩阵:R = S M ( W r ∗ u + b r ) R = SM(W_r *u + b_r) R = SM ( W r ∗ u + b r ) 。
对于SLT,需要一个 RNN-like 或 transformer 解码器S E SE SE ,以获得第i i i 步的翻译概率矩阵:Y i = S M ( W y ∗ S E ( u , { y j } j = 0 i − 1 ) + b y ) Y_i = SM(W_y*\mathcal{SE}(u, \{y_j\}_{j=0}^{i-1}) + b_y) Y i = SM ( W y ∗ S E ( u , { y j } j = 0 i − 1 ) + b y ) 中,W y W_y W y 和b y b_y b y 是语义模块中全连接层的权重和偏差。
视觉级对比学习用于 CTC 尖峰现象 CTC 尖峰现象 在 CSLR 中,CTC 损失通过最大化所有可能路径的概率来解决未分段手语视频的时间分类问题,这些路径将帧与标记的 gloss 序列g g g 在概率矩阵R \mathbf{R} R 中对齐。
理想情况下,有必要为每一帧标注一个特定的类别。然而,考虑到无意义的帧和连续出现的相同 gloss,CTC 引入了 blank
token,并进一步定义了一个多对一映射B \mathcal{B} B ,该映射简单地从路径中删除所有重复的 token 和 blank
(例如,在图 2 中,B ( P a t h B ) = B ( a − a a − ) = a a \mathcal{B}(PathB) = \mathcal{B}(a-aa-) = aa B ( P a t h B ) = B ( a − aa − ) = aa )。因此,CTC损失可以形式化如下:
L C T C ( R , g ) = − ∑ π ∈ B − 1 ( g ) log ( p ( π ) ) \mathcal{L}_{CTC}(\mathbf{R}, g) = -\sum_{\pi \in \mathcal{B}^{-1}(g)} \log(p(\pi)) L CTC ( R , g ) = − π ∈ B − 1 ( g ) ∑ log ( p ( π ))
其中p ( π ) = ∏ i = 1 m R i π i p(\pi) = \prod_{i=1}^{m} \mathbf{R}_i^{\pi_i} p ( π ) = ∏ i = 1 m R i π i ,π \pi π 表示一个对齐路径(即,B ( π ) = g \mathcal{B}(\pi) = g B ( π ) = g ),而R i π i \mathbf{R}_i^{\pi_i} R i π i 是第i i i 个 tokenπ i \pi_i π i 的概率。
然而,CTC 损失会导致尖峰现象。如图 2 所示,当模型无法自信地区分手势边界时,它倾向于将帧分类为 blank
token,因为预测 blank
token 是减少损失L C T C \mathcal{L}_{CTC} L CTC 的更安全选择。例如,B ( P a t h A ) = B ( a a a b b ) = a b \mathcal{B}(PathA) = \mathcal{B}(aaabb) = ab B ( P a t h A ) = B ( aaabb ) = ab 和B ( P a t h C ) = B ( − a − − b ) = a b \mathcal{B}(PathC) = \mathcal{B}(-a--b) = ab B ( P a t h C ) = B ( − a − − b ) = ab 都是标签序列 ‘ab’ 的正确路径,而 CTC 偏好 PathC 而不是 PathA ,这导致只有少数帧对最终结果有贡献。由于在训练过程中大多数帧被分类为 blank
token,视觉模块没有得到充分训练,无法在测试集上提供有效的手语特征。
视觉级的对比学习 为了应对尖峰现象,我们的直观想法是通过使用更多数据训练视觉模块来增强视觉表示能力。
然而,与图像分类任务(ResNet 使用的 128 万张标记图像)或 NLP 任务(Transformer 使用的 450 万句对)不同,当前手语任务中的数据对(视频-手势对或视频-句子对)相当有限,通过手动标记每一帧来增加样本以单独训练视觉模块是不现实的。
但是,手语视频提供的未标记帧是丰富的,例如,Phoenix14 训练集中的 5672 个样本提供了 963,664 帧,Phoenix14T 训练集中的 7096 个样本提供了 827,354 帧。
因此,我们引入了视觉级的对比学习,通过比较同一手势视频的不同增强视图的视觉特征,使得视觉模块能够以无监督的方式进一步探索大量未标记帧中的特征。
为了构建视觉对比损失,我们首先需要从包含n n n 个未标记帧的手势视频f = { f i } i = 1 n f=\{f_i\}^n_{i=1} f = { f i } i = 1 n 生成两个增强视频。
如图 3 所示,我们引入两种不同的增强:软增强S A \mathcal{SA} S A 和硬增强H A \mathcal{HA} H A ,以获得增强视频f s f^s f s 和f h f^h f h ,
f s = S A ( f ) , f h = H A ( f ) f^s = \mathcal{SA}(f), \quad f^h = \mathcal{HA}(f) f s = S A ( f ) , f h = H A ( f )
然后,视觉模块V E \mathcal{VE} V E 将两个增强视频映射到帧级别的视觉特征向量v s = { v i s } i = 1 m v^s=\{v_i^s\}^m_{i=1} v s = { v i s } i = 1 m 和v h = { v i h } i m = 1 v^h=\{v_i^h\}^m_i=1 v h = { v i h } i m = 1 ,如下所示。
v s = V E ( f s ) , v h = V E ( f h ) v^s = \mathcal{VE}(f^s), \quad v^h = \mathcal{VE}(f^h) v s = V E ( f s ) , v h = V E ( f h )
接下来,如图 3 所示,一个投影 MLP 头P R O v i \mathcal{PRO}_{vi} PR O v i 和一个预测 MLP 头P R E v i \mathcal{PRE}_{vi} PR E v i 被附加到将视觉特征映射到应用对比损失的空间。
z s = P R O v i ( v s ) , z h = P R O v i ( v h ) z^s = \mathcal{PRO}_{vi}(v^s), \quad z^h = \mathcal{PRO}_{vi}(v^h) z s = PR O v i ( v s ) , z h = PR O v i ( v h )
p s = P R E v i ( z s ) p^s = \mathcal{PRE}_{vi}(z^s) p s = PR E v i ( z s )
在得到p s p^s p s 和z h z^h z h 后,我们的相似性函数S \mathcal{S} S 计算每个p s p^s p s 和z h z^h z h 在帧级别的负余弦相似性,如下所示。这里,∣ ∣ ⋅ ∣ ∣ 2 ||\cdot||_2 ∣∣ ⋅ ∣ ∣ 2 是ℓ 2 ℓ_2 ℓ 2 范数。
S ( p i s , z i h ) = − p i s ∣ ∣ p i s ∣ ∣ 2 ⋅ z i h ∣ ∣ z i h ∣ ∣ 2 \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 ( p i s , z i h ) = − ∣∣ p i s ∣ ∣ 2 p i s ⋅ ∣∣ z i h ∣ ∣ 2 z i h
当使用S \mathcal{S} S 计算p s p^s p s 和z h z^h z h 的相似性时,我们可以得到所有帧的平均损失,如下所示。
S ( p s , z h ) = 1 m ∑ i = 1 m S ( p i s , z i h ) \mathcal{S}(p^s, z^h) = \frac{1}{m} \sum_{i=1}^{m} \mathcal{S}(p_i^s, z_i^h) S ( p s , z h ) = m 1 i = 1 ∑ m S ( p i s , z i h )
最后,遵循 SimSiam,我们进一步以对称方式获得p h = P R E v i ( z h ) p^h=\mathcal{PRE}_{vi}(z^h) p h = PR E v i ( z h ) ,并定义对称化的视觉对比损失L V i C o \mathcal{L}_{ViCo} L Vi C o 如下,
L V i C o = S ( p s , d e t a c h ( z h ) ) + S ( p h , d e t a c h ( z s ) ) 2 \mathcal{L}_{ViCo} = \frac{\mathcal{S}(p^s, detach(z^h)) + \mathcal{S}(p^h, detach(z^s))}{2} L Vi C o = 2 S ( p s , d e t a c h ( z h )) + S ( p h , d e t a c h ( z s ))
其中d e t a c h ( ⋅ ) detach(\cdot) d e t a c h ( ⋅ ) 函数表示停止梯度操作,这意味着z h z^h z h 和z s z^s z s 被视为常量而不是具有梯度的变量。
语义级对比学习以解决暴露偏差 暴露偏差 在 SLT 中,seq2seq 架构(更精确地说是自回归架构)通常通过最大似然估计(MLE)进行训练。
如图 4 所示,以 RNN 类解码器为例,基于 MLE 的训练通过最大化下一个词y i y_i y i 基于其前一个真实词w i − 1 w_{i-1} w i − 1 (称为 teacher forcing)的概率来进行优化,如下所示。
这里,θ \theta θ 表示模型参数,θ ∗ \theta^* θ ∗ 表示更新后的参数,h i − 1 h_{i-1} h i − 1 是语义模块的第( i − 1 ) (i-1) ( i − 1 ) 个隐藏状态,u u u 表示时间特征。
θ ∗ = arg max θ ∏ i = 1 t P θ ( y i ∣ w i − 1 , h i − 1 , u ) \theta^* = \argmax_\theta \prod_{i=1}^{t} P_\theta(y_i | w_{i-1}, h_{i-1}, u) θ ∗ = θ arg max i = 1 ∏ t P θ ( y i ∣ w i − 1 , h i − 1 , u )
而在推理阶段,模型需要根据自身生成的前缀词y i − 1 y_{i-1} y i − 1 来预测Y i y i Y_i^{y_i} Y i y i (即词y i y_i y i 的概率)。
Y i y i = P θ ∗ ( y i ∣ y i − 1 , h i − 1 , u ) Y_i^{y_i} = P_{\theta^*}(y_i | y_{i-1}, h_{i-1}, u) Y i y i = P θ ∗ ( y i ∣ y i − 1 , h i − 1 , u )
由于在训练过程中接触到了真实数据,模型可能会过度依赖正确的前缀词。而在推理过程中,错误预测的词y i − 1 y_{i-1} y i − 1 可能会加剧沿生成序列的误差传播,模型生成的目标概率分布将逐渐扭曲(称为暴露偏差)。暴露偏差会导致性能显著下降,尤其是在训练样本的序列分布不足以覆盖测试样本的序列分布时。
语义级对比学习 为了解决暴露偏差问题,最直接的解决方案是计划采样。计划采样在训练过程中决定是否以概率α α α 使用真实词w i − 1 w_{i-1} w i − 1 或预测词y i − 1 y_{i-1} y i − 1 。通过这种方式,模型可以通过暴露其自身的错误来削弱对真实词的依赖。
然而,直接将计划采样应用于 Transformer 模型并不简单,因为与 RNN 类解码器不同,Transformer 基于整个前缀序列{ y j } j = 0 i − 1 \{y_j\}_{j=0}^{i-1} { y j } j = 0 i − 1 而不是最后一个词y i − 1 y_{i-1} y i − 1 生成第i i i 个词。
此外,计划采样训练是一个随时间进行的顺序过程,因此阻碍了并行训练。
在这篇论文中,遵循让模型暴露自身错误的相同理念,我们通过比较语义模块(即解码器模块)中不同输入(真实序列输入和预测序列输入)的语义特征来引入语义级对比学习,以减轻暴露偏差。
与计划采样相比,我们的方法可以用于 RNN 类解码器和 Transformer 解码器,并且可以轻松并行训练。
为了构建语义对比损失,我们首先需要基于真实句子w w w 获得翻译句子y y y 。具体来说,对于时间特征u = { u i } i = 1 m u=\{u_i\}_{i=1}^m u = { u i } i = 1 m ,语义模块S E \mathcal{SE} S E 将u u u 和w w w 作为输入以获得语义特征(即隐藏状态)h w h^w h w ,
h w = S E ( u , w ) h^w = \mathcal{SE}(u, w) h w = S E ( u , w )
然后,采用全连接层和 softmax 函数S M \mathcal{SM} SM 来获得翻译句子的可能性矩阵Y \mathbf{Y} Y ,并通过 argmax 操作进一步获得翻译句子y y y ,
Y = S M ( W y ∗ h w + b y ) \mathbf{Y} = \mathcal{SM}(W_y * h^w + b_y) Y = SM ( W y ∗ h w + b y )
y = argmax ( Y ) y = \text{argmax}(\mathbf{Y}) y = argmax ( Y )
之后,如图 5 所示,我们将预测的句子y y y 重新输入到语义模块中以获得另一个语义特征h y h^y h y ,如下所示。这里,重新输入预测序列y y y 可以被视为重新输入增强的真实词w w w ,也可以被视为一种计划采样的形式。
h y = S E ( u , y ) h^y = \mathcal{SE}(u, y) h y = S E ( u , y )
接下来,类似于图 3 中的视觉模块,添加了一个投影 MLP 头P R O s e \mathcal{PRO}_{se} PR O se 和一个预测 MLP 头P R E s e \mathcal{PRE}_{se} PR E se 以获得ρ w \rho^w ρ w 和ξ w \xi^w ξ w 。此外,采用了相似性函数S \mathcal{S} S 来计算ρ w \rho^w ρ w 和ξ g \xi^g ξ g 之间的距离,
ρ w = P R O s e ( h w ) , ρ y = P R O s e ( h y ) \rho^w = \mathcal{PRO}_{se}(h^w), \quad \rho^y = \mathcal{PRO}_{se}(h^y) ρ w = PR O se ( h w ) , ρ y = PR O se ( h y )
ξ w = P R E s e ( ρ w ) \xi^w = \mathcal{PRE}_{se}(\rho^w) ξ w = PR E se ( ρ w )
最后,我们也得到ξ y = P R E s e ( ρ y ) \xi^y = \mathcal{PRE}_{se}(\rho^y) ξ y = PR E se ( ρ y ) ,并定义对称化的语义对比损失L S e C o \mathcal{L}_{SeCo} L S e C o 如下,
L S e C o = 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} L S e C o = 2 S ( ξ w , detach ( ρ y )) + S ( ξ y , detach ( ρ w ))
CSLR 和 SLT 的联合损失 为了使用提议的对比损失优化我们的模型,我们需要基于不同的输入两次推断我们的模型M O \mathcal{MO} M O 。一种包含软增强视频f s f_s f s 和标记的词序列w w w 。另一种包含硬增强视频f h f^h f h 和预测的词序列y y y ,其中y = arg max ( Y ) y = \arg\max(\mathbf{Y}) y = arg max ( Y ) 。
R , Y , ( p s , z s ) , ( ρ w , ξ w ) = M O ( f s , w ) \mathbf{R}, \mathbf{Y}, (p^s, z^s), (\rho^w, \xi^w) = \mathcal{MO}(f^s, w) R , Y , ( p s , z s ) , ( ρ w , ξ w ) = M O ( f s , w )
R ′ , Y ′ , ( p h , z h ) , ( ρ y , ξ y ) = M O ( f h , y ) \mathbf{R}', \mathbf{Y}', (p^h, z^h), (\rho^y, \xi^y) = \mathcal{MO}(f^h, y) R ′ , Y ′ , ( p h , z h ) , ( ρ y , ξ y ) = M O ( f h , y )
在获得( p s , z s , p h , z h ) , ( ξ w , ρ w , ρ y , ξ y ) (p^s, z^s, p^h, z^h), (\xi^w, \rho^w, \rho^y, \xi^y) ( p s , z s , p h , z h ) , ( ξ w , ρ w , ρ y , ξ y ) 后,我们可以分别计算对比损失L V i C o , L S e C o \mathcal{L}_{ViCo}, \mathcal{L}_{SeCo} L Vi C o , L S e C o 。同时,我们得到两个识别概率矩阵R , R ′ \mathbf{R}, \mathbf{R}' R , R ′ 和两个翻译概率矩阵Y , Y ′ \mathbf{Y}, \mathbf{Y}' Y , Y ′ 。为了实现 CSLR 和 SLT 的联合目标,我们采用 CTC 损失L C T C \mathcal{L}_{CTC} L CTC 和交叉熵损失L C E \mathcal{L}_{CE} L CE 来训练我们的模型,如下所示,
L s o f t = L C T C ( R , g ) + L C E ( Y , w ) \mathcal{L}_{soft} = \mathcal{L}_{CTC}(\mathbf{R}, g) + \mathcal{L}_{CE}(\mathbf{Y}, w) L so f t = L CTC ( R , g ) + L CE ( Y , w )
L h a r d = L C T C ( R ′ , g ) + L C E ( Y ′ , w ) \mathcal{L}_{hard} = \mathcal{L}_{CTC}(\mathbf{R}', g) + \mathcal{L}_{CE}(\mathbf{Y}', w) L ha r d = L CTC ( R ′ , g ) + L CE ( Y ′ , w )
最后,我们得到带有平衡权重α \alpha α 的联合损失L \mathcal{L} L ,其中α \alpha α 是一个超参数,如下所示,
L = L s o f t + L h a r d + α ( L V i C o + L S e C o ) \mathcal{L} = \mathcal{L}_{soft} + \mathcal{L}_{hard} + \alpha (\mathcal{L}_{ViCo} + \mathcal{L}_{SeCo}) L = L so f t + L ha r d + α ( L Vi C o + L S e C o )
实验 空白率和连续错误词率 为了验证我们的方法是否能够有效处理 CTC 尖峰现象和暴露偏差问题,我们提出了两个新的指标:空白率(B R BR BR )和连续错误词率(C W W R CWWR C WW R )。
B R BR BR 是一个直接反映尖峰现象严重程度的指标,可以表示为以下形式:
B R = # B l a n k # T o t a l R BR = \frac{\#Blank}{\#TotalR} BR = # T o t a lR # Bl ank
其中# B l a n k \#Blank # Bl ank 表示识别序列中 blank
token 的数量,而# T o t a l R \#TotalR # T o t a lR 表示识别序列中所有 token 的总数。
C W W R CWWR C WW R 是一个直接反映模型在翻译中依赖先前预测词汇程度的指标,可以表示为以下公式:
C W W R = ∑ # C W # T o t a l T CWWR = \frac{\sum \#CW}{\#TotalT} C WW R = # T o t a lT ∑ # C W
其中# C W \#CW # C W 表示连续错误单词的数量,而# T o t a l T \#TotalT # T o t a lT 表示翻译序列中单词的总数。
主实验
消融实验
总结 在这篇论文中,我们引入对比学习来解决手语任务中广泛存在的两个问题:连续手语识别(CSLR)任务中的 CTC 尖峰现象和手语翻译(SLT)任务中的暴露偏差。
具体来说,为了解决 CTC 尖峰现象,我们设计了一种视觉对比损失,通过从大量未标记的帧中学习特征来增强视觉模块。
为了解决暴露偏差问题,我们设计了一种语义对比损失,通过让模型暴露在自己的错误中来增强语义模块。
此外,我们提出了两种新的指标,即空白率(Blank Rate)和连续错误词率(Consecutive Wrong Word Rate),以直接反映我们在两个问题上的改进。
在公共手语数据集上的实验结果证明了我们方法的有效性。