对话中的情感识别
注意
对于询问如何提取视觉和音频特征的人,请查看以下链接:https://github.com/soujanyaporia/MUStARD
更新 🔥 🔥 🔥
日期 | 公告 |
---|---|
2024年3月10日 | 如果您对测试大语言模型的IQ感兴趣,请查看我们的新工作:AlgoPuzzleVQA |
2021年8月3日 | 🎆 🎆 我们发布了一个新的数据集M2H2:用于对话中幽默识别的多模态多方印地语数据集。请查看:M2H2。M2H2数据集的基线是基于DialogueRNN和bcLSTM创建的。 |
2021年5月18日 | 🎆 🎆 我们发布了一个新的代码库,其中包含用于解决对话中情感原因识别问题的模型。请查看:emotion-cause-extraction。感谢Pengfei Hong整理这些内容。 |
2020年12月24日 | 🎆 🎆 对识别对话中的情感原因感兴趣吗?我们刚刚为此发布了一个数据集。请前往https://github.com/declare-lab/RECCON。 |
2020年10月6日 | 🎆 🎆 对话中情感识别的新论文和最先进成果。请参考目录COSMIC中的代码。阅读论文 -- COSMIC: COmmonSense knowledge for eMotion Identification in Conversations。 |
2020年9月30日 | 发布了句级对话理解的新论文和基线。请阅读我们的论文Utterance-level Dialogue Understanding: An Empirical Study。Fork代码。 |
2020年7月26日 | 发布了新的DialogueGCN代码。请访问https://github.com/declare-lab/conv-emotion/tree/master/DialogueGCN-mianzhang。所有功劳归功于Mian Zhang(https://github.com/mianzhang/) |
2020年7月11日 | 对阅读ERC或相关任务(如对话中的讽刺检测)的论文感兴趣吗?我们汇编了一份全面的论文阅读清单。请访问https://github.com/declare-lab/awesome-emotion-recognition-in-conversations |
2020年6月7日: | ERC任务的新的最先进结果将很快发布。 |
2020年6月7日: | conv-emotion 仓库将在 https://github.com/declare-lab/ 上维护 |
2019年12月22日: | DialogueGCN的代码已发布。 |
2019年10月11日: | 新论文:用于情感识别的对话迁移学习。 |
2019年8月9日: | 关于对话中情感识别(ERC)的新论文。 |
2019年3月6日: | 在MELD数据集上训练DialogueRNN的特征和代码已发布。 |
2018年11月20日: | ICON和DialogueRNN的端到端版本已发布。 |
COSMIC是该仓库中表现最好的模型,请访问以下链接比较不同ERC数据集上的模型。
该仓库包含几种对话中情感识别方法的实现,以及识别对话中情感原因的算法:
与其他情感检测模型不同,这些技术考虑了参与方状态和参与方间依赖关系,以建模与情感识别相关的对话上下文。所有这些技术的主要目的是为同理心对话生成预训练情感检测模型。
情感识别对于同理心和情感对话生成非常有用 -
数据格式
这些网络需要对话中每个话语的情感/情绪标签和说话者信息,如
参与者1:我讨厌我的女朋友 (愤怒)
参与者2:你有女朋友?! (惊讶)
参与者1:是的 (愤怒)
然而,该代码可以适应只有前面的话语作为上下文可用的任务,而没有相应的标签,目标是只标记当前/目标话语。例如,上下文是
参与者1:我讨厌我的女朋友
参与者2:你有女朋友?!
目标是
参与者1:是的 (愤怒)
其中目标情感是_愤怒_。 此外,该代码还可以被改造成端到端的方式训练网络。我们很快会推出这些有用的更改。
当前SOTA结果
方法 | IEMOCAP | DailyDialog | MELD | EmoryNLP | |||
---|---|---|---|---|---|---|---|
加权平均F1 | 宏F1 | 微F1 | 加权平均F1 (3类) | 加权平均F1 (7类) | 加权平均F1 (3类) | 加权平均F1 (7类) | |
RoBERTa | 54.55 | 48.20 | 55.16 | 72.12 | 62.02 | 55.28 | 37.29 |
RoBERTa DialogueRNN | 64.76 | 49.65 | 57.32 | 72.14 | 63.61 | 55.36 | 37.44 |
RoBERTa COSMIC | 65.28 | 51.05 | 58.48 | 73.20 | 65.21 | 56.51 | 38.11 |
COSMIC:用于识别对话中情感的常识知识
COSMIC解决了使用常识知识进行对话级情感识别的任务。这是一个新的框架,它结合了不同的常识元素,如心理状态、事件和因果关系,并在此基础上学习参与对话的对话者之间的互动。目前最先进的方法往往在上下文传播、情感转移检测和区分相关情感类别方面遇到困难。通过学习不同的常识表示,COSMIC解决了这些挑战,并在四个不同的基准对话数据集上实现了情感识别的新的最先进结果。
执行
首先在这里下载RoBERTa和COMET特征,并将它们保存在COSMIC/erc-training
中的适当目录中。然后按如下方式对四个数据集进行训练和评估:
- IEMOCAP:
python train_iemocap.py --active-listener
- DailyDialog:
python train_dailydialog.py --active-listener --class-weight --residual
- MELD Emotion:
python train_meld.py --active-listener --attention simple --dropout 0.5 --rec_dropout 0.3 --lr 0.0001 --mode1 2 --classify emotion --mu 0 --l2 0.00003 --epochs 60
- MELD Sentiment:
python train_meld.py --active-listener --class-weight --residual --classify sentiment
- EmoryNLP Emotion:
python train_emorynlp.py --active-listener --class-weight --residual
- EmoryNLP Sentiment:
python train_emorynlp.py --active-listener --class-weight --residual --classify sentiment
引用
如果您在工作中发现此代码有用,请引用以下论文。
COSMIC: COmmonSense knowledge for eMotion Identification in Conversations. D. Ghosal, N. Majumder, A. Gelbukh, R
<p align="center">
<img src="https://yellow-cdn.veclightyear.com/2b54e442/f9661561-2556-404b-8d11-04d6859c0872.jpg" alt="TL-ERC框架" width="600"/>
</p>
### 设置
1. 使用Conda设置环境:
```bash
conda env create -f environment.yml
conda activate TL_ERC
cd TL_ERC
python setup.py
```
2. 下载数据集文件[IEMOCAP](https://drive.google.com/file/d/1nufbrBJ-LtcROv1MviCHFI7tQE3JnqQR/view?usp=sharing)、[DailyDialog](https://drive.google.com/file/d/13rHLtAMmDsiCP1hZwWqMNcrtkmZF_hK3/view?usp=sharing)并将它们存储在`./datasets/`中。
3. 下载HRED在[Cornell](https://drive.google.com/file/d/1OXtnyJ5nDMmK75L9kEQvKPIyO0xzyeVC/view?usp=sharing)和[Ubuntu](https://drive.google.com/file/d/1T2HLfSvWr7CSrhBuE193XRRXwfLkO_aK/view?usp=sharing)数据集上的预训练权重,并将它们存储在`./generative_weights/`中
4. [可选]:要从对话模型训练新的生成权重,请参考https://github.com/ctr4si/A-Hierarchical-Latent-Structure-for-Variational-Conversation-Modeling。
### 使用预训练权重运行ERC分类器
1. `cd bert_model`
2. `python train.py --load_checkpoint=../generative_weights/cornell_weights.pkl --data=iemocap`。
- 将`cornell`更改为`ubuntu`,将`iemocap`更改为`dailydialog`以用于其他数据集组合。
- 删除`load_checkpoint`以避免初始化上下文权重。
- 要修改超参数,请查看`configs.py`
### [可选]创建ERC数据集分割
1. 在预处理文件中设置[glove](http://nlp.stanford.edu/data/glove.840B.300d.zip)路径。
2. `python iemocap_preprocess.py`。同样适用于`dailydialog`。
### 引用
如果您在工作中发现此代码有用,请引用以下论文。
```bash
Conversational transfer learning for emotion recognition. Hazarika, D., Poria, S., Zimmermann, R., & Mihalcea, R. (2020). Information Fusion.
DialogueGCN: 用于对话情感识别的图卷积神经网络
DialogueGCN(对话图卷积网络)是一种基于图神经网络的ERC方法。我们利用对话者的自身和对话者间依赖关系来为情感识别建模对话上下文。通过图网络,DialogueGCN解决了当前基于RNN方法中存在的上下文传播问题。DialogueGCN天然适用于多方对话。
要求
- Python 3
- PyTorch 1.0
- PyTorch Geometric 1.3
- Pandas 0.23
- Scikit-Learn 0.20
- TensorFlow (可选;tensorboard需要)
- tensorboardX (可选;tensorboard需要)
执行
注意:PyTorch Geometric大量使用CUDA原子操作,是非确定性的来源。为了重现论文中报告的结果,我们建议使用以下执行命令。请注意,此脚本将在CPU上执行。使用以下命令,我们在我们的机器上获得了64.67的加权平均F1分数,在Google Colaboratory上获得了64.44的IEMOCAP数据集加权平均F1分数。
- _IEMOCAP_数据集:
python train_IEMOCAP.py --base-model 'LSTM' --graph-model --nodal-attention --dropout 0.4 --lr 0.0003 --batch-size 32 --class-weight --l2 0.0 --no-cuda
引用
如果您在工作中发现此代码有用,请引用以下论文。
DialogueGCN: A Graph Convolutional Neural Network for Emotion Recognition in Conversation. D. Ghosal, N. Majumder, S. Poria, N. Chhaya, & A. Gelbukh. EMNLP-IJCNLP (2019), Hong Kong, China.
DialogueGCN-mianzhang: Mian Zhang实现的DialogueGCN
论文"DialogueGCN:用于对话情感识别的图卷积神经网络"的Pytorch实现。
运行
您可以非常轻松地运行整个过程。以IEMOCAP语料库为例:
第1步:预处理。
./scripts/iemocap.sh preprocess
第2步:训练。
./scripts/iemocap.sh train
要求
- Python 3
- PyTorch 1.0
- PyTorch Geometric 1.4.3
- Pandas 0.23
- Scikit-Learn 0.20
性能比较
- | 数据集 | 加权F1 |
---|---|---|
原始 | IEMOCAP | 64.18% |
本实现 | IEMOCAP | 64.10% |
致谢
Mian Zhang (Github: mianzhang)
引用
如果您在工作中发现此代码有用,请引用以下论文。
DialogueGCN: A Graph Convolutional Neural Network for Emotion Recognition in Conversation. D. Ghosal, N. Majumder, S. Poria, N. Chhaya, & A. Gelbukh. EMNLP-IJCNLP (2019), Hong Kong, China.
DialogueRNN:用于对话情感检测的注意力RNN
DialogueRNN基本上是一个定制的循环神经网络(RNN),它在对话/对话中即时描述每个说话者的特征,同时建模对话的上下文。该模型可以轻松扩展到多方场景。此外,它还可以用作同理心对话生成的预训练模型。
注意:代码中的默认设置(超参数和命令行参数)适用于BiDialogueRNN+Att。用户需要为其他变体和更改优化设置。
要求
- Python 3
- PyTorch 1.0
- Pandas 0.23
- Scikit-Learn 0.20
- TensorFlow (可选;tensorboard需要)
- tensorboardX (可选;tensorboard需要)
数据集特征
请提取DialogueRNN_features.zip
的内容。
执行
- _IEMOCAP_数据集:
python train_IEMOCAP.py <命令行参数>
- _AVEC_数据集:
python train_AVEC.py <命令行参数>
命令行参数
--no-cuda
:不使用GPU--lr
:学习率--l2
:L2正则化权重--rec-dropout
:循环dropout--dropout
:Dropout--batch-size
:批量大小--epochs
:训练轮数--class-weight
:类别权重(不适用于AVEC)--active-listener
:显式听者模式--attention
:注意力类型--tensorboard
:启用tensorboard日志--attribute
:属性1到4(仅适用于AVEC;1 = 效价, 2 = 激活/唤醒, 3 = 预期/期望, 4 = 力量)
引用
如果您在工作中发现此代码有用,请引用以下论文。
DialogueRNN: An Attentive RNN for Emotion Detection in Conversations. N. Majumder, S. Poria, D. Hazarika, R. Mihalcea, E. Cambria, and G. Alexander. AAAI (2019), Honolulu, Hawaii, USA
ICON
交互式对话记忆网络(ICON)是一个多模态情感检测框架,它从对话视频中提取多模态特征,并将自身和说话者间的情感影响分层建模到全局记忆中。这些记忆生成上下文摘要,有助于预测话语视频的情感倾向。
要求
- python 3.6.5
- pandas==0.23.3
- tensorflow==1.9.0
- numpy==1.15.0
- scikit_learn==0.20.0
执行
-
cd ICON
-
解压数据如下:
- 使用此链接下载IEMOCAP的特征。
- 解压文件夹并将其放在位置:
/ICON/IEMOCAP/data/
。实现此目的的示例命令:unzip {zip文件路径} -d ./IEMOCAP/
-
训练ICON模型:
python train_iemocap.py
用于IEMOCAP
引用
ICON: Interactive Conversational Memory Networkfor Multimodal Emotion Detection. D. Hazarika, S. Poria, R. Mihalcea, E. Cambria, and R. Zimmermann. EMNLP (2018), Brussels, Belgium
CMN
CMN是一个用于双人对话情感检测的神经框架。它利用文本、音频和视觉模态的多模态信号。它特别将说话者特定的依赖关系纳入其架构中进行上下文建模。然后使用多跳记忆网络从这个上下文生成摘要。
要求
- python 3.6.5
- pandas==0.23.3
- tensorflow==1.9.0
- numpy==1.15.0
- scikit_learn==0.20.0
执行
-
cd CMN
-
解压数据如下:
- 使用此链接下载IEMOCAP的特征。
- 解压文件夹并将其放在位置:
/CMN/IEMOCAP/data/
。实现此目的的示例命令:unzip {zip文件路径} -d ./IEMOCAP/
-
训练ICON模型:
python train_iemocap.py
用于IEMOCAP
引用
如果您在工作中发现此代码有用,请引用以下论文。
Hazarika, D., Poria, S., Zadeh, A., Cambria, E., Morency, L.P. and Zimmermann, R., 2018. Conversational Memory Network for Emotion Recognition in Dyadic Dialogue Videos. In Proceedings of the 2018 Conference of the North American Chapter of the Association for Computational Linguistics: Human Language Technologies, Volume 1 (Long Papers) (Vol. 1, pp. 2122-2132).
bc-LSTM-pytorch
bc-LSTM-pytorch是一个使用上下文检测对话中话语情感的网络。该模型简单但高效,仅使用LSTM来建模话语之间的时间关系。在此repo中,我们提供了Semeval 2019 Task 3的数据。我们使用并提供了由Semeval 2019 Task 3 - "上下文中的情感识别"组织者发布的数据。在这个任务中,只提供了3个话语 - 话语1(用户1)、话语2(用户2)、话语3(用户1)。任务是预测话语3的情感标签。每个话语的情感标签没有提供。但是,如果您的数据包含每个话语的情感标签,您仍然可以使用此代码并相应地进行调整。因此,此代码仍适用于MOSI、MOSEI、IEMOCAP、AVEC、DailyDialogue等数据集。与CMN、ICON和DialogueRNN不同,bc-LSTM不使用说话者信息。
要求
- python 3.6.5
- pandas==0.23.3
- PyTorch 1.0
- numpy==1.15.0
- scikit_learn==0.20.0
执行
-
cd bc-LSTM-pytorch
-
训练bc-LSTM模型:
python train_IEMOCAP.py
用于IEMOCAP
- python 3.6.5
- pandas==0.23.3
- tensorflow==1.9.0
- numpy==1.15.0
- scikit_learn==0.20.0
- keras==2.1
执行
-
cd bc-LSTM
-
训练bc-LSTM模型:
python baseline.py -config testBaseline.config
用于IEMOCAP
引用
如果您在研究中使用了此代码,请引用以下论文:
Poria, S., Cambria, E., Hazarika, D., Majumder, N., Zadeh, A. and Morency, L.P., 2017. Context-dependent sentiment analysis in user-generated videos. In Proceedings of the 55th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers) (Vol. 1, pp. 873-883).
识别对话中的情绪原因
本仓库还包含了用于检测对话中情绪原因的不同架构实现。
RECCON数据集(DailyDialog折)的基线结果
模型 | emo_f1 | pos_f1 | neg_f1 | macro_avg |
---|---|---|---|---|
ECPE-2d cross_road (0 转换层) | 52.76 | 52.39 | 95.86 | 73.62 |
ECPE-2d window_constrained (1 转换层) | 70.48 | 48.80 | 93.85 | 71.32 |
ECPE-2d cross_road (2 转换层) | 52.76 | 55.50 | 94.96 | 75.23 |
ECPE-MLL | - | 48.48 | 94.68 | 71.58 |
Rank Emotion Cause | - | 33.00 | 97.30 | 65.15 |
RoBERTa-base | - | 64.28 | 88.74 | 76.51 |
RoBERTa-large | - | 66.23 | 87.89 | 77.06 |
RECCON数据集上的ECPE-2D
引用: 如果您使用此代码,请引用以下论文。
- Recognizing Emotion Cause in Conversations. Soujanya Poria, Navonil Majumder, Devamanyu Hazarika, Deepanway Ghosal, Rishabh Bhardwaj, Samson Yu Bai Jian, Romila Ghosh, Niyati Chhaya, Alexander Gelbukh, Rada Mihalcea. Arxiv (2020). [pdf]
- Zixiang Ding, Rui Xia, Jianfei Yu. ECPE-2D: Emotion-Cause Pair Extraction based on Joint Two-Dimensional Representation, Interaction and Prediction. ACL 2020. [pdf]
RECCON数据集上的Rank-Emotion-Cause
引用: 如果您使用此代码,请引用以下论文。
- Recognizing Emotion Cause in Conversations. Soujanya Poria, Navonil Majumder, Devamanyu Hazarika, Deepanway Ghosal, Rishabh Bhardwaj, Samson Yu Bai Jian, Romila Ghosh, Niyati Chhaya, Alexander Gelbukh, Rada Mihalcea. Arxiv (2020). [pdf]
- Effective Inter-Clause Modeling for End-to-End Emotion-Cause Pair Extraction. In Proc. of ACL 2020: The 58th Annual Meeting of the Association for Computational Linguistics, pages 3171--3181. [pdf]
RECCON数据集上的ECPE-MLL
引用: 如果您使用此代码,请引用以下论文。
- Recognizing Emotion Cause in Conversations. Soujanya Poria, Navonil Majumder, Devamanyu Hazarika, Deepanway Ghosal, Rishabh Bhardwaj, Samson Yu Bai Jian, Romila Ghosh, Niyati Chhaya, Alexander Gelbukh, Rada Mihalcea. Arxiv (2020). [pdf]
- Zixiang Ding, Rui Xia, Jianfei Yu. End-to-End Emotion-Cause Pair Extraction based on SlidingWindow Multi-Label Learning. EMNLP 2020.[pdf]
RECCON数据集上的RoBERTa和SpanBERT基线
原始RECCON论文中解释的RoBERTa和SpanBERT基线。参考此处。
引用: 如果您使用此代码,请引用以下论文。
- Recognizing Emotion Cause in Conversations. Soujanya Poria, Navonil Majumder, Devamanyu Hazarika, Deepanway Ghosal, Rishabh Bhardwaj, Samson Yu Bai Jian, Romila Ghosh, Niyati Chhaya, Alexander Gelbukh, Rada Mihalcea. Arxiv (2020). [pdf]