情感识别实践(二):数据标注、数据清洗与数据增强,这些细节决定了模型上限

📅 2026/7/18 23:22:54
情感识别实践(二):数据标注、数据清洗与数据增强,这些细节决定了模型上限
上一篇博客我详细分享了自建情感数据集的必要性以及数据采集阶段踩过的实战坑。很多小伙伴看完都有个误区数据采集完直接跑代码训练模型就完事了其实这是模型训练最大的认知偏差做过完整情感识别项目的朋友都清楚整个项目最耗时、最磨人的环节根本不是调参训练而是繁杂的数据工程工作。我们团队统计了项目全流程的人力投入占比结果颠覆了很多人的固有认知一目了然我们九成的精力都耗费在数据打磨上真正留给模型训练的时间少之又少。再精妙的模型喂进去杂乱、错误、残缺的数据最终也只会得到一坨无法落地的“无效模型”。五、问题三人工标注效率低标签质量难以保证在项目初期为了快速启动任务我们采用了最常规的Excel人工标注方案。操作方式也很简单表格分为两列一列存放原始文本内容一列手动填写情感标签分为积极、消极、中性三类。比如“今天会议效果很好”标注为积极“项目延期了”标注为消极“下周继续讨论”标注为中性。在数据量只有几十、几百条的小规模阶段这种方式完全够用上手快、零学习成本。但随着我们数据集扩充到十几万条的量级后Excel标注的各种弊端彻底暴露严重拖慢了项目进度。整体问题非常集中人工手动输入标签速度极慢且容易出现输错、漏标的情况多人协作标注时每个人的理解标准不一样同一句文本可能标注出不同结果同时表格无法追溯修改记录不清楚是谁改动的数据也没办法量化统计多人的标注一致率。其中最致命的问题就是会议场景的隐性情绪判定偏差。很多语句的情感并不直观非常依赖上下文。比如单独看“这个需求暂时不用做了”开发人员大概率会判定为中性只是单纯的任务调整。但结合完整语境“这个需求暂时不用做了我们重新评估”话语背后藏着否定、风险提醒的负面情绪。单纯依靠标注人员的个人主观判断极易出现标注错误造成严重的标签漂移这也是模型后续效果不佳的核心隐患。解决方案建立标准化标注流程发现Excel批量标注的各类弊端后我们立刻对标注流程进行全面升级。项目团队正式引入Label Studio专业标注平台同时针对性制定了一套适配会议场景的标准化标注规范彻底解决人工标注随意性大、标准不统一的问题。为最大程度降低人为理解偏差我们搭建了双人标注专家复审的闭环标注流程配套落地了四项核心实操规则。第一全量数据双人独立标注每一条文本数据都由两名标注人员互不干扰、独立完成情感标签判定从源头减少单人主观判断的失误。第二设置冲突自动复审机制若两名标注人员的标签结果不一致该条数据会自动筛选出来交由技术专家复核裁定杜绝模糊数据留存。第三搭建专属典型案例库把日常标注中遇到的隐性情绪、歧义语句、争议案例统一汇总归档明确各类场景的标注标准让所有标注人员有参考、不盲从。第四常态化质量抽检定期随机抽查已标注数据及时纠正不规范标注行为持续统一团队标注认知。这套规范化流程落地后效果提升十分显著。我们的数据集标注一致率从最初的82%稳步提升至95%以上彻底解决了标签漂移问题极大提升了数据集的整体质量为后续模型训练、效果调优筑牢了核心的数据基础。六、问题四ASR 文本噪声太多影响模型学习我们本次使用的离线会议数据集全部依赖语音识别ASR转写生成核心依托Whisper模型完成文本转换。不得不说Whisper的识别准确率确实很能打基本可以满足大部分会议场景的转写需求。但在真实落地场景中口语化的会议对话自带大量无效杂音导致转写后的文本存在大量冗余噪声。大家都知道线下开会的沟通是很随意的并不会像书面文字一样严谨规整。会议对话里充斥着大量口头禅、语气词和无意义停顿词比如“嗯……”“那个……”“就是说……”“啊……”还有习惯性的笑声“哈哈哈哈”等无效内容。除此之外ASR转写还会生成大量冗余特殊符号像感叹号、省略号、星号、问号等堆叠符号。同时还会出现高频的重复识别问题比如把口语重复的“好的”识别成“好的好的好的好的”。这些看似不起眼的文本噪声对情感识别模型的负面影响极大。如果我们不做清洗直接用原始数据训练模型模型会错误地将这些无意义的语气词、重复字、特殊符号当作核心特征学习。最终就会出现严重的训练偏差文本中真正承载情绪、表达观点的核心关键词权重被稀释、弱化模型学不到有效情感特征直接导致整体识别精度大幅下滑。解决方案建立统一的数据清洗流程针对上一节提到的大量 ASR 文本噪声我们针对性设计了一套完整的结构化文本清洗流程专门适配会议语音转写场景从根源剔除无效干扰信息。整套流程拆解为六大实操规则层层过滤、逐条规范最大程度还原有效语义。图4文本清洗流程首先我们批量剔除会议高频口头赘词也就是ASR转写最常见的“嗯、啊、那个、就是”同时我们统一全文字符格式规整混杂的全角、半角符号避免格式不统一给模型带来额外学习负担。另外批量清除转写过程中残留的HTML标签、杂乱特殊符号过滤无效占位字符。为了进一步规范文本我们还将全文标点统一为标准中文格式解决中英文标点混用的问题。最后搭配自定义场景停用词词典精准过滤所有无意义通用词汇只保留承载核心语义、带有情感倾向的有效文本。整套清洗流程落地后效果十分明显原本杂乱、冗余的ASR文本变得规整统一。彻底剔除无效噪声后模型训练不会再被冗余信息干扰能够精准聚焦文本核心语义与情感特征大幅提升了情感识别的学习效率与准确率。七、问题五类别不平衡模型只会预测中性完成数据标注和清洗工作后我们第一时间对整体数据集的分布情况做了统计复盘结果发现了一个非常典型且致命的问题样本类别极度不均衡。本次会议情感数据集各类别数据量级分布如下中性样本共计 82000 条、积极样本 26000 条、消极样本 18000 条而风险类样本仅有 4000 条。从数据分布能直观看出中性数据占比碾压其他所有类别几乎占据了数据集的大半部分而能够体现关键情感和风险的样本数量极少。这里提醒大家一个建模误区很多人觉得数据量越大模型效果就越好但忽略了类别平衡的问题。如果我们直接用这套不均衡数据去训练模型最终会出现非常严重的拟合偏差。模型为了无脑拉高整体准确率会极度偏向预测“中性”标签。哪怕整体准确率看似很漂亮实则是虚假指标。模型根本没有学好积极、消极尤其是风险场景的情感特征在真实测试场景中极易漏判、误判关键情绪完全达不到落地使用的标准。这就是深度学习中经典的类别不平衡Class Imbalance问题也是情感识别、异常识别项目中最常见的坑。如果不做针对性的数据优化前期的标注、清洗工作再到位模型也依旧无法产出优质效果。解决方案重采样 Loss 优化为了彻底解决数据集类别不均衡、模型偏向中性预测的问题我们采用了数据层过采样 训练层Loss权重优化的组合方案双维度优化模型训练效果避免单一优化方式带来的拟合缺陷。方法一过采样Oversampling第一种方案是过采样Oversampling。简单来说就是针对性扩充少数类样本数量平衡整体数据分布。我们没有改动占比过高的中性样本而是聚焦风险、消极这类稀缺样本通过合理扩充、样本增强的方式补齐数据短板。以最难识别的风险样本为例原始数据仅4000条经过过采样扩充至16000条。充足的样本让模型能够充分捕捉会议场景中各类隐性风险语句的表达特征彻底解决模型学不到风险语义的问题。例如风险4000↓风险16000这样模型能够学习到更多风险情绪的表达方式。方法二类别权重Class Weight第二种方案是类别权重优化Class Weight。单纯的数据扩充仍有局限因此我们在模型训练阶段对损失函数做了优化。核心逻辑非常贴合实战样本数量越少的类别赋予的Loss权重越高。例如class_weight {积极:1.0,中性:0.6,消极:1.4,风险:2.0}结合本次数据集分布我们配置的权重为积极1.0、中性0.6、消极1.4、风险2.0。大幅压低海量中性样本的训练权重拉高稀缺的消极、风险样本权重。八、问题六数据量不足模型容易过拟合完成数据标注、清洗以及样本均衡优化之后我们的数据集已经具备了基础训练条件整体数据体量看起来也比较可观。但在实际模型训练测试中我们又遇到了一个高频且棘手的问题细粒度情感数据不足导致模型出现严重的过拟合现象。纵观整套数据集通用的积极、中性、消极情感样本数量充足完全可以支撑模型学习基础语义特征。但我们的会议情感识别场景包含了风险、质疑、犹豫等高价值细粒度情感分类。这类情感在日常会议对话中出现频次低、表达隐蔽对应的标注样本数量十分有限。对于深度学习模型来说细分场景的少量样本根本不足以支撑充分训练。模型无法学习到这类细粒度情感的通用表达规律只能机械记忆训练集中的文本特征这就直接触发了典型的过拟合问题。最直观的训练反馈就是两极分化模型在训练集上的准确率表现亮眼各项指标都十分完美。但一旦切换到测试集做泛化验证效果就会大幅下滑识别准确率骤降。这种模型看似训练效果优秀实则泛化能力极差根本无法落地应用到真实的会议场景中。解决方案数据增强Data Augmentation为了提升模型的泛化能力我们采用了多种数据增强策略。① 同义词替换同义词替换增强也是文本数据增强最基础、最稳妥的方式。会议场景的文本表达非常灵活同样的情绪和语义可以通过多种词汇、句式表达。我们基于开源词向量词典构建了场景专属同义词库在不改变句子核心语义、不偏移情感标签的前提下对句子中的普通实词进行合理替换。例如项目延期了↓项目推迟了两句语义完全一致情感标签同样为消极但文本表达方式完全不同。这种增强方式几乎不会产生噪声能够低成本扩充同类样本的表达方式让模型学习到同一情感下的不同话术特征避免模型单一记忆固定句式。② 随机删除随机无义词汇删除。结合前文提到的ASR转写文本特点会议口语中存在大量冗余修饰词、铺垫词汇这类词语不承载核心语义和情感完全不影响句子本意。我们通过规则过滤模型判别随机删除文本中的无效修饰词汇生成新的等效样本。例如这个方案确实还是不错的↓这个方案还是不错的句子积极的核心情感、整体语义没有任何变化但文本结构产生了细微差异。长期来看这种方式能避免模型过度依赖特定句式结构提升模型对口语化文本的兼容性和容错率。③ 回译增强回译增强也是我们在本次项目中使用率最高、效果最好的增强方式之一。简单来说就是借助翻译接口先将中文文本翻译成英文再将英文译文反向翻译回中文。经过两轮翻译迭代后句子会在保留核心语义和情感的前提下生成全新的句式表达。例如目前存在一定风险。↓当前仍存在一定风险。整体意思、风险标签完全不变但是用词和句式有了差异化。相比于简单的同义词替换回译生成的文本更加自然、句式变化更丰富能有效打破原始文本的句式固化问题极大丰富样本多样性且几乎不会出现语义错乱的问题。④ 大模型辅助生成大模型辅助样本生成专门用来解决风险、质疑、犹豫这类极少样本类别的数据短板。常规的数据增强方式都是基于已有样本改造很难生成全新场景的语句对稀缺类别的扩充效果有限。因此我们针对性使用大语言模型辅助生成数据。我们给大模型设定精准的场景Prompt限定会议沟通场景、指定对应情感标签让模型批量生成符合真实会议语境的全新文本样本。为了杜绝生成噪声数据、错误标签数据我们建立了严格的人工审核机制所有AI生成的样本必须经过标注人员二次校验剔除语义不通、标签漂移、不符合会议场景的无效数据只保留高质量合规样本并入训练集。这套组合式数据增强方案落地后效果提升非常显著。不仅高效补齐了细粒度、小众情感类别的样本短板大幅提升了数据集的丰富度同时全程把控数据质量没有引入无效噪声。最终彻底解决了模型过拟合问题训练集、测试集指标趋于平稳模型的真实泛化能力和落地识别精度得到了质的提升。九、Python 数据清洗示例下面给出一个实际项目中使用的文本清洗示例便于大家快速上手。import reSTOP_WORDS [嗯, 啊, 那个, 就是, 然后]def clean_text(text):# 去除特殊字符text re.sub(r[^\u4e00-\u9fa5a-zA-Z0-9。], , text)# 去除停用词for word in STOP_WORDS:text text.replace(word, )# 去除重复字符如好好好好text re.sub(r(.)\1{2,}, r\1, text)return text.strip()sample 嗯这个方案真的真的真的很好print(clean_text(sample))输出结果这个方案真的很好这段代码虽然简单但在实际工程中配合停用词词典、正则规则和批量处理脚本可以大幅提升数据质量为后续模型训练提供更加稳定的输入。————————————————版权声明本文为CSDN博主「HySpark」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。原文链接https://blog.csdn.net/HySpark/article/details/162877131