最近对NLP中情感分类子方向的研究有些兴趣,在此整理下个人阅读的笔记(持续更新中):

1. Thumbs up? Sentiment classification using machine learning techniques

年份:2002;关键词:ML;引用量:9674;推荐指数(1-5):2

描述:基于电影评价,使用传统ML模型(Navie Bayes, maximum entropy classification和SVM)做情感分析。

心得

(1)主题分类(Topic Classification)≈情感分类(Sentiment Classification),但后者更难,因为前者更关注于找到识别性强的关键词,而后者更微妙些,比如:电影评价中会有“thwarted expectations”期待受挫败的评价(即用户说了一堆自己原本对电影的正面期待,但最后就说了一句表示不满意的话),这样常误导分类器认为该类评论是正面的,实际上不对。因此“the whole is not necessarily the sum of the parts”是当时研究的一个瓶颈。

(2)简单来说作者的做法是:BOW(基于frequency或presence)+ unigram/bigrams + POS/adjectives/position + NB/ME/SVM。依次讨论下做法各模块:

  • BOW:情感分类使用presence的词袋模型更好,主题分类用frequency更好;
  • unigram/bigrams:bigrams加入并没有带来提升(原因不明)。作者在选取特征时,全语料库中至少出现4次的unigrams和至少出现7次的bigrams抽出来当特征。另外前者给unigrams考虑了否定标签(not, isn't, didn't等)成"NOT_unigram"。
  • POS/adjectives/position: 加入它们效果都没提升(原因不明)。POS是Part of Speech词(例如:名词动词这些,可用Oliver Mason's Qtag标注软件进行标注),考虑到形容词对情感分类重要性,作者才加的。此外,由于用户评论电影可能是按照一定顺序,比如总体情感表达->剧情描述->观点总结,所以才加上位置。
  • 模型:SVM表现最好。NB模型有对‘特征相互独立’的前提假设,所以使用bigrams效果会变差,SVM和ME不受bigrams影响。

 2. Opinion mining and sentiment analysis

年份:2016;关键词:Survey;引用量:10188;推荐指数(1-5):1

描述:该篇文献综述也是由Bo Pang写的,内容多为理论描述,极少给出具体技术上的描述,有助于了解背景但实用性不太高。我就选读了Classification and extraction这一章节。

心得:我就罗列些值得注意的零散知识点如下:

(1)情感评分预测是一个顺序回归任务(即ordinal regression),因为分数为类似0-5的顺序型数据;

(2)中评不一定客观,有可能是评论者避免被卖家报复而打中评。因此评论的主客观分类是个研究点,主观评论更能对情感分类有帮助。有时单次出现的词可能更具主观性。

(3)对情感分类可能有帮助的点:

  • 分词位置;
  • 更为复杂的特征;
  • 歧义词;
  • POS:解决词义模糊;
  • 形容词:绑定主观性评论;
  • 语法:Dependency-tree-based特征可能优于BOW特征;
  • 否定标签Negation;
  • 讽刺鉴别;
  • 加入topic信息:例如:‘目标研究的党派’和‘候选党派’在文本中被替换为'PARTY'和‘OTHER’;
  • Domain Adaption:相同词在不同领域可能有不同含义,例如“go read book”在书评和影评中分别为好评和差评;
  • Cross-lingual Adaption:使用机器翻译在情感分析预处理中,可以处理跨语种的情感分类。

3. Deep Learning for Sentiment Analysis: A Survey

年份:2018;关键词:Survey;引用量:422;推荐指数(1-5):4

描述:该篇文献综述总结了用深度学习做情感分析的相关研究,大部分都是罗列了各种技术上的研究描述,总体来说是不错的,推荐看下。

心得:情感分析有三种levels:文档级(Document-level)、句子级(Sentence-level)和立场级(Aspect-level)。Document通过客观性分类(subjectivity classification)知道哪些句子客观性强,再对这些句子进行情感极性分析(polarity classification)得到句子的情感极性(积极/消极),而句子能使用立场抽取(Aspect Extraction)和实体抽取(Entity Extraction)分别抽取出立场(例如:“声音质量”)和实体目标(例如:iPhone)进行情感关联。

(1)文本表征:文本表征有三种做法:BoW,embedding和BoW+embedding。但使用BoW有三种缺点:稀疏性、忽略词顺序、没考虑语义信息。而且在文本表征过程中,有些人会考虑引入其他特征,例如商品评论的文本表征中,会考虑加入用户信息(反映用户个人偏好)和商品信息(商品质量)。很早以前会用parse tree做文本表征,但是CNN、RNN和embedding的出现,逐渐取代了它。

(2)立场情感分类的三大重要任务:对目标target的上下文进行表征;生成target的表征;对具体的target识别它重要的情感上下文(words)。

(3)因为文档包含长依赖关系,所以文档级情感分类常用关注机制。


4. Transformers: State-of-the-Art Natural Language Processing

年份:2018;关键词:开源代码库Transformers;引用量:15;推荐指数(1-5):3

描述:介绍了Transformers库,内含各类基于Transformer的前沿模型和预训练模型权重,可拿来做不同的NLP任务。代码已开源:https://github.com/huggingface/transformers

心得:很不错的开源代码库,设计的pipeline是:预处理数据、模型应用和预测。主要对应的三个代码模块是:

  • tokenizer:将原文本转化为稀疏的索引编码(index encodings);
  • transformer:将稀疏索引转化为上下文编码(contextual embeddings);
  • head:使用上下文编码做特定任务的预测(task-specific prediction)。

 5. RoBERTa: A Robustly Optimized BERT Pretraining Approach

年份:2019;关键词:RoBERTa;引用量:421;推荐指数(1-5):5

描述:作者对BERT进行预训练优化后使得模型表现提高。优化点有4个:

  • 更多数据,训练更久。原BERT使用BOOKCORPUS和English WIKIPEDIA共16G数据训练,而RoBERTa还加入了CC-News,OPENWEBTEXT和STORIES数据集(共计160G数据);此外,通过梯度累计,增大batch size也能提高模型表现。
  • 去掉“预测下一句”目标。在BERT预训练时,有两个目标:Masked Language Model(MLM)和Next Sentence Prediction(NSP),NSP是个二分类任务,为了预测是否两个segments片段在原文本里是连续的。该论文作者实验后发现去掉NSP损失会亲为提高下游任务的表现。
  • 使用更大的Byte-Pair Encoding(BPE)。BPE是介于字符和单词级别的混合文本表征编码,相比于整个字,它更依赖于subwords单元。
  • 采用动态掩码(Dynamic Masking)。原BERT是静态掩码(即在预训练前就进行一次掩码预处理),而动态掩码是每次都想模型输入不同的掩码序列。

心得:RoBERTa现在比较主流的优化预训练BERT的方法了。


 6. Pre-Training with Whole Word Masking for Chinese BERT

年份:2019;关键词:WWM;引用量:71;推荐指数(1-5):5

描述:Whole Word Masking(WWM)是BERT一个升级操作。它会将属于一个word的token合并起来。如下图所示:

作者实验发现RoBERT-wwm-ext-large(wwm:Whole Word Masking; ext:extended data; large:网络结构更大,BERT_base是12层,768隐藏层维度,12个关注头,110M的参数量(12×768×12),而BERT_large是24层,1024隐藏层维度,16个关注头,340M的参数量(12*1024*16))表现最好。

心得:作者在最后给了一些建议:

  • 起始学习率的设置最重要。BERT和BERT-wwm的学习率近乎相同,可共用。但ERINE(Sun等人提出的Enhanced Representation through kNowledge IntEgration)一定要调lr。
  • BERT和BERT-wwm是在维基百科上训练的,所以在正式文本上表现较好。而ERINE有在博客文本上训练,所以在非正式文本上会表现好些。
  • 在阅读理解和文本分类上,建议使用BERT/BERT-wwm。
  • 做含繁体中文的任务用BERT/BERT-wwm,因为ERINE预处理会清除繁体字。
  • 在做新的domain任务前,建议再用新domain数据去预训练下。如果不想再预训练,那就选择相近domain预训练过的模型。

关于情感分类(Sentiment Classification)的文献整理的更多相关文章

  1. 基于Bert的文本情感分类

    详细代码已上传到github: click me Abstract:    Sentiment classification is the process of analyzing and reaso ...

  2. [DeeplearningAI笔记]序列模型2.9情感分类

    5.2自然语言处理 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.9 Sentiment classification 情感分类 情感分类任务简单来说是看一段文本,然后分辨这个人是否喜欢 ...

  3. NLP(十九) 双向LSTM情感分类模型

    使用IMDB情绪数据来比较CNN和RNN两种方法,预处理与上节相同 from __future__ import print_function import numpy as np import pa ...

  4. 使用bert进行情感分类

    2018年google推出了bert模型,这个模型的性能要远超于以前所使用的模型,总的来说就是很牛.但是训练bert模型是异常昂贵的,对于一般人来说并不需要自己单独训练bert,只需要加载预训练模型, ...

  5. kaggle之电影评论文本情感分类

    电影文本情感分类 Github地址 Kaggle地址 这个任务主要是对电影评论文本进行情感分类,主要分为正面评论和负面评论,所以是一个二分类问题,二分类模型我们可以选取一些常见的模型比如贝叶斯.逻辑回 ...

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

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

  7. 基于机器学习和TFIDF的情感分类算法,详解自然语言处理

    摘要:这篇文章将详细讲解自然语言处理过程,基于机器学习和TFIDF的情感分类算法,并进行了各种分类算法(SVM.RF.LR.Boosting)对比 本文分享自华为云社区<[Python人工智能] ...

  8. NLP文本情感分类传统模型+深度学习(demo)

    文本情感分类: 文本情感分类(一):传统模型 摘自:http://spaces.ac.cn/index.php/archives/3360/ 测试句子:工信处女干事每月经过下属科室都要亲口交代24口交 ...

  9. 文本情感分类:分词 OR 不分词(3)

    为什么要用深度学习模型?除了它更高精度等原因之外,还有一个重要原因,那就是它是目前唯一的能够实现“端到端”的模型.所谓“端到端”,就是能够直接将原始数据和标签输入,然后让模型自己完成一切过程——包括特 ...

随机推荐

  1. JS判断PC操作系统版本

    var version = navigator.userAgent; console.log(version); //"Mozilla/5.0 (Windows NT 10.0; WOW64 ...

  2. 详解工程师不可不会的LRU缓存淘汰算法

    大家好,欢迎大家来到算法数据结构专题,今天我们和大家聊一个非常常用的算法,叫做LRU. LRU的英文全称是Least Recently Used,也即最不经常使用.我们看着好像挺迷糊的,其实这个含义要 ...

  3. 手把手教你AspNetCore WebApi:Nginx(负载均衡)

    前言 这几天小明又有烦恼了,系统上线一段时间后,系统性能出现了问题,缓存等都用上了,还是不能解决问题.马老板很大气,又买了3台服务器,让小明做个集群分流一下. 集群是什么? 是一种计算机系统,它通过一 ...

  4. Python爬虫框架--Scrapy安装以及简单实用

    scrapy框架 框架 ​ -具有很多功能且具有很强通用性的一个项目模板 环境安装: Linux: ​        pip3 install scrapy ​ ​ ​  Windows: ​     ...

  5. 你不知道的MySQL,以及MariaDB初体验

    MySQL 是一个跨世纪的伟大产品,它最早诞生于 1979 年,距今已经有 40 多年的历史了,而如今比较主流的 Java 语言也只是 1991 年才诞生的,也就是说 MySQL 要比 Java 的诞 ...

  6. Elasticsearch 基于external的乐观锁的版本控制

    version_type=external,唯一的区别在于,_version,只有当你提供的version与es中的_version一模一样的时候,才可以进行修改,只要不一样,就报错:当version ...

  7. ▶ 0001 No application 'E:\www\go\blog' found in your GOPATH

    go mod 配置 beego 首先cmd bee new blog go mod init 然后复制到任意目录 bee run 就会报错, 要退出该目录,进入上级目录 bee run blog 才行

  8. centos8平台redis cluster集群搭建(redis5.0.7)

    一,规划 redis cluster 1,cluster采用六台redis,3主3从 redis1    : ip: 172.17.0.2 redis2    : ip: 172.17.0.3 red ...

  9. IDEA 半天卡住buid(编译)不动——解决办法(适用于maven及gradle)及定位思路

    [号外号外!] 最终解决办法并不复杂,关键在于"遇见问题,怎么样层层分析,多条路径试错,最终解决问题的思路或者能力"--资深码农的核心竞争力之一 背景 今天结束完最近2个月的一个项 ...

  10. Helium文档8-WebUI自动化-wait_until等待元素出现

    前言 wait_until等待某个条件为真才继续往下执行.默认的超时时间为10s,每0.5查询一次,这俩参数选填.可以设置超时时间和轮询间隔. 可以作为添加后校验元素是否存在的场景 入参介绍 def ...