SemEval2019Task3_ERC | (1) Affect Classification in Dialogue using Attentive BiLSTMs

原文下载

目录

1. 比赛介绍

2. 数据预处理

3. 模型描述

4. 实验


1. 比赛介绍

SemEval2019Task3_ERC是2019年Semantic Evaluation的第三个任务,对话情感识别。

使用的数据集是EmoContext,该对话数据集为纯文本数据集,来自社交平台。分为训练集、验证集和测试集。其中训练集、验证集、测试集各包含30,160、2755和5509个对话,每个对话都包含三轮(2人对话数据集(Person1,Person2,Person1)),因此训练集、验证集、测试集各包含90,480、8265和16,527个子句(utterances)。

这个数据集存在严重的类别不均衡现象,和其他数据不均衡现象有所区别,它在训练集比较均衡,但在验证集和测试集中每一个情感类别数据大约占总体的<4%(符合实际情况,实际对话中大部分子句是不包含任何情感的),具体统计情况如下:

与一般的判断给定文本/句子情感的任务不同,该任务的的目标是,给定一个对话(3轮),判断最后一轮/最后一个子句说话者所表达的情感,建模时需要利用对话的上下文(context)来判断最后一个子句的情感。

数据集的每个对话中,只有最后一个子句有情感标签,该数据集的情感标签分为三类:Happiness、Sadness、Anger还有一个附加的标签(others)。其中有5740个对话标签为Happiness,6816个对话标签为Sadness,6533个对话标签为Anger,剩余对话标签全为others。

比赛采用的评估指标为:micro F1-score(只在三个情感类别Happiness、Sadness、Anger上计算micro F1-score,不包括others。本文所采用模型的最好结果是 0.7340)

数据集样例如下图所示:

虽然这只是一个包含3轮对话且只有最后一轮对话有情感标签的数据集,但是可以把基于该数据集训练的模型,应用到更广泛的场景,如判断一个对话中任意一个子句的情感。假设该对话包含N个子句/N轮,若要判断第i个子句的情感,只需要把第i个子句连同第i-1,i-2个子句一同喂给训练好的模型,就可以判断第i个子句的情感了。其中i=1,...,N ,对话中每一个子句的情感就可以确定了(对 对话中前两个子句判断情感时,可以通过填充实现)。

 

2. 数据预处理

1)文本规范化:把社交媒体文本中的缩写展开。如idk->i don't know,plz->please

2)拼写检查:基于Wikipedia和Twitter两个语料库,使用拼写检查工具把拼写错误的单词替换为最可能的候选词

3)分词:把所有的对话中的单词先小写化,根据社交媒体中常用的词和表达,对对话进行分词

4)表情描述:该对话数据集中包含了多种表情符号,这些符号包含了说话者的情感。所以,我们把表情符号替换为它对应的文本描述。使用该描述训练Emoji2Vec。

 

3. 模型描述

对每一轮对话/每一个子句单独进行编码,创建一个表示(turn-level);而不是对整个对话统一进行表示(Dialogue-level)。还有一种方式是对每一个说话人进行编码创建一个表示。

 

  • Embedding Layer

对每个子句进行上述预处理后,通过embedding层把句子中的词转换为向量。其中embedding层的词嵌入矩阵使用基于20亿推特数据预训练GloVe初始化(funetuing/frozen,本文中选择的是冻结embedding层的权重,不做微调)。

  • Turn Encoder

使用双向LSTM分别对对话的每一个子句/每一轮进行编码。每一个子句中的每一个单词都会有一个前向表示和一个后向表示,把这两个表示拼接,得到该单词的表示。然后把双向LSTM的表示先通过一个Batch Normalization层,再通过Attention Layer。注意这里每个 turn encoder/biLSTM都是不同的,即不共享权重。

  • Turn Attention

对于每一个子句编码信息(每个单词通过biLSTM后的表示)使用Attention机制来提取子句中的重要单词。对于第k个子句T_k包含N_k个单词,T_k = \{w_{1_k},...,w_{N_k}\},单词w_{N_k}的表示h_{N_k}由BiLSTM的前向隐藏状态和后向隐藏状态拼接而成.首先把h_{N_k}通过1层全连接层MLP得到表示u_{N_k}作为key。初始化一个向量u_c(模型参数)作为query,通过下式计算w_{N_k}对应的注意力权重(其他单词计算同理):

子句的表示由各个单词的表示与计算的注意力权重对应相乘在求和:

  • Dialogue Representation

把每个子句的表示拼接在一起作为整个对话的表示。

  • Emotion Classification

把整个对话的表示,通过softmax层进行四分类,采用交叉熵损失。

 

4. 实验

本文所用模型与各个baseline在测试集上的效果比较。

1)LSTM是官方提供的baseline,直接把整个对话整体作为LSTM的输入,再进行分类。

2)Dialogue-TFIDF:用TF-IDF对整个对话进行特征提取,在通过SVM分类。

3)Dialogue-TFIDF-ADD:用TF-IDF对整个对话进行特征提取,在拼接上整个对话中大写单词和加长单词(缩写变全称)所占的比例以及整个对话中表情符号对应的向量的平均,作为最后的特征,再通过SVM分类。

4)TURN-TFIDF:用TF-IDF对每个子句进行特征提取,把每个子句的表示拼接起来作为整个对话的表示,再通过SVM分类。

5)TURN-TFIDF-ADD:用TF-IDF对每个子句进行特征提取,在拼接上该子句中大写单词和加长单词(缩写变全称)所占的比例以及该子句中表情符号对应的向量的平均,作为该子句的表示,再把每个子句的表示拼接起来作为整个对话的表示,再通过SVM分类。

6)BiLSTM-ATT:即本文采用的模型

7)BiLSTM-ATT-Share:与本文采用的模型类似,只不过turn-encoder过程中,各个bilstm encoder权重共享。

8)BiLSTM-ATT-Dialogue:直接把整个对话整体作为BiLSTM的输入,再使用Attention机制得到整个对话的表示,再进行分类。

总体来说,Turn-Level比Dialogue-level要好,即把每个子句单独处理,而不是对整个对话整体处理。

其他具体的实验细节与分析可以参看原文。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值