Sarcasm Detection

时间:2024-05-23 13:18:39

最近在看反讽检测的文章,才读了几篇,写一下小结,看得还是挺费劲,也挺懵的,写个阅读笔记,让自己好好重新理解一下。

Towards Multimodal Sarcasm Detection

第一篇读的是Towards Multimodal Sarcasm Detection (An Obviously Perfect Paper) ,标题就很有意思,斜体的Obviously就是在这就带有自嘲,反语的含义,也切合了本文的主题,反讽检测。

这篇文章提出了一个数据集叫做[Multimodal Sarcasm Detection Dataset](https://github. com/soujanyaporia/MUStARD) (简称MUStARD), 数据集来源于流行的TV shows,不仅包含了最基本的文本信息,还包含了视觉和听觉的信息,文章用的是audiovisual utterance来表示一条数据,每个utterance都包含了它的context of historical utterances,这篇论文提出用多模态的方法来做反讽检测,因为多模态能提供更多的有利信息。

Sarcasm Detection

论文主要的贡献

  1. 创建了一个新的数据集MUStARD,包含了多模态(mutlimodal)和会话语境(conversational context)的特征。
  2. 举了些在某些特定场景下不同的模态中反讽中特有的矛盾or不协调很明显的例子,强调使用多模态方法的重要性。
  3. 和一些baseline对比,多模态比单模态表现出明显的优势。
  4. 提供了对话的前几轮,作为上下文信息。可能会引申出新的sub-task:基于上下文语境的反讽检测(类似的好像之前就已经有了,比如SARC,不过这篇论文强调他们提供了每个说话者之前说的话,SARC只是提供了当前评论的上一条评论)

论文谈了一些related work,Sarcasm in Text就不谈了,Sarcasm in Speech里说到了Rockwell (2000) 发现较慢的语速和强力的语调大概率是反讽的一个标志,这篇论文也是从这些工作中获得的motivation,加入了语音的信息。

Sarcasm Detection

论文的主要方法

  1. 文本特征使用了BERT,一条utterance用一个dim=768的vector表示,上下文语境是由average每个句子得到的。论文也尝试了pre-trained dim=300的GloVe,不过表现比较差。

  2. 语音特征提取的方法用了Librosa库,因为我本人没有语音方面的知识,因此在这不班门弄斧了。

  3. 图像特征是每f帧抽取一帧出来,用 pool5 layer of an ImageNet pretrained ResNet-152 来提取特征,每帧的图像是一个dim=2048的vector。

融合特征的方式就是简单的concatenate(这应该将来有更好的办法融合)。

实验结果

依赖speaker

Sarcasm Detection

不依赖speaker,表现明显相比上面下降,而且多模态相比单模态提升也很小。

Sarcasm Detection

提出的改进方向

  1. 分析音频信道的时间位置
  2. 捕捉说话者的面部表情和他正在说的话之间的mismatches
  3. 上下文语境信息用的是average pooling,丢失了时间信息

未来研究方向

  1. 多模态特征融合
  2. 多人对话语境
  3. 使用神经网络的baseline
  4. 对话者的目的,意图,依赖关系(Poria et al., 2019)
  5. 主要说话者的定位,抽帧的方式可能难以捕捉说话者的面部表情和手势的变化

Reasoning with Sarcasm by Reading In-between

第二篇读的是Reasoning with Sarcasm by Reading In-between,ACL 2018的一篇反讽检测论文,这篇论文不同于上一篇,使用的是上下文无关的方式,且只针对文本来做检测。提出了一个能够 look in-between 的 attention-based 的神经网络,使得模型能够较准确地对反讽语句中常见的矛盾/不协调(contrast and incongruity)进行建模,在 Twitter, Reddit 和 Internet Argument Corpus 数据集上达到了 state-of-the-art,并且提升了可解释性。

论文中提到了反讽检测可以给 opinion mining applications 带来巨大的 benefits。

反讽通常出现在两种情况:1.明显的矛盾、冲突的情感,比如“一部优秀的催眠影片”。2.作者表达的情感与其境况悬殊的差异,比如“我车被偷了,真棒!”。

提出反讽语句中通常具有矛盾的word pairs,表达两种冲突、相反的情绪,例如

  • I absolutely love to be ignored!
  • Yay!!! The best thing to wake up to is my neighbor’s drilling.
  • Perfect movie for people who can’t fall asleep.

论文的主要贡献

  1. 基于上述原因,作者认为捕捉语句中的word pairs之间的关系很有用,即looking in-between,所以提出了一个 Multi-dimensional Intra-Attention Recurrent Network (MIARN) 来对句子中的每个 word pair 进行建模,作者说他们的Intra-attention可以被当做一个 self-targeted co-attention (Xiong et al., 2016),不仅可以捕捉词间关系(word-word relation),还可以捕捉长程依赖关系(long-range dependencies)

  2. MIARN 在 Twitter, Reddit 和 IAC数据集上达到了 SOTA,且截至发表时是第一个在反讽检测任务上能够提供可解释性结果的 attention 模型

论文的主要方法

Sarcasm Detection
  1. 计算 word pair relation,对两个word wiw_{i},wjw_{j},使用线性变换计算二者的关系,得到一个 scalar score
    sij=Wa([wi;wj])+ba s_{ij} = W_{a}([w_{i};w_{j}]) + b_{a}
    WaR2n×1,baRW_{a} \in \mathbb{R}^{2n\times 1},b_{a} \in \mathbb{R}是这层的参数,[.;.]表示 vector concatenation,sijs_{ij}是一个 scalar,表示 word pairs(wi,wj)(w_{i}, w_{j})的相关性 score,很明显ss是一个对称矩阵,接着在行上进行max-pooling,再经过softmax,得到
    a=softmax(maxrows) a=\operatorname{softmax}\left(\max _{row} s\right)
    aRla \in \mathbb{R}^{l}是学到的 intra-attention 权重,然后原句(w1,w2,,wl)\left({w_{1},w_{2},\cdots,w_{l}}\right)根据aa加权求和,得到输入句子 intra-attentive 表示
    va=i=1lwiai v_a = \sum_{i=1}^{l}w_{i}a_{i}
    vaRnv_a \in \mathbb{R}^{n},n是embedding dim。

    作者提到为什么用max-pooling,原因是他们认为既然要强调句子中的冲突词对,而 attention 能够学会一个词对所有其他词的 score,就必须把最具有辨别性的,即最大的值作为特征提取出来,因此 max-pooling 是一个适合的选择。

    这里还补充说了在i=ji = j 处的score是被mask掉的,毕竟一个词和自身的 score 可能会较大,从而影响 attention 的结果。这个模型其实应该叫SIARN(Single-dimensional Intra-Attention Recurrent Network)

    作者说,因为他们想要建模的是 raw word representations之间的关系,而非被操作过的结果,例如LSTM中间输出的hidden state,其中不仅包含了当前词,还有之前的词的信息,所以是在输入句子经过embeding layer后直接进行求 intra-attention 的操作。这里就有一个词的歧义性问题,因为在没有上下文的情况下,这样直接对 raw embedding 进行求 intra-attention,会丢失很多信息,而且不是所有反讽的意味都需要通过冲突的词对来表达,如果没有这种冲突的词对的话,intra attention 究竟能学到什么是个问题。

  2. 作者们也发现了这个问题,他们说 the relationships between two words is often not straightforward, words are complex and often hold more than one meanings or word senses,所以又提出了对两个词之间进行 multiple views 的建模,这样两个词之间的交互得到的不再是一个 scalar,而是一个 vector,我觉得这里其实没有解决词的多义性的问题,因为用的embedding依旧是固定的,至于这个 multiple views 到底解决了哪个问题,还有待继续研究
    sij=Wp(ReLU(Wq([wi;wj])+bq))+bp s_{ij} = W_{p}(ReLU(W_{q}([w_{i};w_{j}])+b_{q})) + b_{p}
    这里的维度我认为原论文写错了,我自己认为这里WqRk×2n,bqRk×1,WpR1×k,bpRW_{q} \in \mathbb{R}^{k\times 2n},b_{q} \in \mathbb{R}^{k\times 1},W_{p } \in \mathbb{R}^{1\times k}, b_{p} \in \mathbb{R},其实就是多了一层non-linear layer,接下来求 intra-attention的操作和上面一样。

  3. 因为仅仅的 intra-attention 难以编码整个句子的语义信息,因此又添加了一个LSTM,用来 encode 整句话,将最后输出的hlh_{l}当做整句话的 representation vcv_c。和上面得到的vav_a concatenation到一起,输入到一个 Dense layer 里,softmax 输出得到分类结果。
    v=ReLU(Wz([va;vc])+bz)y^=softmax(Wfv+bf) v = ReLU(W_{z}([v_{a};v_{c}]) + b_{z}) \\ \hat{y} = \operatorname{softmax}(W_{f}v + b_{f})
    这才是真正的MIARN。

实验结果

作者在 Twitter, Reddit 和 IAC数据集上和几个 baseline 作了对比。

Sarcasm DetectionSarcasm DetectionSarcasm Detection

可以看到SIARN和MIARN基本超越了所有 baseline,在长句较多数据集IAC上的提升更明显,MIARN表现基本是优于SIARN的。

Sarcasm Detection

可视化 attention 的 weights 可以看到,intra-attention 要比普通的 attention 更能准确地捕捉句子中的冲突词对,这展现了模型能够提供良好的可解释性。

Reference

Santiago Castro, Devamanyu Hazarika, Verónica Pérez-Rosas, Roger Zimmermann, Rada Mihalcea and Soujanya Poria. 2019. Towards Multimodal Sarcasm Detection (An Obviously Perfect Paper) . ACL 2019

Yi Tay, Luu Anh Tuan, Siu Cheung Hui and Jian Su. 2018. Reasoning with Sarcasm by Reading In-between . ACL 2018