CH-SIMS:标签为什么要按模态分别标注?
从标签语义到可验证实现:数据集也是方法的一部分
一句话总结
CH-SIMS 为同一片段提供整体与三个单模态标签,用共享编码器和四个预测头检验辅助监督;收益依赖任务组合与评价粒度。
研究问题:单模态看到的情感,为什么可能不同?
设想一句“真没想到”以轻快文字出现,声音却低沉,脸部也显得失落。只读转写的人和看完整视频的人拥有不同证据,给出不同情感评分并不意味着其中一人不认真。CH-SIMS 的出发点是:训练文本分支时,若一律要求它拟合完整视频的标签,可能把声音或表情提供的信息错误归到文字表示上。这个问题发生在监督信号层面,不能单靠增加融合层数消除。
原论文 Figure 1 将四个标签放在同一个片段旁边,适合在阅读模型之前看。M 表示多模态整体判断,T、A、V 分别表示仅文字、仅音频、仅无声视频的判断。这里的 fine-grained 首先指模态层面的独立标注,并不表示给每个面部肌肉动作、每个词或每帧都标了离散情绪类别。把它当成 AU 数据集会从第一步就选错学习目标。
此前的多模态数据通常给一个整体标签。一个常见训练方式是让各模态先形成向量,再融合预测整体情感;另一个方式会给每个分支也接输出头,但仍复制整体标签。前者不直接约束单模态语义,后者可能给某个模态提出其证据无法满足的要求。CH-SIMS 同时提供数据与多任务基线,允许比较独立监督究竟有没有帮助。
本文需要区分三个问题:数据是否更丰富,单模态预测是否更符合本模态证据,以及最终融合预测是否更准确。它们相关却不等价。额外标签增加了监督成本,任务之间也可能产生冲突;研究重点是哪些辅助任务对主任务有益,而不是默认四个损失一定优于一个损失。原文结论中的“asynchrony of learning”就是作者承认的训练困难。
数据、标注与预备知识
论文由 Wenmeng Yu、Hua Xu、Fanyang Meng、Yilin Zhu、Yixiao Ma、Jiele Wu、Jiyun Zou、Kaicheng Yang 完成,发表于 ACL 2020。本文精读的是原版 CH-SIMS,而不是后来扩展的 CH-SIMS v2。原版从电影、电视剧和综艺中选取普通话短片,要求目标说话者的脸和声音同时出现,片段为一至十秒且画面中不出现其他人脸;这些筛选条件决定了数据适用范围。
每名标注者只能看到当前模态的信息,顺序为文字、声音、无声视频、完整视频,不能四种一起判断。五名标注者各给负向、零中性或正向三个值,最终取平均。独立观察能减少信息串扰,却不能消除主观差异,也不等于对同一标注者完全消除了记忆影响。阅读这种标注论文时,应先记录“谁能看到什么”,再看模型准确率。
五个三值判断平均后可以得到间隔为零点二的十一种分数。论文进一步合并为五个强度类别,强负向为负一和负零点八,弱负向为负零点六至负零点二,中性为零,正向对称划分。这不是五名标注者直接投票选五类;回归数值与分类分箱分别对应训练和评估中的不同操作。
Table 1 给出二千二百八十一条片段、六十个原视频与四百七十四名不同说话者。Table 3 按整体标签组织随机片段划分,训练一千三百六十八、验证四百五十六、测试四百五十七。不能据此推断说话者之间严格不交叉;跨场景研究需要另行检查身份、原视频和节目来源是否重叠,同时把新划分与原论文划分分别报告。
这里 n 是片段编号,i 是模态,r 是标注者;A 是最终分数,a 是单个判断。例如五人给出一、一、零、负一、零,平均为零点二。这说明弱正向既可能来自意见分歧,也可能来自较一致的轻微表达;平均分本身不能恢复五人的完整意见分布。
方法:四条监督如何共同训练三个编码器?
第一步提取输入特征。论文使用中文 BERT 的七百六十八维文字表示,LibROSA 提取三十三维音频特征,OpenFace 等流程生成七百零九维视觉特征。音频包含基频、梅尔频率倒谱和色度信息;视觉包含关键点、动作单元与姿态等。它们都是预处理得到的数字描述,不能把七百零九维每一维都直接理解成一种情绪。
不同模态的序列长度可以不同。原文用序列长度均值加三倍标准差设上限;当前 MMSA 配置列出的长度为三十九、四百、五十五。需要明确这些是具体特征文件与配置的约定,不是所有 CH-SIMS 使用者必须采用的物理长度。换特征后首先核对维度、补齐与掩码,不应让旧配置默默截断新输入。
B 为一批片段数量,L 为该模态的时间长度,两个 D 分别是输入和输出的特征宽度。S 是单模态网络,把一段序列变成一个摘要向量 R。文字用 LSTM,音视频用多层全连接网络。实际代码的音视频子网接收去除单长度轴后的向量,因此必须追踪数据加载阶段的汇总步骤,而不能直接把任意长度帧序列塞进去。
第二步由融合函数 F 把三种摘要合成多模态表示。LF-DNN 直接拼接,TFN 用外积显式构造跨模态交互,LMF 用低秩因子减少交互计算。本文的新意不在重新发明这三种融合器,而在让同一批单模态表示既服务融合,也接受各自标签的监督,所以可以在多个既有模型上检验监督策略。
第三步设置四个输出头。文字表示到文字分数,声音表示到声音分数,视觉表示到视觉分数,融合表示到整体分数。原文 Figure 3 中四条输出线很关键:辅助头只在训练时提供额外约束,部署整体预测时可以只取 M 输出。四个任务的输入与标签必须按片段 ID 对齐,不能分别打乱后再拼回批次。
N_t 是训练片段数,y 与预测值分别是该任务的标签和输出,α 控制任务权重,β 控制共享子网权重的正则化。原文使用 L1 回归损失。可以把这个式子理解为四份误差按权重汇总,再约束参数大小;不是先把四份标签平均成一个目标。原文称 L2 为稀疏化,但严格说 L2 通常缩小权重,不保证产生精确零值。
θ_t 表示文字编码器参数,正则项记为 R。文字编码器同时受到整体任务和文字任务的影响;音频辅助损失不会直接经过独立文字分支,但会通过后续共同训练改变整体学习环境。如果两个梯度方向相反,增大辅助权重可能降低主任务表现。因此“标签更多”与“每次更新更正确”之间没有必然联系。
原文 Figure 2 右侧虽然称为 confusion matrix,实际元素是两种标签的平均平方差,并非常见分类混淆矩阵中的样本计数。值越大说明评分差异越大;对角线为零且矩阵对称。音频包含语言内容,所以音频与整体标注较接近并不等于音频编码器一定比文本强,也不能据此推断因果贡献。
flowchart LR T[Text features] --> ET[Text encoder] A[Audio features] --> EA[Audio encoder] V[Visual features] --> EV[Visual encoder] ET --> F[Fusion] EA --> F EV --> F ET --> LT[Text loss] EA --> LA[Audio loss] EV --> LV[Visual loss] F --> LM[Multimodal loss]
源码对应:分清训练目标与日志里的目标
已克隆作者链接的 thuiar/MMSA,固定版本 a94e65d07fa1ae0d44e552390074b29b0898edfd,读取 README、模型、训练器与回归配置。该仓库现为统一框架,不能把其当前默认超参数直接当成二〇二〇年的全部实验设置。下面两段体现最核心的数据流和目标计算,均为真实源码短节选。
MMSA · src/MMSA/models/multiTask/MLF_DNN.py:152–171
x = self.post_fusion_dropout(fusion_h)
x = F.relu(self.post_fusion_layer_1(x), inplace=True)
x = F.relu(self.post_fusion_layer_2(x), inplace=True)
output_fusion = self.post_fusion_layer_3(x)
res = {
'Feature_t': text_h,
'Feature_a': audio_h,
'Feature_v': video_h,
'Feature_f': fusion_h,
'M': output_fusion,
'T': output_text,
'A': output_audio,
'V': output_video
}
return resfusion_h 拼接音频、视觉和文字向量,最后返回 M、T、A、V 四个预测。每个输出形状应为批量大小乘一;Feature_t 等仅是中间表示。初学者可以先构造两个样本打印这八个字段,确认输出头没有共用错误标签,再尝试训练。只有一个样本时要留意 TextSubNet 中不带维度的 squeeze 会去掉批量轴。
MMSA · src/MMSA/trains/multiTask/MLF_DNN.py:63–77
# forward
outputs = model(text, audio, vision)
# compute loss
loss = 0.0
for m in self.args.tasks:
loss += eval('self.args.'+m) * self.criterion(outputs[m], labels[m])
# backward
loss.backward()
# update
optimizer.step()
# store results
train_loss += loss.item()
for m in self.args.tasks:
y_pred[m].append(outputs[m].cpu())
y_true[m].append(labels['M'].cpu())损失循环明确使用 labels[m],确实给不同头各自的目标。然而后面的日志收集 y_true[m] 一律追加 labels["M"],因此该版本辅助头日志衡量的可能是“单模态预测整体标签”,不能直接当成“预测该模态标签”的成绩。复现 Table 4 时必须分别写清评价目标;这类细节比复制学习率更影响结论是否正确。
当前配置 M、T、A、V 权重分别为零点六、零点二、零点八、零点八,它们不要求和为一。回归使用 L1,参数组分别设 weight decay。学习时可先把三个辅助权重设零形成单任务对照,再一次只开放一个辅助任务;保存配置副本,不修改现有 ALMT 的环境和实验记录。
实验:二分类改善并不代表五分类同步改善
原文 Table 2 报告五个固定种子的均值与波动,种子为一、十二、一百二十三、一千二百三十四、一万二千三百四十五。下表保留关键均值;准确率为百分数,MAE 已把原表百分制展示转换回零到一附近的数值。所有比较均在同一论文协议内,不与当前本地 ALMT 结果拼成排行榜。
| Table 2 模型 | Acc-2 ↑ | Acc-5 ↑ | MAE ↓ |
|---|---|---|---|
| LF-DNN | 79.87 | 41.62 | 0.4201 |
| MLF-DNN | 82.28 | 38.03 | 0.4064 |
| LMF | 79.34 | 35.14 | 0.4399 |
| MLMF | 82.32 | 37.33 | 0.4203 |
| TFN | 80.66 | 38.38 | 0.4252 |
| MTFN | 82.45 | 37.2 | 0.4066 |
LF-DNN 增加多任务后,二分类上升二点四一个百分点、MAE 降低零点零一三七,但五分类下降三点五九个百分点。MLF-DNN 的五分类波动达六个百分点,原模型为一点四。比较强弱情感的细粒度任务时,不能只引用二分类改善来宣称全部粒度均受益;这也提示你需要关注区间边界与类别不均衡。
Table 5 则把融合架构固定,只改变辅助任务。下面 MAE 同样换回原量纲。它与 Table 2 的 M 单任务行不是完全相同数字,应分别保留原表,不把两次实验结果当作一行随意替换。Table 5 的完整任务 Corr 为六十四点七四,而 Table 2 为六十七点四七,本文不替作者猜测差异来源。
| Table 5 训练任务 | Acc-2 ↑ | MAE ↓ |
|---|---|---|
| M | 80.04 | 0.4395 |
| M+T | 80.04 | 0.4311 |
| M+A | 76.85 | 0.4698 |
| M+V | 79.96 | 0.4316 |
| M+T+A | 80.88 | 0.4254 |
| M+T+A+V | 82.28 | 0.4064 |
最有教学意义的行是 M+A:增加音频标签后准确率反而下降三点一九个百分点,MAE 也升高。这说明单个辅助任务可能改变各分支训练速度,作者将其解释为任务学习不同步;表格支持“该配置发生退化”,但没有直接测量梯度冲突,不能把解释升级为已证实的唯一机制。
Figure 4 的 t-SNE 图展示新模型三种模态表示更分离。t-SNE 是二维可视化,会受随机初始化与参数影响;模态分离本身也不必然意味着情感信息更多。合理的读法是把它作为补充现象,并结合主任务误差、类别表现和固定协议消融,而不是用一张分得开的散点图证明互补性。
三次可以验收的小练习
第一次只读数据:在当前可信的 CH-SIMS 特征文件中列出 train、valid、test 的样本数、ID、三种特征形状及四组标签。验收是三集合 ID 不重叠、计数相加为二千二百八十一、所有标签处于负一到一并落在预期的平均标注网格。另行统计源视频和说话者交叉,不要用片段 ID 不重复代替来源独立。
第二次只算标签差异:对四组标签按 Eq. (1) 生成四乘四矩阵,再挑出文本与视觉差异最大的十个 ID,查看原片段并记录“观察到的线索”和“推测原因”。验收是矩阵对称、对角为零、随机抽三条手算与程序一致。该分析无需训练,可先在训练集熟悉流程,测试集分析只用于报告而不反复指导选模。
第三次才做多任务前向:用小批次生成四个输出,手算各 L1 和加权总损失,核对自动计算一致。关闭全部辅助权重后,辅助头不应再获得任务梯度;开启文字任务后,文字编码器与文字头应有梯度。通过这些检查后才安排固定种子的对照训练,验证集按预先指定指标选模型,最终测试只做一次。
建议的提交物是 dataset_audit.json、label_difference.csv、十条带证据的案例表、四头形状与梯度日志。它们比“我已经读懂 CH-SIMS”更容易验收。若想接到 ALMT 上,先增加仅训练时使用的单模态输出头并明确标签路径,不要同时更换编码器、损失和数据划分;否则即使指标变化,也难以知道是哪一步起作用。
局限、适用范围与研究切入点
作者在 Section 6 与结论承认辅助任务学习不同步会损害整体任务,Section 5.1 还指出中文可靠时间对齐工具不足,相关基线采用替代方法。论文并未解决跨语言、多人对话或连续场景适应;其价值在于为监督粒度问题提供可检验的数据和基线。原文短语“independent unimodal annotations”描述的是标注来源,不是保证各模态统计独立。
独立判断:影视片段的表达方式、镜头选择和负向比例都会限制外推;样本级随机划分也不足以证明跨身份泛化。五名标注者的平均值压缩了分歧信息,而且独立单模态评分只是基于可见线索的感知判断,不能等同于说话者不可观测的真实内心状态。这些边界应在科研表述中保留。
对你的细粒度路线,最稳妥的起点是先比较整体标签与单模态标签下的错误结构,再尝试辅助监督是否能减少稳定退化样本。对跨场景路线,先设计来源隔离评估并确认标签定义一致。这两类问题需要不同实验,不能因为都用了 CH-SIMS 就把它们合并为一个已经解决的泛化任务。
一个容易漏掉的验收是中性样本的二分类处理。负一到一的回归标签必须经过具体规则才变成两类;把零归入非负类、排除零或采用其他边界,得到的准确率并不相同。报告时把代码中的条件表达式直接写进协议,并对负零点二、零、正零点二三个边界样本做单元检查。不要只写“按照通用方法计算”。
再做一个不需要训练的手算:两个片段的文字标签是零点八和负零点四,视觉标签是负零点八和负零点二。两者平方差均值为一点三;交换模态顺序仍是一点三。它衡量的是标注分歧,不是模型误差。只有把模型预测与指定标签比较才得到预测误差,将两类量混在同一个图里会导致错误归因。
原文与源码
ACL 2020 出版页 · 全文 PDF,Figure 1–4、Table 1–5 · 作者 MMSA 框架。原文三处短引语为“independent unimodal annotations”“asynchrony of learning”“late-fusion”,其余均为独立中文解释。
自己的解释与验收记录
写出一条输入到输出的链路、一个关键公式的含义,以及你完成的最小检查。笔记仅保存在当前浏览器,可从主站「我的学习笔记」导出。