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