情感识别实践(一):从零构建情感数据集,踩过的坑都在这里
用户真正关心的是:"他说这句话的时候,到底是在生气、开心、质疑还是抱怨?"
这就是情感识别(Sentiment Analysis)的价值所在。
最近在迭代**熙瑾会悟(离线转记)**项目时,我们新增了情感识别模块,希望能够在会议记录、访谈纪要以及业务沟通中,自动分析说话人的情绪状态,为后续的风险分析、重点事件提取、智能摘要等能力提供基础数据支撑。
然而真正开始训练模型以后,第一个难题并不是模型,而是数据集。
网上公开的数据集很多,但真正能直接应用到离线转记场景的数据却非常少。很多数据要么过于口语化,要么都是微博评论、电商评价,与会议、访谈、业务交流等正式场景存在较大差异,模型训练出来的效果并不理想。
于是,我们最终决定:自己构建一套适用于离线转记场景的情感数据集。
一、为什么要自己构建情感数据集?
很多同学第一反应都会想到:
不是已经有很多公开数据集了吗?
例如:
数据集 | 应用场景 | 存在的问题 |
ChnSentiCorp | 酒店评论 | 偏向评论语料 |
NLPCC | 微博评论 | 网络语言较多 |
SMP | 社交平台 | 与会议语境差异较大 |
CLUE Emotion | 新闻文本 | 缺少真实对话 |
这些数据集用于论文实验完全没有问题,但是放到实际业务中,会发现很多问题。
举个例子:
"这个方案暂时先放一下。"
如果放在评论场景,它可能属于中性。
但是在会议里面,这句话往往意味着:
①不认可
②暂停推进
③否定方案
④风险提示
情感实际上偏向消极。
再比如:
这个问题后面我们再讨论。
很多公开模型会认为这是中性。
但结合上下文,很可能表达的是:
"目前我不认可你的方案。"
因此,仅依赖公开数据训练出来的模型,在会议场景中的准确率会明显下降。
经过几轮测试,我们发现:
模型的问题,80%其实来自数据。
所以,我们决定重新设计适合离线转记场景的数据集。
二、离线转记情感数据集整体构建流程
整个数据集构建过程并不是简单地收集文本,而是经历了数据采集、清洗、标注、增强、审核以及训练多个阶段。
下面是整个流程。
图1:离线转记情感数据集构建流程
整个流程中,我们主要采用了以下技术:
技术 | 作用 |
Whisper | 离线语音转文字 |
Python | 数据处理 |
Pandas | 数据统计 |
jieba | 中文分词 |
正则表达式 | 文本清洗 |
Label Studio | 人工标注 |
BERT | 文本情感分类 |
RoBERTa | 深层语义建模 |
MacBERT | 中文语义优化 |
PyTorch | 模型训练 |
其中,真正耗费时间最多的,并不是训练模型,而是前面的数据准备阶段。
三、问题一:数据来源杂乱,语料质量参差不齐
这是我们遇到的第一个问题。
离线转记的数据来源非常复杂,例如:
①会议录音
②电话录音
③培训视频
④访谈节目
⑤客服语音
⑥政务会议
⑦企业内部讨论
这些数据最大的特点就是:
非常真实,也非常"脏"。
例如:
嗯...
那个...
这个...
啊...
就是...
其实吧...
还有大量:
哈哈哈哈
(笑)
......
嗯嗯嗯
好的好的好的
甚至还有:
(敲门声)
(咳嗽)
(掌声)
(环境噪音)
如果直接用于训练模型,会导致模型大量学习这些没有意义的信息。
模型最终会认为:
"哈哈哈哈"
比真正的业务内容更重要。
这是典型的数据污染。
解决方案
我们的第一步就是建立统一的数据清洗流程。
主要包括:
✅ 去除 ASR 噪声
啊
嗯
额
那个
就是
然后
全部过滤。
✅ 去除特殊字符
例如:
*****
。。。
!!!
???
……
统一规范。
✅ 去除重复文本
例如:
好的好的好的好的
统一处理成
好的
✅ 删除无意义停用词
例如:
就是
然后
其实
基本上
差不多
通过停用词词典进行过滤。
整个流程如下:
原始文本
↓
ASR纠错
↓
特殊字符清洗
↓
停用词过滤
↓
重复文本去重
↓
标准化文本
经过这一轮处理后,我们的数据质量提升了很多。
模型训练时 Loss 曲线明显更加平滑,收敛速度也提升了不少。
四、问题二:情感标签定义混乱,人工标注一致性低
第二个问题,其实比数据清洗更棘手。
最开始,我们让不同的同事对同一批文本进行情感标注。
结果发现,同一句话,不同的人给出的标签完全不同。
例如:
这个方案可以,不过风险还是比较大。
有人标记:
积极
有人认为:
中性
还有人直接标记:
消极
后来分析原因才发现,并不是大家理解能力不同,而是没有统一的标注标准。
如果数据标签本身就是混乱的,再好的模型也学不到正确的规律。
解决方案
针对这一问题,我们重新设计了适用于离线转记业务的情感标签体系,不再简单划分为"积极、消极、中性",而是结合会议场景增加业务语义。例如:
一级标签 | 二级标签 | 示例 |
积极 | 认可、支持、满意 | "这个方案可以继续推进。" |
中性 | 描述、陈述、说明 | "项目计划下周上线。" |
消极 | 否定、质疑、抱怨 | "目前风险还是比较大。" |
风险 | 警告、异常、延期 | "这个节点可能无法按时完成。" |
同时,我们制定了统一的标注规范:
①每条数据至少由2 名标注人员独立标注;
②标签不一致时进入复审流程;
③对存在争议的样本建立案例库,持续优化标注规则;
④定期统计标注一致率(如 Cohen's Kappa),评估数据质量。
经过几轮迭代,标注一致率显著提升,模型训练得到的数据基础也更加稳定。
数据集构建总体架构(中文版)
图2:熙瑾会悟离线转记情感数据集构建整体架构(中文版)