上一篇博客,我详细分享了自建情感数据集的必要性,以及数据采集阶段踩过的实战坑。很多小伙伴看完都有个误区:数据采集完,直接跑代码训练模型就完事了?
其实这是模型训练最大的认知偏差!做过完整情感识别项目的朋友都清楚,整个项目最耗时、最磨人的环节,根本不是调参训练,而是繁杂的数据工程工作。
我们团队统计了项目全流程的人力投入占比,结果颠覆了很多人的固有认知:
一目了然,我们九成的精力都耗费在数据打磨上,真正留给模型训练的时间少之又少。
再精妙的模型,喂进去杂乱、错误、残缺的数据,最终也只会得到一坨无法落地的“无效模型”。
五、问题三:人工标注效率低,标签质量难以保证
在项目初期,为了快速启动任务,我们采用了最常规的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 re
STOP_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