做中文多模态情感分析的人,大概率都经历过一个尴尬阶段:数据集找不到,或者找到的全是英文。CMU-MOSI、CMU-MOSEI、IEMOCAP这老三样,确实撑起了多模态情感分析这片领域,可放到中文场景里,总有种隔靴搔痒的别扭感。英文模型处理中文口语句子的语气、停顿、表情,识别出来的情感往往差那么一口气。我第一次想给中文影视对话做情感识别时就卡在这一步,找遍了公开资源也没找到趁手的数据集,后来读到CH-SIMS这篇论文,才算是把这条路走通了。
CH-SIMS全称是Chinese Multimodal Sentiment Analysis Dataset,论文发表在ACL 2020上,是当时第一个面向中文场景、同时提供文本/音频/视觉三模态细粒度情感标注的多模态情感分析数据集。它和CMU-MOSI、CMU-MOSEI最大的区别不只是语言从英文换成了中文,而是它的模态注释做到了真正细粒度:每个视频片段不仅有一个总体的情感分数,还单独给出了文本情感、音频情感、视觉情感三个独立标签。这篇文献翻译笔记,我围绕这个数据集聊清楚三件事:它解决了什么、标注方案是怎么设计和落地的、以及在实际复现和研究中它能带来什么。
1. 为什么中文多模态情感分析一直缺一个好数据集
1.1 英文数据集是主流,中文场景却没法直接平移
先看一个很现实的问题:多模态情感分析这个方向从十几年前火起来,绝大多数数据集都是英语的。CMU-MOSI大约两千个样本,所有说话人都是英语母语者;CMU-MOSEI规模大一些,两万多个短视频片段,语言同样是英语;IEMOCAP主要是英语对话场景下的情绪识别,也是老面孔了。很多入门者做实验时,第一反应就是拿这些数据集跑通baseline,然后想当然地认为把英文模型迁移到中文上,只是换个tokenizer的事。实际操作过你就会发现,这个迁移的代价比想象中大很多。
语言差异首先体现在声学层面。中文是声调语言,四声本身携带大量韵律信息,同一个音节用不同声调说出来,情感色彩完全不同;英语是重音计时语言,节奏模式和重读位置起的作用更突出。所以同样用COVAREP或者openSMILE抽音频特征,中英文的分布特性差异很大,直接用英文数据训练好的音频编码器去处理中文语音,效果往往打折。
再看文本表达。中文口语里有大量语气词,啊、呀、嘛、呢这种词在英文里没有对应关系,但它们对情感判定很关键。还有成语、谐音、双关和隐晦的委婉表达,字面情感和真实情感经常错位。比如对方说"你心里没点数吗",字面上是疑问句,实际情感却带明显的负面情绪,这种用法在英文数据集里几乎看不到。视觉模态也有差距,中文语境下的表情、手势和社交距离规则跟西方人不一样,直接平移英文数据集里学到的面部动作模式,放到中文影视对话上会显得水土不服。所以中文多模态情感分析需要自己的数据,这不是矫情,是实实在在的需求。
1.2 更隐蔽的短板:只有整体情感分,没有模态细粒度标签
如果说语言差异还能靠模型迁移硬顶过去,那标注粒度的问题就更麻烦了。CMU-MOSI和CMU-MOSEI的标注方式是给每个句子或视频片段打一个整体情感分数,比如从-3到+3,或者归一化到[-1,1]。这个分数代表"整个样本"在情感上是正面还是负面。听起来好像够用了,但做多模态研究的人都知道,这个整体分数背后藏着一个大问题:你不知道情感到底是从哪个模态来的。
举一个我在文章里反复用的例子:一个人面无表情地说"你真好",语气平平淡淡,配合一个非常不情愿的点头动作。这个片段整体情感显然是负面或者中性的,但如果你只拿到整体标签,就无法判断负面情感究竟靠什么信号表达出来的。是文本吗?文本是"你真好",字面完全正面。是语气吗?语气平淡到几乎没感情。是表情和动作吗?面无表情和不情愿的点头确实传递了否定态度。整体标签把这些信息全部糊在了一起,模型学到的是三个模态信号的某种混合效果,却不知道每个模态各自在说什么。
这种"只标整体、不标细粒度"的做法,在处理不一致样本时尤其吃亏。英文数据集里也有类似问题,但一直没有得到特别好的解决。CH-SIMS做的就是这件事:把标注粒度从整体情感推进到每个独立模态的细粒度情感,让每个模态先单独表态,最后再看多模态整体怎么融合。这个思路听起来不复杂,真正落地时却要考虑不少细节,下面细说。
2. CH-SIMS的核心设计:三模态独立标注如何在片段级落地
2.1 数据来源与切分流程
CH-SIMS的数据来源是中文电影、电视剧、综艺节目里的自然对话片段。这些场景最大好处是接近真实生活,说话人不是念稿子,有情绪起伏,有即兴反应,面部表情和语音语调都更自然。采集视频后并没有直接扔给标注员,而是先做了一轮自动预处理:用语音识别技术把长视频转写成文本,再根据说话人变化和语义完整性把长对话切成短片段。
这一步切得好不好,直接影响后续标注质量。切得太碎,语义不完整,标注员看不懂在说什么,情感判断就失真;切得太长,一个片段里可能包含多种情感转折,标注出来的分数会变成一种说不清道不明的"平均情感"。CH-SIMS的做法是尽量保持语义完整的同时控制片段长度,保证每个片段表达的是一个相对独立、相对完整的意图。人工还会筛掉字幕重叠、多人同时说话、环境噪声过大的片段,这些样本就算切出来了也没办法做可靠的情感标注。
经过筛选和切分,数据集最终保留了大约两千多个标注片段,总时长约四个多小时,单个片段平均几秒到十几秒不等。这个规模在当时的中文多模态情感数据里已经相当可观,比动辄只有几百条的中文情绪数据集友好太多。
2.2 让每个模态单独"表态"的标注协议
CH-SIMS标注协议最有意思的地方在于"隔离标注"的设计。传统标注流程里,标注员一般是看完整个视频之后凭借直觉打一个总体分,而CH-SIMS要求标注员先在单模态输入上做出判断,再看完整视频打总体分。
具体来说,每个片段会被拆成三条独立的标注通道:
- 文本通道:只给标注员看这段视频对应的文字转写,不提供任何语音和画面信息。
- 音频通道:只给标注员听这段视频的原始音频,不提供画面和字幕,相当于单纯听语气、停顿、音量、节奏。
- 视频通道:只给标注员看静音后的视频画面,观察表情、动作、姿态。
标注员在这三个通道上分别打一个连续值情感分数,取值范围是[-1,1],-1代表极端负面,0代表中性,1代表极端正面。完成三个单模态标注之后,标注员才能看到完整的音画文信息,再给出一个总体多模态情感标签。
这个隔离设计解决了多模态标注里一个很隐蔽的坑:锚定效应。如果标注员先看文本或先听语音,后面的判断就容易被第一个看到的信息带跑。到时候你拿到的三个单模态标签并不是"各自独立的情感判断",而是一个已经被优先模态污染后的混合答案。CH-SIMS用严格分通道的方式把这个问题从协议层面解决了。
最终标签也不是某一个标注员说了算,而是由多个经过筛选和培训的标注员分别独立标注之后再取一致性较高的结果。文本、音频、视频、整体四组标签分别做质量控制,不一致的样本会被二次讨论或者直接丢弃。说出来你可能不信,给一个片段打情感分这件事,不同标注员之间的分歧远比你想象的大,尤其是那些带反讽、客气话、敷衍语气的样本。
2.3 "细粒度"到底细在哪:不是时间维度,而是标注维度
我一开始读论文标题的时候,以为"细粒度"指的是把句子拆成了单词级或者音素级的小时间片,后来仔细看才发现,CH-SIMS的切分粒度仍然是片段级,并没有做词级别的时间对齐。它真正细的地方,是标注空间的维度。
一句话讲清楚:以前的数据集只给你一个答案——这个片段情感是正还是负;CH-SIMS给了你四个答案——文本说了什么情感、语音传了什么情感、画面表达了什么情感、三者融合后整体是什么情感。这四个答案相互独立又彼此关联,于是研究者终于能回答一个以前只能靠猜的问题:在一个多模态表达里,每个模态各自主张什么立场,谁在主导整体情感,谁在拖后腿。
这种设计对模型训练的价值非常大。传统整体标签只能监督最终融合输出,单模态编码器学到的中间表示到底对不对没人知道。CH-SIMS的多组标签则让模型可以在每个模态单独训练时就有监督信号,比如训练文本编码器时,可以直接用文本情感标签算loss,而不是只靠最后融合层的梯度回传。训练音频和视觉编码器同理。这相当于把原来一团浆糊的多模态任务,拆成了几个有明确子目标的单模态任务加一个融合任务,训练效率和可解释性都上来了。
3. 数据统计里藏着的信息量:规模、分布与模态不一致现象
3.1 数据规模与官方划分
先聊最实际的:这份数据到底怎么用。CH-SIMS在论文和官方开源仓库里提供了一个固定的训练集、验证集、测试集划分。为什么要强调官方划分?因为多模态情感分析数据集普遍规模不算大,不同的划分方式会对最终评测分数产生明显影响,大家用同一个划分才能横向比较模型优劣。
整个数据集的样本量级在两千多个片段,这个规模说不上大,尤其在深度学习时代,两千多条样本训一个稍大一点的模型是很容易过拟合的。但考虑到每个样本都携带四组人工标注的细粒度情感标签,标注成本已经相当高了。如果换成一个两万条样本的版本,人工标注的投入会是现在的十倍不止,质量控制难度也完全不是一个量级。
数据集中每个片段都配有对应的中文文本转写、原始音频和原始视频帧序列。研究人员可以自由选择抽取特征的方式,比如用预训练语言模型跑文本表征,用音频工具抽声学特征,用视觉模型或者人工规则抽面部特征。相比那些只提供特征不提供原始数据的老数据集,CH-SIMS在特征选择上留出了很大自由度。
3.2 连续情感标签长什么样
CH-SIMS的情感标签不是简单的"正/负/中性"三分类,而是连续值分数,从-1到1。标注员在判断时会考虑情感的强度和正负方向,比如同样属于负面,"讨厌"和"崩溃"在强度上就有明显区别,连续值能够体现这种细微差异。
这种连续标注方式在实际使用中会有两种处理路径。一种是保留连续值,训练回归模型,直接用MAE和相关系数来评估,适合需要精细情感强度的场景,比如舆论分析、用户情绪波动监测。另一种是把它离散化成三分类或二分类,比如把大于某个阈值的归为正面、小于阈值的归为负面,再训练分类模型。两种做法各有各的适用场景,我在复现的时候发现,离散化后丢掉的情感强度信息其实是很宝贵的,尤其在分析反讽或者混合情感时,连续值的优势尤其明显。
从整体分布来看,CH-SIMS的样本并不是正负样本完全均衡的。这符合真实对话的常态,日常交流里中性偏负面的表达其实占据不少比例,真正大悲大喜的极端情绪反而不常见。这个分布对于做测试倒是有些好处:如果一个模型在CH-SIMS上能跑出不错的MAE和相关性,说明它对真实对话的情感强度把控是稳的,而不只是靠死记硬背几个极端样本。
3.3 模态不一致不是异常,而是最有价值的研究素材
我在前面反复提到模态不一致,这在CH-SIMS里到底占多大比例?按照我阅读论文和实际跑数据的感受,这个比例绝对不小。你可以自己想想日常生活里有多少次说话内容和语气是错位的:嘴上说着"没事"其实语气低落,嘴上说着"太好了"其实带着嘲讽;或者反过来,嘴上说着"真烦"但语气是轻松的,说明只是在跟朋友撒娇式抱怨。
CH-SIMS把这些不一致现象原原本本地记录了下来。文本标签是正面的,音频标签可能是中性的,视觉标签可能是负面的;整体标签则可能是三者融合后的某种妥协结果。这种记录方式让研究者第一次可以在大规模数据上统计"哪些模态组合更容易产生冲突","冲突时整体情感更偏向哪个模态"。
我自己在分析数据时发现一件很有意思的事:当文本和音频标签冲突时,整体标签常常更偏向音频。这个结果其实跟日常交流经验对得上——比起字面说了什么,语音的节奏、语气、音量和停顿更能反映说话者的真实态度。而当视觉标签与文本标签冲突时,情况就变得复杂一些,具体的偏向性要看场景和说话人。这种"模态偏向规律"在只有整体标签的老数据集上根本无法观察到,可以说是CH-SIMS带给这个领域最有价值的信息之一。
4. 基线实验告诉你的事:融合方法在这里的真实表现
4.1 特征提取与评估协议
再好的数据集,也得有可靠的实验设置才能发挥价值。CH-SIMS论文在发布数据集的同时,给出了一套标准的特征提取方案和一组基线模型,这套协议基本成了后续研究者复现和对比的默认配置。
特征提取方面,论文采用的做法在那个时期很典型:视觉特征用OpenFace抽取,主要包含面部动作单元、头部姿态、视线方向这些面部信号;音频特征用COVAREP抽取,包括基频F0、声门源参数、语音质量等声学属性;文本特征用预训练语言模型生成语义表征,那个时间点首选自然是BERT,中文场景下用的是BERT的中文预训练版本。三个模态的原始特征抽取之后还需要做时间对齐,因为视频通常是30帧每秒,而COVAREP输出的音频特征频率更高,不对齐的话融合层直接拼接肯定会出问题。
评估指标方面,多模态情感分析的惯例基本上被完整保留:MAE衡量预测值和真实标签的平均绝对误差,相关系数衡量预测趋势和真实趋势的一致性,ACC-2和F1用于二分类效果评估,ACC-7则用于七分类情感强度的精细评估。CH-SIMS因为同时有单模态标签和整体标签,所以实验报告里除了整体情感预测的得分,还会分别列出文本、音频、视觉单模态预测的得分,方便研究人员看清每种融合方法到底从哪个模态上获得了增益。
4.2 实验结果里的三个关键信号
基线模型基本覆盖了当时主流的融合思路:EF-LSTM属于早期融合,三个模态的特征先拼接再进LSTM;LF-LSTM属于晚期融合,三个模态分别过LSTM再汇合;TFN用张量外积建模模态间两两交互和三模态共同交互,是当时理论比较吸引人的代表;MFN引入记忆和注意力机制;LMF是TFN的低秩近似版本,在降低计算量的同时保留交互建模能力;RAVEN则用循环注意力在模态间做迁移。
看完这些基线在CH-SIMS上的整体效果,有三点让我印象特别深。
第一,多模态融合模型整体优于单模态模型,这符合预期,说明三个模态确实携带了互补信息。但注意,这里说的优于是站在整体平均水平上看的,具体到某些样本,单模态模型反而可能比融合模型更准,尤其是那些模态间冲突严重的样本。
第二,不同融合方法之间的性能差距没有想象中那么大。大几十个点的差异通常出现在"用不用多模态"之间,而不是"用哪种多模态融合"之间。TFN这种复杂模型的增益并没有压倒性优势,甚至在训练数据量有限时更容易过拟合。这个现象其实给后续研究者提了个醒:与其花大量时间设计花哨的融合模块,不如把单模态编码器做强,或者优化训练策略。
第三,由于CH-SIMS提供单模态标签,研究者可以清楚看到"哪个模态更强"。文本模态通常贡献最大,因为很多情感线索直接藏在语义里;视觉模态的贡献也不可忽视,尤其在标注员判断情感时表情往往透露真实态度;音频模态单独看起来效果一般,但当它和文本模态冲突时,它能起到关键纠偏作用。这种归因分析在老数据集上是做不出来的。
4.3 复现CH-SIMS时的几个坑
说点实际的,如果你想在CH-SIMS上跑实验,我在复现过程中踩过的坑直接整理给你。
时间对齐是第一道坎。OpenFace输出的视觉特征是逐帧的,COVAREP输出的音频特征频率更高,两者不能直接拼在一起。你需要先把所有特征统一到一个时间轴上,常见做法是把不同特征用插值方式重采样到同一个帧率,再进行拼接。这里如果偷懒不做对齐,模型训练过程可能会正常跑完,但效果会莫名其妙地差一截。
中文BERT的输入长度也是个要留意的问题。CH-SIMS的片段虽然短,但中文句子在BERT分词器的切分下仍然可能超出512个token的限制。好在多数样本实际长度没有这么夸张,但你仍然需要在处理流程里写好截断逻辑,保证长文本不会直接报错或者被粗暴丢弃。
标签处理口径要统一。我在第一轮实验里直接用原始连续标签做回归,效果一般;后来尝试把标签离散化成五分或七分,用分类目标来训练,分数有一段明显的提升。后续查阅论文和开源代码,发现大家做分类实验时阈值的选取方式各不相同,有的用0分做正负分类,有的用均值做偏置。你自己做实验时,最好在论文里把精确的阈值口径写清楚,不然对比起来完全没有意义。
还有一个容易被忽略的问题是训练策略。两千多个样本的规模真的不大,复杂模型非常容易过拟合。Dropout、权重衰减、早停这些手段一个都不能少。我尝试用更大的预训练模型提取文本特征时发现,如果文本encoder只在最终融合输出上加监督信号,中间层很容易训练不到位;而CH-SIMS的单模态标签允许你在文本、音频、视觉分支上分别加辅助loss,这个技巧在复现里给了我很大的收益。
5. 围绕CH-SIMS长出来的研究方向,以及它当前的天花板
5.1 从"整体融合"走向"细粒度建模"
CH-SIMS出现之后,多模态情感分析领域明显多了一个研究分支:模态不一致建模。以前大家默认不同模态是在表达同一种情感,任务只是把这种情感检测出来;CH-SIMS用大量样本告诉大家,模态之间经常"吵架",文本说正面的,音频说负面的,画面又是一种态度。研究者开始认真思考怎么让模型学会给每个模态分配动态权重。
顺着这个思路,后来很多工作开始用注意力机制来实现模态间的动态协商,我印象里一些方法会专门设计跨模态注意力模块,让模型在推理时为每个片段动态决定信任哪个模态更多一点。也有工作把模态不一致当成一种数据增强手段,比如在训练时随机遮盖某个模态,强迫模型学会即使缺少某个模态也能做出合理判断。这些思路有一个共同基础:都需要细粒度模态标签作为支撑。没有CH-SIMS这类数据,这些实验方案根本无从谈起。
反讽检测也是受益明显的方向。文本反讽检测在NLP里研究了很长时间,但很多反讽光看文本根本识别不出来,必须结合语气和表情。CH-SIMS里那些"文本和音频冲突"的样本本身就是天然的反讽训练数据,在多模态反讽检测研究上可以说是雪中送炭。
5.2 我眼中的局限与扩展思路
说完了优点,再聊聊CH-SIMS的局限。最大的问题还是规模。两千多个片段对传统机器学习方法绰绰有余,但对预训练模型时代的大模型来说确实不够看。尤其当你需要在大规模参数模型上做微调时,一个epoch很快跑完,没过几步就过拟合了。
数据来源的单一性也需要打个问号。影视剧和综艺节目里的对话虽然接近自然语言,但演员的情绪表达或多或少带有表演成分,和真实生活里普通人说话的方式还有距离。如果你要做的是真实客服对话情感分析、直播间弹幕情感分析或者社交媒体短视频情感分析,CH-SIMS作为训练集肯定存在domain gap,用它做评测集倒是更合适一些。
单模态标签本身的信息量也有局限性。每个单模态标签只是一个连续值情感分,并没有标明这个情感是通过什么样的具体特征表达出来的。比如"文本标签负面",它可能是因为用了负面词汇,也可能是因为用了反讽句式的字面表述,这两者对应到模型内部是截然不同的特征模式。如果能往"细粒度归因"方向再做一层注释,数据集的学术价值还能再上一个台阶。
5.3 我自己用CH-SIMS的实际体会
按照我自己的经验,这套标注协议给人最大的启发是:训练一个多模态模型之前,先得知道每个模态在样本里到底表达了什么。CH-SIMS把这个问题从"靠猜"变成了"可测量",这种思维方式的转变比数据本身更值得借鉴。
如果你手头有中文对话视频数据,也想做情感分析,我的建议是别急着从英文数据集搬经验。先花半天时间把CH-SIMS的标注格式和数据分布吃透,再考虑怎么在你的场景里复刻这套标注协议。哪怕只做文本和音频两个模态的细粒度标注,也会比只标一个整体情感分数带来更多可解释的信息。做研究的人和做工程的人很多时候会在这条路上岔开,但数据标注这件事上,多花一点功夫去记录细粒度信息,后面一定会加倍还回来。