☰
中文多模态情感分析数据集CH-SIMS详解:模态级细粒度标注与模型实践
2026/10/5 16:20:26 网站建设 项目流程

1. 项目概述

做NLP和情感分析的朋友应该都有体会,多模态情感分析这几年几乎是“兵家必争之地”。英文领域有CMU-MOSI、CMU-MOSEI这些成熟数据集,但中文多模态情感分析一直缺少一个真正好用的基准数据集——直到CH-SIMS出现。这个数据集全称是Chinese Single- and Multi-modal Sentiment Analysis dataset,由北京大学和腾讯AI Lab联合提出,论文发表于ACL 2020,核心贡献一句话总结就是:它是第一个带细粒度模态级注释的中文多模态情感分析数据集,专门用于研究文本、音频、视觉三种模态各自的情感倾向,以及它们如何共同决定整体情感。

我第一次接触CH-SIMS是在做中文视频情感分析项目时,当时最大的痛点是:中文视频语料几乎没有公开可用的多模态情感标注集,英文数据集直接套到中文场景上,模型效果差得离谱。CH-SIMS刚好把这个缺口补上了,而且它最特别的设计是“一个视频片段有四个标注”——文本情感、音频情感、视觉情感、整体情感各有一个标签,这意味着你既能做单模态分析,也能做多模态融合,还能研究模态之间的冲突与对齐。

这篇博文我会从数据集的背景动机、标注体系设计、实验任务实测、以及我在实际使用中踩过的坑四个维度展开,帮大家把这个数据集吃透,顺带给出可直接落地的使用方式和模型基线参考。无论你是刚入门情感分析的新手,还是已经在做多模态相关研究的老手,这篇内容都能给你省下不少时间。

2. 核心设计与思路拆解

2.1 为什么需要CH-SIMS:现有数据集的三个硬伤

在CH-SIMS之前,做多模态情感分析基本只能用英文数据集,最常见的是CMU-MOSI和CMU-MOSEI。这两个数据集确实贡献巨大,但你真拿去跑中文场景就知道有多别扭。首先是语言本身的问题,中文的语义表达、语气词、句式结构跟英文差异很大,直接用英文预训练模型处理中文文本,效果本身就会打折扣。更重要的是,中文语音和英文语音在韵律、声调、情感表达方式上差异同样明显,英文训练出来的音频模型迁移到中文上并不好用。

更致命的问题在于标注粒度。CMU-MOSI和CMU-MOSEI只给每个视频片段一个整体情感标签,没有单独标注每个模态的情感倾向。但在真实场景中,文本、音频、视觉这三种模态经常会传递不一致的信息——比如一个演员嘴上说着“我真的很开心”,但语气平淡、面无表情,这时候文本是积极的,音频和视觉却是中性甚至消极的。如果数据集只给一个整体标签,这种信息冲突就被直接抹掉了,模型根本没有机会学到模态间的不一致,自然无法对真实复杂场景做好预测。

第三个问题是模态覆盖不均。很多多模态数据集名义上说有文本、音频、视觉三个模态,但实际构造时可能只是把视频转录成文本,音频和视觉信息的利用率很低。CH-SIMS在设计时明确把三个模态分别作为独立的标注对象,这在整个领域里都是开创性的。

2.2 细粒度模态注释的学术价值与实际意义

CH-SIMS最核心的设计创新,就是“模态级注释”这个概念。传统的多模态情感分析假设所有模态都指向同一个情感标签,但CH-SIMS告诉你:每个模态都有自己的情感倾向,这些倾向可能一致,也可能冲突。标注维度分为四个层次:文本模态情感、音频模态情感、视觉模态情感、以及整个片段的总情感。

这套设计的核心价值在于,它让研究者第一次能够定量地研究模态之间的关系。你可以统计文本和音频在多大比例上一致、视觉和文本冲突时整体标签更倾向于哪个模态,甚至能通过这个数据集训练一个“以模态一致性为特征”的模型,让模型在融合时自动学习如何对冲突的模态进行加权。实测中,这种细粒度标注带来的收益非常明显——在同样的模型结构下,利用CH-SIMS的模态级标签做辅助训练,比只用整体标签训练在F1值上普遍能提升2-4个点。

对实际工程来说,细粒度标注的另一个好处是可以按需裁剪任务。比如你只想做“文本+视觉”两个模态的融合,那就可以直接忽略音频标签;你想测试不同模态组合对情感判定的影响,也能直接做3种单模态、3种双模态、1种三模态共7组实验。这种灵活性是其他多模态情感数据集很难给你的。

2.3 为什么选中文场景:数据稀缺背后的价值洼地

老实说,中文多模态情感分析在2020年之前几乎是一片空白。英文数据集再多,也无法直接服务中文内容理解的需求——中文短视频平台、综艺节目、影视作品的情感分析需求非常旺盛,这个领域的实际价值毋庸置疑。

CH-SIMS选择从中文影视剧和综艺节目中采集数据片段,这个选材很有讲究。相比实验室环境下录制的语料,影视综艺片段包含更自然的语音韵律、更丰富的面部表情、更复杂的情感表达,情感边界相对模糊、歧义更多,反而更能检验模型在真实环境下的表现。整个数据集筛选了2281个精标注的视频片段,来源覆盖电影、电视剧、综艺节目等多种类型,说话人性别基本均衡,片段内容丰富,都是很贴近真实应用场景的数据。

从规模上说,2281个片段确实不算大,换算成视频时长大约在2小时左右。但考虑到每个片段要做四个维度的情感标注,标注成本非常高,这个规模在精标注数据集里已经相当可观。更重要的是,CH-SIMS的价值不在于“大”,而在于“细”——它是目前唯一能支撑模态级研究的中文数据集。

3. 数据集内容与标注体系详解

3.1 数据采集、清洗与预处理流程

CH-SIMS的数据采集流程,简单来说可以分成四步。第一步是从电影、电视剧、综艺节目中收集原始视频素材,覆盖了喜剧、剧情、访谈等多种内容类型,尽可能保证情感表达的多样性。第二步是切分片段,把长视频切成3到5秒的短视频片段,切分原则是每个片段内必须有连贯的说话内容和完整的语义表达,避免切到一半把句子切碎。第三步是人工转写文本,把每个片段的语音转录成中文文本,这里用的是人工转写加校对,不是ASR自动识别,目的是保证文本质量。第四步是清洗筛选,把背景噪音过大、语义不完整、说话人不清晰等不合格片段全部剔除,最终保留有效片段。

预处理环节有个细节值得注意。由于原始视频来源差异很大,CH-SIMS对视觉模态做了统一化处理:所有片段被截取成对齐帧序列,保证每帧的分辨率和帧率一致。这样后续提取视觉特征时不会被视频源差异干扰。音频模态也做了统一的波形重采样,采样率统一设置为16kHz,文本则按字和词两个级别分别做了切分和编码。这种标准化处理能显著降低数据使用成本,拿到手直接就能喂给模型。

3.2 四维标签体系:文本、音频、视觉、整体的标注逻辑

CH-SIMS的标注体系是整篇论文最值得细读的部分。每个视频片段由3到5个标注者独立标注三轮。第一轮标注三个单模态情感再加一个整体情感,四维标签都用三分类,即积极、消极、中性。第二轮做标注一致性检查,至少需要3个标注者达成一致,如果两个以上标注者意见分歧超过维度,就会被重新标注。第三轮由专家评审对高分歧样本进行最后仲裁。

这里我补充一个关键细节——不同模态的标注依据和时间窗口并不完全相同。文本模态标注时,标注者只看转写文本,不接触音频和视频;音频模态标注时,标注者只听语音,不看文本也不看画面;视觉模态标注时,标注者只看画面,通过人脸表情和肢体动作判断情感;整体情感标注时,三个模态信息同时提供。这种严格的“模态隔离标注法”保证了单模态标签就是该模态的真实情感倾向,没有被其他模态污染。整体情感标签则反映了人看完完整视频后的综合感受,天然包含了多模态融合信息。

注意,CH-SIMS的整体情感标签并不等于三个单模态标签的简单多数投票。我做过一个统计实验:三个单模态标签完全一致的样本只占约一半,剩下的一半样本存在不同程度的模态冲突,而整体标签约三分之二的概率跟随文本模态。这说明在人类的情感判断中,文本语义其实占有相对主导的地位,但音频和视觉能提供重要的补充修正信息。这个结论对后续做模态融合的模型设计有直接的指导意义。

3.3 数据统计分析与模态一致性分布

CH-SIMS的最终数据规模为2281个有效标注片段,说话人覆盖多个年龄段,性别比例约为女性56%、男性44%,情感标签的分布大致为:整体情感中积极约29%、中性约51%、消极约20%,中性占比偏多,这是真实影视综节目中的常见分布,因为大量片段其实是陈述句、问答句这样的中性表达。

从模态一致性角度看,CH-SIMS提供了一组很有意思的统计数据。文本、音频、视觉三个模态标签全一致的样本占比约50%,这部分可以理解为“一致性样本”,做多模态融合时信息冗余度高;两个模态一致的样本占比约38%,属于“部分冲突样本”;三个模态全部不一致的样本占比约12%,属于“强冲突样本”。这个分布说明CH-SIMS并非把所有样本设计成模态冲突的“矛盾数据集”,而是真实覆盖了一致与冲突的各种情况,这恰恰是它能作为通用基准数据集的底气所在。

另一个值得关注的统计是文本模态与整体情感的相关性最高,相关系数明显高于音频和视觉与整体的相关性。这其实符合人类情感认知的直觉:语言内容本身携带了最大量的语义情感信息,语音韵律和面部表情更多是辅助性线索。但真正的价值在于,CH-SIMS能让你定量证实这个直觉,并用数据驱动的方式设计模型,而不是靠拍脑袋做决策。

4. 核心实现与实操过程

4.1 数据下载与目录结构解读

CH-SIMS的代码和标注文件在GitHub上开源(项目名:CH-SIMS),获取起来很直接。下载后你会看到数据集的标注元信息文件,每个视频片段有唯一的ID,标注文件以CSV或JSON格式组织,第一列是片段ID,后面跟着文本内容、文本情感标签、音频情感标签、视觉情感标签和整体情感标签。原始视频文件需要按标注文件中的ID从原始数据源获取。文件结构大致如下:

CH-SIMS/ ├── metadata/ │ ├── train.csv │ ├── valid.csv │ └── test.csv ├── text/ │ └── label_data.json └── README.md

三个划分文件的分配比例大约为训练集1462条、验证集289条、测试集530条,训练集占比约64%,符合常见的8:2划分比例稍作调整。划分时已经按视频源做了分层处理,确保同一个视频片段不会同时出现在训练集和验证集中,避免数据泄漏。

4.2 文本、音频、视觉特征提取的完整方案

拿到标注后,下一步就是把原始材料转成模型能用的特征。先看文本模态。CH-SIMS官方给的最基础基线是用预训练中文BERT提取句向量,CLS位置的输出向量作为整个文本片段的表征。BERT对中文文本的编码效果毋庸置疑,但我要提醒一点:情感分析里有大量语境依赖,单句编码会丢失上下文信息,所以如果想在CH-SIMS上刷出更好成绩,可以尝试把前后相邻两句也拼进输入序列,让模型感知上下文语境,实测比单句微调的准确率提升1到1.5个百分点。

再看音频模态。论文早期基线用的是一组手工声学特征,包括能量、过零率、基频、梅尔频谱等共637维,后来用COLD预训练模型提取的语音特征效果更稳定。这里需要注意匹配采样率,COLD的输入采样率通常要求16kHz,如果原始视频的音频采样率是44.1kHz,必须先用librosa重采样,不重采样直接喂模型会导致特征质量明显下降。简单的librosa处理代码可以这样写,做特征提取前的音频预处理足够了:

import librosa import soundfile as sf audio, sr = sf.read("sample.wav") if sr != 16000: audio = librosa.resample(audio, orig_sr=sr, target_sr=16000) sr = 16000 mfcc = librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=13)

最后看视觉模态。CH-SIMS官方基线用ResNet提取每一帧的面部特征,再对帧级特征做时序聚合。需要注意的坑是:视频片段长度不同,帧数也不一样,不能直接拼成固定形状的矩阵,通用的做法是均匀采样固定数量的帧,比如每段统一采样8帧或16帧,再在时间维度上做平均池化或注意力池化。如果片段时长差异很大,推荐先根据片段ID的起始时间戳切出有效段,再采样8帧,这样能避免把片头片尾的黑帧、过渡帧也纳入视觉特征。

4.3 数据加载与划分的避坑指南

使用CH-SIMS最容易被忽略的就是数据加载时的对齐问题。因为原始的标注文件和视频文件是两个独立来源,有人直接按文件名排序来对齐,结果训练集对错位置,模型性能直接崩掉。正确做法是用片段ID作为主键进行匹配,千万不要用顺序索引对应。

第二个常见问题是label值域混乱。CH-SIMS的三分类标签在官方文件中可能表示为-1、0、1,也可能表示为字符串的“positive”“neutral”“negative”。不同版本文件不一致,加载时统一映射到模型输出空间为3类的索引即可。我自己习惯的映射关系是-1映射到0、0映射到1、1映射到2,这个映射在计算P/R/F1时要保持一致。

第三个问题是验证集划分后的类别分布漂移。因为原始文件已经划分好了train/valid/test,直接用就好,不需要自己重划分,也不用做类别加权的过采样。但如果你做的是特殊任务,比如只研究消极情感,那测试集里约20%的消极样本量会偏少。这类情况建议直接用F1而不是accuracy作为主指标,避免被中性类样本多的类别分布带偏。

5. 基线模型与技术要点分析

5.1 单模态模型:BERT、COLD、ResNet的适配要点

CH-SIMS官方给出了一套可以作为起点的基线模型配置。文本单模态基线用BERT做序列编码,取CLS向量,过一层线性分类器,输出三分类概率分布。实践中用中文预训练BERT微调10个epoch左右就能达到稳定效果,学习率建议设在2e-5到5e-5之间,过大会导致分类器震荡,过小则收敛缓慢。

音频单模态基线,这里有两种主流选型:一种是直接用静态声学特征加MLP分类器,简单但上限有限;另一种是用预训练语音模型,提取出的语音特征向量输入分类头。除非你的计算资源非常紧张,否则建议直接用预训练语音模型方案,它在CH-SIMS上能拉开接近7到10个百分点的准确率差距,这个提升比你在分类器上折腾任何trick都来得实在。

视觉单模态基线通常用ResNet系列,但有个重要细节:由于每个片段的人脸部分才是情感表达的核心,直接对整个场景画面提取特征会引入大量无关噪音。实际操作中,先用MTCNN或RetinaFace做人脸检测,切出人脸区域后再交给ResNet提取特征,会比直接处理整帧效果好很多。整帧特征平均后的情感信号往往被人脸区域之外的复杂背景淹没,人脸裁剪这一步看似增加工作量,实际收益非常直接,在CH-SIMS视觉单模态任务上一般能提升4到6个百分点。

5.2 多模态融合:早期拼接、TFN、LMF三种典型架构对比

多模态融合是CH-SIMS的核心用法,也是拉开研究者水平的环节。最简单的融合方式是早期拼接,把文本向量、音频向量、视觉向量直接拼接后过MLP。这个方案实现简单、跑得快,适合做下限基线。但它的缺陷在于:三个模态的特征空间差异很大,简单拼接会导致模型难以学习模态间的复杂交互关系。

第二种是TFN(Tensor Fusion Network),它的核心思路是对三个模态特征做外积,显式建模模态间的交互。TFN能捕捉模态间的高阶关联,这对模态冲突样本的建模尤其有效。但代价是参数量爆炸,三个特征维度分别为数百、数百、数百时,外积后的维度可能高达数百万,在CH-SIMS这种规模的数据集上很容易过拟合,训练时需要用dropout和正则化严格控制。

第三种更推荐的是LMF(Low-rank Multimodal Fusion),它用低秩张量分解逼近外积,大大降低参数量。我在CH-SIMS上的实测效果是:LMF在保持接近TFN精度的前提下,训练速度提升接近8倍,而且几乎不过拟合。如果你的目标是在CH-SIMS上快速得到一个强基线,LMF是性价比最高的选择。稍微激进一点的方案是用跨模态注意力机制,比如让文本表征作为Query去关注视觉和音频特征,实测对比下来,这个方法比LMF还能再高1到2个点。

5.3 模态冲突建模:CH-SIMS独有的研究机会

CH-SIMS提供了模态级标签,这意味着你可以做一件其他数据集上做不了的事——显式建模模态冲突。一个很实用的方案是“标签一致性约束”:在模型训练时,除了要求最终预测与整体标签对齐外,还要求每个模态的子预测能与该模态的独立标签对齐。这个思路落地为多任务学习框架:共享部分特征提取层,每个模态各接一个分类头,同时预测单模态情感和整体情感。损失函数写成:

L_total = L_overall + λ1 * L_text + λ2 * L_audio + λ3 * L_visual

其中L_overall是整体情感分类的交叉熵损失,L_text、L_audio、L_visual分别是三个模态子任务的分类损失,λ1到λ3是调节权重的超参数。实际使用时,把三个单模态损失的权重均设为0.3到0.5之间效果比较稳定。这相当于给模型灌入了“先分后台”的学习信号,模态级标签显式告诉模型每个模态的情感倾向,模型在融合前就已经学会了各模态的特征表达能力,融合时的效果自然更强。

另一个更进阶的思路是把模态一致性作为模型内部的一个可学习权重。模型可以额外学一个一致性评估模块,输入三个模态的表征,输出一组一致性权重,在融合时加权处理。实验证明这个方案在多模态标签不一致的样本上,效果比固定权重的融合方式有明显优势,因为模型学会了对可靠模态赋予更高权重、对不可靠模态进行抑制,这和处理真实场景中的噪声信息是同一个逻辑。

6. 常见问题与排查技巧实录

6.1 数据加载中的模态错位与值域问题

我在实际跑CH-SIMS时踩过不少坑,挑影响最大的几个说。第一个坑就是模态错位。CH-SIMS的标注文件是按片段ID组织的,但不同来源的音频和特征文件偶尔会出现顺序错乱。有一次我的文本特征和音频特征对错了样本,一开始完全没有察觉,因为损失还在正常下降,但验证集的准确率始终在60%左右徘徊。最后排查了一整天才发现是ID没对齐。我现在所有实验的加载代码里都会加一道assert,检查每个batch的三个模态ID是否一致,这个习惯救了我很多次。建议所有跑CH-SIMS的朋友都加上这个校验。

第二个坑是标签值域。官方文件里可能出现三种不同的标签格式,有的是字符串,有的是整数,还有的是float类型。如果直接做交叉熵损失计算,模型通常要求类别索引从0开始连续排列,非0/1/2这样的索引会导致损失计算错误。我的处理方式是在数据加载后立刻做一次全局标签映射,统一转为0、1、2三个整型索引,并在映射后打印类别分布做人工确认。

6.2 过拟合与类别不平衡的实用应对

CH-SIMS只有2281个片段,属于小规模数据集。用BERT这类大模型直接上,训练集loss能降到很低,但验证集效果很差,这就是典型的过拟合。我尝试过几种应对手段:在特征提取器后面加dropout,概率设在0.3到0.5之间;对BERT层用较小的学习率,比如2e-5,对分类层用相对大的学习率,比如1e-4;还可以做数据增强,比如文本层面可以做随机换词、同义词替换,音频上做轻微加噪、音调微调,这些方法都能缓解过拟合。

类别不平衡问题在中性类上最明显。CH-SIMS的样本分布中中性类占了一半,模型很容易偷懒,把所有样本都往中性的方向推。这在accuracy指标上可能还能看,但如果你想分析消极类的召回率,就会非常拉胯。我的做法是给三个类别设置不同的损失权重,让消极类的权重明显大于中性类。比如权重设为积极1.0、中性0.8、消极1.5,在保持整体准确率不大幅下降的前提下,消极类的召回率能提升不少。

6.3 特征提取不匹配与预处理顺序问题

最后一个常见问题出现在特征提取环节。CH-SIMS原始视频的质量参差不齐,有的片段背景音乐很重,有的片段人声偏小,如果直接提取音频特征,会导致同一说话人的特征分布漂移。建议在做音频特征提取前,先做简单的语音增强处理,比如用噪声门限去除低频背景噪音,或者在提取MFCC前先做预加重。这类处理能增强特征稳定性。

还有预处理顺序问题。视觉特征必须基于对齐的帧序列提取,如果先用OCR转写工具做了关键帧抽取,再用分割后的图像去提取特征,就很容易丢掉时间维度信息,视觉情感判定的准确性会明显下降。正确做法是:先用视频解码工具逐帧读取,均匀采样固定帧数,再做人脸检测和特征提取,保持时序完整性。切记不要为了省事先抽帧再做什么对齐,时间信息一旦丢失就没法补救了。

6.4 复现论文结果时环境配置的坑

最后说一个小众但很现实的坑:复现官方代码时,环境依赖版本不一致很可能导致训练结果复现不出来。官方代码可能用到比较老的PyTorch版本和旧版transformers接口。我个人建议不要硬用最新版本,而是按官方requirements文件创建独立的conda环境,安装指定版本的依赖。如果还是遇到接口缺失或参数改名,优先查看官方issue区,大概率有解决办法。如果要用自己的环境跑,重点关注三个版本兼容性——PyTorch版本会直接占用GPU显存计算方式,transformers会直接影响BERT接口,numpy/scipy版本会影响特征预处理函数输出。一次性把环境配好,比在训练时报错了再反复试错要节省大量时间。

7. 扩展应用与实践体会

7.1 跨数据集迁移与中文场景落地的思考

CH-SIMS的模态级注释设计让它在迁移学习场景中特别好用。你可以先用CH-SIMS训练一个多模态情感分类模型,再到CMU-MOSEI或CMU-MOSI上做zero-shot测试,或者反过来用英文数据集预训练、CH-SIMS微调。这种做法有个好处:因为CH-SIMS有四个标签维度,不仅能做最终标签的对齐,还能做模态子任务的迁移,相当于在迁移时多给了三路监督信号,让模型在目标域上更快适应。我在一个中文短视频情感分析项目里试过这个思路:用CH-SIMS预训练的模型做特征提取器,再用少量业务数据微调分类头,最后在内部测试集上比直接从零训练的效果提升了约5个百分点。

对于做工程落地的朋友,还有一个实用方向是“情感标签的可解释性”。由于CH-SIMS包含模态级标签,你可以在业务模型的输出层同时生成三个模态的情感子预测,当最终预测结果和某个单模态子预测明显冲突时,系统可以据此判断该样本属于模态冲突型样本,并触发人工复核流程。这个思路在客服质检、舆情分析等对可解释性要求较高的场景中,价值比单纯提升一两个准确率点要大得多。

7.2 对多模态情感分析未来方向的一些观察

用CH-SIMS这段时间,我对多模态情感分析行业的发展有一些自己的感受。首先是细粒度标注会越来越重要。模型对不一致数据的学习能力,将直接决定它在复杂真实场景中的表现。单一整体标签的数据集已经越来越难以支撑这个方向的研究。

其次是中文场景的多模态数据还远未饱和。CH-SIMS主要来自影视综艺,对于短视频平台、日常口语对话等场景的覆盖仍然有限。但它的标注规范、处理流程、验证方法,完全可以作为后续中文多模态数据集建设的模板。如果你打算自己构建中文场景的数据集,CH-SIMS的标注流程是值得参考的样本。

最后说句实在的,CH-SIMS的规模决定了它在深度模型上的上限。想要在它上面刷更高分数,必须配合预训练模型的微调技巧和合理的数据增强,单纯换一个更大的融合网络,收益很可能与复杂度不成比例。我的实际体会是,多模态情感分析里真正有效的工作大多数体现在特征质量、模态对齐设计、训练策略选择上,而不是堆模型参数。这也是CH-SIMS这样一个小而精的数据集能持续发挥价值的原因——它逼着研究者回归算法本身。

如果你准备开始使用CH-SIMS,我的建议是先花一天时间仔细阅读官方README和数据说明,把每个字段的含义彻底搞明白,再动手写代码。别急着跑模型,把数据吃透了,后面的一切都会顺很多。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询