点击下面卡片关注我呀,每天给你送来AI技术干货!

来自:SimpleAI

  • 论文标题:Learning Sentence Embeddings with Auxiliary Tasks for Cross-Domain Sentiment Classification

  • 会议/期刊:EMNLP-2016

  • 团队:Singapore Management University


主要思想: 通过构造两个辅助任务(auxiliary tasks)来从学习句子表示,预测一个句子是否包含有通用情感词。这些句子表示可以增强原本情感分类模型中的句子表示,从而提升模型的总体领域适应能力。

论文要点一览:

1. 借鉴了2006年EMNLP的Structural Correspondence Learning的思想

SCL是2016EMNLP的一篇解决领域适应的论文,想法很新颖。核心想法是,不同领域的文本,通常会有一些通用的“指示词”(称为pivot words/features),比方在词性标注任务中,虽然同一个词性的词可能在不同领域文本中千差万别,但是提示词性的特征往往是类似的,这些共同的特征就称为pivot features。然后,那些随着领域变化的,但跟这些pivot features高度相关的词,就被称为“联系词/对应词”(correspondences),比方在词性标注任务中那些关注的词性对应的词。

领域适应中,麻烦的就是这些随着领域变化的correspondences,它们往往潜藏着类别的信息,但是从表面上看是很领域性的,所以如果有办法把这些词中潜藏着的通用的类别信息给提取出来,或者把它们给转化成通用的信息,那这些领域性的词就变得通用了,就可以适应不同领域了。

这个想法,确实很有意思,值得我们学习。所以这个SCL要解决的关键问题就是,如何让模型看到这些领域词,能转化成通用词。比如在情感分类中,看到评论“这个电脑运行很快!”就能反应出来这个就是“这个电脑好!”。SCL的方法就是,我有一个通用词的list,把这些词从句子中挖去,然后让剩下的部分来预测出是否包含这个词。构造这样的任务,就相当于学习一个“通用语言转化器”,把个性化的语言,转化成通用的语言。

当然,由于是2006年的论文,所以是采用传统的机器学习方法来做,得到句子表示也是通过矩阵分解这样的方法。这个16年的新论文,则是使用的深度学习的方法进行改良和简化,让它变得更强大。

2. 跟传统经典方法的的主要不同

本文提到的主要传统方法有两个,一个就是著名的06年的SCL,一个是大名鼎鼎的Bengio团队在11年ICML的使用auto-encoder的工作。

这两个工作的一个共同点是,是分两步进行的,即是一个序列化的方法(learn sequentially),先得到一个特征表示,改善原来的文本特征,然后再使用经典的模型进行预测。

本论文提出的方法,既可以是两步走的序列化方法,也可以是joint learning,让辅助任务跟主任务共同学习。

另外,之前的auto-encoder的做法,在数据预处理的步骤,没有考虑情感分类任务,也就是跟最终要做的任务无关,这当然也不够好。

3. 本文是一个transductive方法,即训练的时候要利用到全局数据

训练可用的数据包括:

  • 有标签的训练集(source domain)

  • 无标签的测试集(target domain)

4. 辅助任务的设计&对原句子表示的加强

作者设计了两个辅助任务:预测一句话中是否有正/负的通用情感词。

当然,预测前,需要把句子中的通用情感词给挖掉,用剩下的词来预测。这样设计的依据是什么呢?如果一句话中包含来通用情感词,比如“好”,那么这句话多半就是正面的情感,那么这句话剩下的其他的部分,应该也大概率会包含一些领域特定的反应情感的词,比如“(电脑)很快”。那么我们训练一个能够使用这些领域特定的词预测通用情感词的模型,就可以得到一个“通用情感转化器”,把各种不同领域的句子,转化成通用的表示。

辅助任务的损失函数如下:就是二分类交叉熵损失之和。

如下图所示,左半边就是一个传统的分类模型。右边的就是辅助任务对应的模型。

通过把原句子的通用情感词替换成[UNK],然后使用辅助任务训练一个新的模型,就可以得到一个通用的句子表示向量,也就是图中的蓝色的向量。

最后,把这个向量,跟原句子向量拼接起来,就得到来加强版的句子表示,最终使用这个句子表示来做情感分类任务。

5. 联合训练joint learning

上面讲的方法,依然是分两步做的,这样会有些麻烦。其实整个框架可以同时训练,也就是把两部分的损失函数合在一起进行优化:

注意,两部分的loss,分别来自不同的数据集,但是在辅助模型分布,是两部分数据都会使用的,见图中画蓝线的地方。

就是代码实现上,我一开始想不通如何让两个不同的数据集(labeled source data和unlabeled target data)放在一起同时训练,看了看作者的代码也没看明白(基于Lua的torch写的),直到我看到了作者readme最后写了一个提示:

就是说,所谓的joint learning,并不是真正的joint,相当于一种incremental learning(增量学习)。每个epoch,先把source部分的数据给训练了,然后再输入target部分来优化auxiliary部分的模型。

6. 如何选择pivot words

本文使用了一种叫weighted log-likelihood ratio(WLLR)的指标来选择最通用的情感词作为pivot words。这个WLLR的公式如下:

公式里的y就是标签,而y一杠是相反的标签。w则代表某个词。从公式可以看出,当一个词在一个标签的文本中经常出现,而在相反标签的文本中出现很少,那么这个词的WLLR值就高。

在SCL论文中,使用的是互信息,但是作者发现互信息偏爱那些低频词,相比之下WLLR则公平一些,因此作者选择WLLR。

7. 数据集和实验结果

实验结果主要表明,Joint Learning确实可以。但Sequential则效果不敢恭维。。。这一点是我觉得容易让人诟病的地方,毕竟按照前文中介绍的,即使是Sequential,也因为学习到了很好的句子表示,应该效果也很不错才对。

另外实验结果中,对比一下机器学习方法和深度学习方法可以看出,只是用离散特征,效果完全比不是深度学习使用连续特征的方法。注意,这里的NN是指CNN,使用了词向量,而词向量相当于已经拥有了很多外部知识了,所以一个单纯的CNN,不进行任何的domain adaptation的设计,都比传统的SCL等方法都好。

作者还做了一些“使用部分target标注数据来训练”的实验:发现,也有微弱的提升(0.6%实在不算多哈)。并且,随着标注数据量的提升,差距还在缩小:

8. Case Study

这里的case study值得学习,分析的很细致,逻辑清晰,还印证了论文的理论假设。即,作者对比了单纯的CNN和使用了辅助任务来训练的CNN,在分类时的重要词汇是哪些,发现了一些有趣的现象。

我们这里称单纯的CNN为NaiveNN,使用辅助任务的序列化方法为Sequential,联合训练的则为Joint。其中,Sequential和Joint又可以把模型分成两个部分,分别为-original和-auxiliary。

看这个图可能有点费劲,总结一下是这样的:

  • NaiveNN抽取出来的,多半都是“通用情感词”;

  • Sequential-original提取出来的跟NaiveNN类似;

  • Sequential-auxiliary提取出的,多半是“领域词”,包括“领域情感词”和“领域类型词”,后者是该领域的一些特征词,但并不是情感词,所以是个噪音,可能会对情感模型产生负面影响;

  • Joint-auxiliary则提取出的基本都是“领域情感词”,即相比于sequential少了噪音;

  • Joint-original则可提取出“通用情感词”和“领域情感词”,因为它跟aux部分共享了sentence embedding。

虽然case study一般都是精挑细选过的,但至少作者分析总结的还是很到位,也就姑且信了。

最后:

总的来说,这是一个想法较为新颖,方法较为实用,思路也make sense的工作。巧妙地借用了SCL的思想,并做了合理的简化和升级,取得了还不错的效果。

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

点击上面卡片,关注我呀,每天推送AI技术干货~

整理不易,还望给个在看!

使用辅助任务来提升情感分类领域适应相关推荐

  1. SIGIR 2021 | 基于不确定性正则化与迭代网络剪枝的终身情感分类方法

    导读 终身学习能力对于情感分类器处理网络上连续的意见信息流而言至关重要.然而,执行终身学习对于深度神经网络来说是困难的,因为持续地训练可用信息会不可避免地会导致灾难性遗忘.发表在信息检索领域顶会 SI ...

  2. 中文文本情感分类及情感分析资源大全

    摘要:20世纪初以来,文本的情感分析在自然语言处理领域成为了研究的热点,吸引了众多学者越来越多的关注.对于中文文本的情感倾向性研究在这样一大环境下也得到了显著的发展.本文主要是基于机器学习方法的中文文 ...

  3. 自然语言处理课程作业 中文文本情感分类

    摘要:20世纪初以来,文本的情感分析在自然语言处理领域成为了研究的热点,吸引了众多学者越来越多的关注.对于中文文本的情感倾向性研究在这样一大环境下也得到了显著的发展.本文主要是基于机器学习方法的中文文 ...

  4. 打破情感分类准确率80分天花板!更充分的知识图谱结合范式

    来源:夕小瑶的卖萌屋本文约3600字,建议阅读7分钟 本文带你了解NLP的研究者们怎么让模型像人类一样,学会"知识". NLP的研究者们一直都在尝试,怎么样让模型像人类一样,学会& ...

  5. python 多分类情感_文本情感分类(一):传统模型

    前言:四五月份的时候,我参加了两个数据挖掘相关的竞赛,分别是物电学院举办的"亮剑杯",以及第三届 "泰迪杯"全国大学生数据挖掘竞赛.很碰巧的是,两个比赛中,都有 ...

  6. 打破情感分类准确率 80 分天花板!更加充分的知识图谱结合范式

    文 | Severus NLP的研究者们一直都在尝试,怎么样让模型像人类一样,学会"知识".而最直观的想法莫过于将人类已经总结出来供机器解读的"知识体系",及其 ...

  7. python 多分类情感词典_基于情感词典的文本情感分类

    基于情感词典的文本情感分类 传统的基于情感词典的文本情感分类,是对人的记忆和判断思维的最简单的模拟,如上图.我们首先通过学习来记忆一些基本词汇,如否定词语有"不",积极词语有&qu ...

  8. TF使用例子-情感分类

    北京站 | NVIDIA DLI深度学习培训 2018年1月26日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文 正文共10052个字,4张图,预计阅读时间26分钟. 这次改写一下 ...

  9. PaddlePaddle︱开发文档中学习情感分类(CNN、LSTM、双向LSTM)、语义角色标注

    PaddlePaddle出教程啦,教程一部分写的很详细,值得学习. 一期涉及新手入门.识别数字.图像分类.词向量.情感分析.语义角色标注.机器翻译.个性化推荐. 二期会有更多的图像内容. 随便,帮国产 ...

  10. 情感分类模型介绍CNN、RNN、LSTM、栈式双向LSTM

    情感分类模型介绍CNN.RNN.LSTM.栈式双向LSTM 1.文本卷积神经网络(CNN) 卷积神经网络经常用来处理具有类似网格拓扑结构(grid-like topology)的数据.例如,图像可以视 ...

最新文章

  1. nyoj 925 国王的烦恼(最小生成树)
  2. query 防止ajax重复提交
  3. netcore命令行部署|跨域问题
  4. webservice axis1.4生成客户端
  5. java常见_关于Java的常见误解
  6. 神经网络模型模型转ONNX
  7. C# servicestack.redis 互通 java jedis
  8. [转载] 递归函数python基例_python递归函数详解 python 递归函数使用装饰器
  9. HTML:对话框插件thickbox使用技巧
  10. PMP第六版计算题公式整理
  11. 【计量经济学导论】16. 面板数据模型
  12. 初学者该如何入手云计算
  13. neo4j安装及内存分配
  14. 【ReID】Pyramidal Person Re-IDentification via Multi-Loss Dynamic Training
  15. 轮播图图片大小不统一
  16. 爬虫实战—拿下最全租房数据 | 附源码
  17. D. Cloud of Hashtags(逆向贪心)
  18. 嘉立创电路板制作过程全流程详解(三):图电、AOI
  19. (二十三)【模电】(波形的发生与信号的转换)非正弦波发生电路
  20. 2022年全球市场机械蒸汽再压缩(MVR)总体规模、主要生产商、主要地区、产品和应用细分研究报告

热门文章

  1. NodeJs 实现 WebSocket 即时通讯(简单版)
  2. append 注意事项
  3. 高速PCB中常见存储器之FLASH引脚图、布局布线设计
  4. Putty密钥(PrivateKey)导入SecureCRT
  5. 我的编程学习日志(9)--交换A,B值得方法(相加,异或,swap函数)
  6. 基于visual Studio2013解决面试题之0909移动星号
  7. Oracle每日一题——(1) 启动/停止监听
  8. SetWindowLong 除去窗体标题栏
  9. Eclipse中 *.properties 文件编码设置
  10. Confluence 6 访问日志脚本