65.28%准确率达成:COSMIC模型情感识别全流程实战指南
你是否在对话情感识别(Emotion Recognition in Conversations, ERC)任务中遇到上下文传播困难、情感迁移检测不准确的问题?本文将系统介绍如何使用当前性能最优的COSMIC模型(65.28% W-Avg F1分数),从环境配置到模型训练的完整落地流程,帮助你解决实际应用中的技术痛点。
读完本文你将掌握:
- 对话情感识别(ERC)的核心挑战与解决方案
- COSMIC模型的原理与 Commonsense(常识)知识融合策略
- 四大数据集(IEMOCAP/DailyDialog/MELD/EmoryNLP)的环境配置与训练技巧
- 特征工程全流程:从RoBERTa预训练到COMET常识提取
- 性能调优指南与常见问题排查方法
项目概述:对话情感识别技术现状
ERC任务定义与挑战
对话情感识别(Emotion Recognition in Conversations, ERC)是指从对话文本中识别出每个 utterance( utterance(话语))的情感类别。与传统文本情感分析相比,ERC需要特别关注:
- 上下文依赖:当前话语情感受历史对话影响
- 说话人状态:不同参与者的情感交互关系
- 情感迁移:对话过程中的情感变化规律
现有方法中,COSMIC(COmmonSense knowledge for eMotion Identification in Conversations)通过融合常识知识(如心理状态、事件因果关系),在四大基准数据集上均取得SOTA性能:
| 模型 | IEMOCAP W-Avg F1 |
DailyDialog Macro F1 |
MELD 7-cls F1 |
EmoryNLP 7-cls F1 |
|---|---|---|---|---|
| RoBERTa | 54.55% | 48.20% | 62.02% | 37.29% |
| RoBERTa+DialogueRNN | 64.76% | 49.65% | 63.61% | 37.44% |
| RoBERTa+COSMIC | 65.28% | 51.05% | 65.21% | 38.11% |
COSMIC模型架构
COSMIC创新性地引入常识知识增强对话情感识别,其核心架构包含:
flowchart TD
A[输入对话] --> B[RoBERTa编码]
B --> C[上下文特征]
A --> D[COMET常识提取]
D --> E[心理状态/因果关系特征]
C --> F[情感分类器]
E --> F
F --> G[情感标签输出]
- RoBERTa模块:提取上下文相关的语义特征
- COMET模块:生成常识知识特征(如事件因果、心理状态)
- 融合分类器:结合语义特征与常识特征进行情感预测
环境准备与依赖安装
系统要求
- Python 3.6+
- PyTorch 1.0+
- 至少8GB GPU内存(推荐12GB+)
- 磁盘空间≥5GB(用于存储模型和特征文件)
快速安装
# 克隆仓库
git clone https://gitcode.com/gh_mirrors/co/conv-emotion
cd conv-emotion
# 创建虚拟环境
conda create -n cosmic python=3.7
conda activate cosmic
# 安装基础依赖
pip install torch torchvision pandas scikit-learn numpy tqdm
# 安装PyTorch Geometric(图神经网络依赖)
pip install torch-geometric torch-scatter torch-sparse torch-cluster torch-spline-conv -f https://pytorch-geometric.com/whl/torch-1.8.0+cu111.html
数据集与特征准备
支持的数据集
COSMIC支持四大对话情感分析基准数据集,数据集结构如下:
COSMIC/feature-extraction/
├── iemocap/ # IEMOCAP数据集
│ ├── iemocap.pkl # 特征文件
│ └── iemocap_sentences.pkl # 原始句子
├── dailydialog/ # DailyDialog数据集
├── meld/ # MELD数据集
└── emorynlp/ # EmoryNLP数据集
特征提取全流程
1. 下载预训练模型与特征
cd COSMIC/feature-extraction
# 下载RoBERTa预训练模型
wget https://dl.fbaipublicfiles.com/fairseq/models/roberta.large.tar.gz
tar -zxvf roberta.large.tar.gz
# 下载COMET常识特征(需手动下载后上传)
# 特征文件地址:https://drive.google.com/file/d/1TQYQYCoPtdXN2rQ1mR2jisjUztmOzfZr/view
mkdir -p erc-training/features
# 将下载的features.zip解压到erc-training/features
2. 提取RoBERTa特征(以IEMOCAP为例)
# 初始化数据集
python roberta_init_iemocap.py
# 数据预处理
bash roberta_preprocess_iemocap.sh
# 训练RoBERTa模型
bash roberta_train_iemocap.sh
# 提取特征
python roberta_feature_extract_iemocap.py
3. 提取COMET常识特征
# 下载COMET预训练模型(需手动下载)
# 模型地址:https://drive.google.com/file/d/1vNi4TViLKX_V_wGVXfhpvKimqMjhGBNX/view
mkdir -p comet/pretrained_models
# 将atomic_pretrained_model.pickle放入pretrained_models目录
# 提取所有数据集的常识特征
python comet_feature_extract_all.py
模型训练与评估
训练命令详解
COSMIC针对不同数据集提供了优化的训练脚本,位于COSMIC/erc-training/目录下:
IEMOCAP数据集训练
cd COSMIC/erc-training
python train_iemocap.py --active-listener \
--attention simple \
--dropout 0.5 \
--rec_dropout 0.3 \
--lr 0.0001 \
--epochs 60 \
--batch-size 32
关键参数说明:
--active-listener:启用主动听者机制,增强对话上下文建模--attention:注意力机制类型(simple/complex)--dropout: dropout(丢弃率),防止过拟合--lr:学习率(建议IEMOCAP使用0.0001,DailyDialog使用0.00005)
DailyDialog数据集训练
python train_dailydialog.py --active-listener \
--class-weight \
--residual \
--lr 0.00005 \
--epochs 80
MELD情感分类训练
python train_meld.py --active-listener \
--classify emotion \
--mu 0 \
--l2 0.00003 \
--epochs 60
评估指标与结果分析
训练完成后,模型会自动输出以下评估指标:
- Weighted Avg F1(加权平均F1分数)
- Macro F1(宏平均F1分数)
- 每个情感类别的精确率、召回率和F1分数
以IEMOCAP数据集为例,预期输出:
Weighted Avg F1: 65.28%
Class F1 Scores:
Happy: 68.32%
Sad: 62.15%
Angry: 70.41%
Neutral: 63.58%
Excited: 59.82%
Frustrated: 67.23%
高级调优与常见问题解决
性能优化技巧
-
学习率调度:对于收敛困难的数据集,可添加学习率衰减:
--lr-scheduler reduce_on_plateau -
特征融合策略:尝试不同的特征融合方式:
--fusion concat # 拼接融合(默认) # 或 --fusion gated # 门控融合 -
数据增强:对小数据集应用对话重排序增强:
python data_augmentation.py --dataset iemocap --aug-rate 0.2
常见问题排查
问题1:GPU内存不足
解决方法:
- 减小batch size:
--batch-size 16 - 使用梯度累积:
--gradient-accumulation-steps 2 - 降低模型复杂度:
--hidden-dim 128(默认256)
问题2:模型过拟合
解决方法:
- 增加dropout:
--dropout 0.6 --rec_dropout 0.4 - 添加L2正则化:
--l2 0.0001 - 使用早停策略:
--early-stop 10(10轮无提升则停止)
问题3:COMET特征提取失败
解决方法:
- 检查Java环境(COMET依赖Java)
- 确认预训练模型路径正确
- 降低并发数:
python comet_feature_extract_all.py --num-workers 2
实际应用案例
情感分析API部署
将训练好的模型部署为REST API:
from flask import Flask, request, jsonify
import torch
app = Flask(__name__)
model = torch.load('COSMIC/erc-training/saved_models/iemocap_best.pth')
model.eval()
@app.route('/predict', methods=['POST'])
def predict():
data = request.json
dialog = data['dialog'] # 格式: [" utterance 1", " utterance 2", ...]
# 特征预处理...
with torch.no_grad():
emotions = model.predict(dialog)
return jsonify({"emotions": emotions})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
多模态情感分析扩展
COSMIC可扩展为多模态情感分析系统,融合文本、语音和视觉特征:
flowchart TD
A[文本输入] --> B[RoBERTa特征]
C[语音输入] --> D[MFCC特征]
E[视频输入] --> F[面部表情特征]
B --> G[特征融合]
D --> G
F --> G
G --> H[COSMIC分类器]
H --> I[情感输出]
总结与未来展望
COSMIC通过创新性地引入常识知识,解决了传统对话情感识别模型在上下文传播和情感迁移检测上的不足。本文详细介绍了从环境配置、特征提取到模型训练的完整流程,并提供了实用的调优技巧和问题解决方案。
未来工作方向:
- 探索更大规模的预训练语言模型(如GPT-3、LLaMA)与COSMIC的结合
- 研究动态对话图结构建模,适应更复杂的多轮对话场景
- 开发低资源语言的对话情感识别模型
通过本文的指南,你可以快速复现SOTA性能的对话情感识别系统,并将其应用于情感分析、对话系统、心理健康等实际场景中。
kernelopenEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。C0105
baihu-dataset异构数据集“白虎”正式开源——首批开放10w+条真实机器人动作数据,构建具身智能标准化训练基座。00
mindquantumMindQuantum is a general software library supporting the development of applications for quantum computation.Python059
PaddleOCR-VLPaddleOCR-VL 是一款顶尖且资源高效的文档解析专用模型。其核心组件为 PaddleOCR-VL-0.9B,这是一款精简却功能强大的视觉语言模型(VLM)。该模型融合了 NaViT 风格的动态分辨率视觉编码器与 ERNIE-4.5-0.3B 语言模型,可实现精准的元素识别。Python00
GLM-4.7GLM-4.7上线并开源。新版本面向Coding场景强化了编码能力、长程任务规划与工具协同,并在多项主流公开基准测试中取得开源模型中的领先表现。 目前,GLM-4.7已通过BigModel.cn提供API,并在z.ai全栈开发模式中上线Skills模块,支持多模态任务的统一规划与协作。Jinja00
AgentCPM-Explore没有万亿参数的算力堆砌,没有百万级数据的暴力灌入,清华大学自然语言处理实验室、中国人民大学、面壁智能与 OpenBMB 开源社区联合研发的 AgentCPM-Explore 智能体模型基于仅 4B 参数的模型,在深度探索类任务上取得同尺寸模型 SOTA、越级赶上甚至超越 8B 级 SOTA 模型、比肩部分 30B 级以上和闭源大模型的效果,真正让大模型的长程任务处理能力有望部署于端侧。Jinja00