作者 |  何从庆

转载自AI算法之心(ID:AIHeartForYou)

笔者整理最近几年比较经典的深度文本分类方法,希望帮助小伙伴们了解深度学习在文本分类中的应用。

Convolutional Neural Networks for Sentence Classification (EMNLP 2014)

Kim在EMNLP2014提出的TextCNN方法,在多个数据集上取得了很好的效果。由于其计算速度快以及可并行性,在产业界得到了广泛使用。TextCNN的模型示意图如下图所示。

TextCNN模型首先将文本映射成向量,然后利用多个滤波器来捕捉文本的局部语义信息,接着使用最大池化,捕捉最重要的特征。最近将这些特征输入到全连接层,得到标签的概率分布。

代码参考:

1) https://github.com/alexander-rakhlin/CNN-for-Sentence-Classification-in-Keras

2) https://github.com/brightmart/text_classification

图1:TextCNN模型架构

Document Modeling with Gated Recurrent Neural Network for Sentiment Classification (EMNLP 2015)

Tang等人提出了一种利用GRU对文档进行建模的情感分类模型。模型如下图所示。

该模型首先将文本映射为向量,然后利用CNN/LSTM(论文中使用3个滤波器的CNN)进行句子表示。另外,为了捕获句子的全局语义表征,将其输送给平均池化层,再接入tanh激活函数。最后将整个句子的不同宽度卷积核的向量表示接入一个Average层,从而得到句子平均向量表示。

然后将得到的句子表示,输入到GRU中,得到文档向量表示。最后将文档向量输送给softmax层,得到标签的概率分布。

图2:文档级别情感分类的神经网络模型

Recurrent Convolutional Neural Networks for Text Classification (AAAI 2015)

Lai等人提出了一种无人工特征的循环卷积神经网络分类方法,简称RCNN。

RCNN首先利用Bi-RNN来捕捉前后的上下文表征,然后将其concat起来,接着使用滤波器filter_size=1的卷积层,并使用最大池化操作得到与文档最相关的向量表征,最后将这些向量输入到softmax层,得到标签的概率表征。

代码参考:

1) https://github.com/roomylee/rcnn-text-classification

2) https://github.com/brightmart/text_classification

图3: RCNN的模型结构示意图

Recurrent Neural Network for Text Classification with Multi-Task Learning (IJCAI 2016)

Liu等人针对文本多分类任务,提出了基于RNN的三种不同的共享信息机制对具有特定任务和文本进行建模。

模型1(Uniform-Layer Architecture):所有任务共享同一个LSTM层,并在每个特定任务后面拼接一个随机生成可训练的向量。LSTM层的最后一个时刻的隐藏层作为输入传入到softmax层。

模型2(Coupled-Layer Architecture): 每个任务具有自己独立的LSTM层,但是每一时刻所有任务的hidden state则会和下一时刻的character一起作为输入,最后一个时刻的hidden state进行分类。

模型3(Shared-Layer Architecture):除了一个共享的BI-LSTM层用于获取共享信息,每个任务有自己独立的LSTM层,LSTM的输入包括每一时刻的character和BI-LSTM的hidden state。

图4:三种架构进行多任务学习建模

Hierarchical Attention Networks for Document Classification (NAACL 2016)

Yang等人提出了一种用于文档分类的层次注意力机制网络,简称HAN。这篇文章和Tang等人都是针对于文档分类的问题,然而,这篇文章在句子级别以及文档级别提出了注意力机制,使得模型在构建文档时是能够赋予重要内容不同的权重,同时,也可以缓解RNN在捕捉文档的序列信息产生的梯度消失问题。HAN模型的模型示意图如下所示。

HAN模型首先利用Bi-GRU捕捉单词级别的上下文信息。由于句子中的每个单词对于句子表示并不是同等的贡献,因此,作者引入注意力机制来提取对句子表示有重要意义的词汇,并将这些信息词汇的表征聚合起来形成句子向量。具体的注意力机制的原理可以参考:

FEED-FORWARD NETWORKS WITH ATTENTION CAN SOLVE SOME LONG-TERM MEMORY PROBLEMS

然后,对于所有的句子向量输入到Bi-GRU中,捕捉句子级别的上下文信息,得到文档向量。同样地,为了奖励对文档进行正确分类的线索句,作者再次使用注意力机制,来衡量句子的重要性,得到文档向量。最后将文档向量均输入到softmax层,得到标签的概率分布。

代码参考:

1) https://github.com/richliao/textClassifier

2) https://github.com/brightmart/text_classification

图3: HAN模型结构示意图

Bag of Tricks for Efficient Text Classification (EACL 2017)

Joulin等人提出了一种简单而又有效的文本分类模型,简称fastText。

fastText模型输入一个词序列(一段文本或者一句话),序列中的词与词组成特征向量,然后特征向量通过线性变换映射到中间层,中间层再映射到标签。输出这个词序列属于不同类别的概率。其中fastText在预测标签是使用了非线性激活函数,但在中间层不使用非线性激活函数。

代码参考:

1) https://github.com/facebookresearch/fastText

2)  https://radimrehurek.com/gensim/models/fasttext.html

图4:fastText模型结构示意图

Deep Pyramid Convolutional Neural Networks for Text Categorization (ACL 2017)

Johnson 和Zhang 提出了一种单词级别的深层CNN模型,来捕捉文本的全局语义表征,该模型在不增加太多的计算开销的情况下,通过增加网络深度可以获得最佳的性能,简称DPCNN。模型结构示意图如下所示。

DPCNN模型首先利用“text region embedding”,将常用的word embedding 推广到包含一个或多个单词的文本区域的embedding,类似于增加一层卷积神经网络。

然后是卷积快的叠加(两个卷积层和一个shortcut连接,其中shortcut连接类似于残差连接),与步长为2的最大池化层进行下采样。最后使用一个最大池化层,得到每个文档的文档向量。

代码参考:

https://github.com/Cheneng/DPCNN

图4:DPCNN模型结构示意图

Using millions of emoji occurrences to learn any-domain representations for detecting sentiment, emotion and sarcasm (EMNLP 2017)

Felbo等人使用数以百万计的表情符号来学习任何领域的表情符号来检测情绪、情绪和讽刺,提出了DeepMoji模型,并取得了具有竞争性的效果。同时,DeepMoji模型在文本分类任务上也可以取得不错的结果。

DeepMoji模型首先使用embedding层将单词映射成向量,并将每个embedding维度使用双正切函数映射到[-1,1]。然后,作者使用两层的Bi-LSTM捕捉上下文特征。接着作者提出了一种新的注意力机制,分别将embeddding层以及2层的Bi-LSTM作为输入,得到文档的向量表征。最后,将向量输入到softmax层,得到标签的概率分布。

代码参考:

https://github.com/bfelbo/DeepMoji

图5:DeepMoji模型结构示意图

Investigating Capsule Networks with Dynamic Routing for Text Classification (EMNLP 2018)

Zhao等人提出了一种基于胶囊网络的文本分类模型,并改进了Sabour等人提出的动态路由,提出了三种稳定动态路由。模型如下所示:

该模型首先利用标准的卷积网络,通过多个卷积滤波器提取句子的局部语义表征。然后将CNN的标量输出替换为向量输出胶囊,从而构建Primary Capsule层。接着输入到作者提出的改进的动态路由(共享机制的动态路由和非共享机制的动态路由),得到卷积胶囊层。最后将卷积胶囊层的胶囊压平,送入到全连接胶囊层,每个胶囊表示属于每个类别的概率。

代码参考:

https://github.com/andyweizhao/capsule_text_classification.

图6:文本分类的胶囊网络体系结构

Sentiment Analysis by Capsules (WWW 2018)

Wang等人提出了一种用于情感分类的RNN胶囊网络模型,简称RNN-Capsule。(这篇文章在可视化方面做的还是不错的)模型结构示意图如下所示。

RNN-Capsule首先使用RNN捕捉文本上下文信息,然后将其输入到capsule结构中,该capsule结构一共由三部分组成:representation module, probability module,和reconstruction module。具体地,首先用注意力机制计算capsule 表征;然后用capsule表征计算capsule状态的概率;最后用capsule表征以及capsule状态概率重构实例的表征。

图7: RNN-Capsule模型结构示意图

Graph Convolutional Networks for Text Classification (AAAI 2019)

Yao等人提出了一种基于graph convolutional networks(GCN)进行文本分类。作者构建了一个包含word节点和document节点的大型异构文本图,显式地对全局word利用co-occurrence信息进行建模,然后将文本分类问题看作是node分类问题。

代码参考:

https://github.com/yao8839836/text_gcn

图7:Text GCN的模型结构

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding (NAACL 2019)

Google提出的BERT模型,突破了静态词向量无法解决一词多义的问题。BERT是基于语言模型的动态词向量,在自然语言处理的多项任务中取得了最优秀的结果。笔者对BERT模型进行微调,在文本分类的多个领域,诸如法律、情感等,取得了非常有竞争性的性能。

BERT的模型架构是一个多层的双向Transformer编码器(Transformer的原理及细节可以参考 Attention is all you need)。作者采用两套参数分别生成BERTBASE模型和BERTLARGE模型(细节描述可以参考原论文),所有下游任务可以在这两套模型进行微调。

代码参考:

https://github.com/google-research/bert

图8:BERT的Pre-training结构和Fine-Tuning结构

(*本文为 AI科技大本营转载文章,转载请联系原作者)

精彩推荐

6月29-30日,2019以太坊技术及应用大会 特邀以太坊创始人V神与以太坊基金会核心成员,以及海内外知名专家齐聚北京,聚焦前沿技术,把握时代机遇,深耕行业应用,共话以太坊2.0新生态。

推荐阅读

  • 阿里带火的中台到底是什么?白话中台战略

  • 入门学习 | 什么是图卷积网络?行为识别领域新星

  • 文件操作So Easy!来,一起体验下Python的Pathlib模块~

  • 有一种青春叫高考,Python爬取历年数据,说说我们一起经历的高考

  • 漫话:如何给女朋友解释什么是编译与反编译

  • 超级黑幕:开发者千万别被算法迷惑了!

  • 鲍岳桥:52 岁还在熬夜写代码! | 人物志

  • IBM 确认裁员约 1700 人;华为新款操作系统来了!开通 5G 服务不换卡不换号 | 极客头条

  • 9年前他用1万个比特币买了两个披萨, 9年后他把当年的代码卖给了苹果, 成为了GPU挖矿之父

你点的每个“在看”,我都认真当成了喜欢

fasttext 文本分类_一文综述经典的深度文本分类方法相关推荐

  1. 一文综述经典的深度文本分类方法

    作者 |  何从庆 转载自AI算法之心(ID:AIHeartForYou) 笔者整理最近几年比较经典的深度文本分类方法,希望帮助小伙伴们了解深度学习在文本分类中的应用. Convolutional N ...

  2. fastai 文本分类_使用Fastai v2和多标签文本分类器检查有毒评论

    fastai 文本分类 The internet has become a basic necessity in recent times and a lot of things which happ ...

  3. relative会脱离文档流吗_脱离文档流与脱离文本流

    脱离文档流与脱离文本流 根据官方文档所述,脱离文档流的方法有浮动(float)和绝对定位(poistion:absolute/fixed). 那么我们接下来来看看他们的区别吧 使用浮动(float) ...

  4. css美观文本框_如何为美观和用户友好的文本使用类型

    css美观文本框 Text is an important, if not the most important element in a design. It conveys the informa ...

  5. python用类名直接调用方法_一文读全 Python 的面向对象编程方法

    背景介绍: Python 支持三种形式的编程,分别是:"命令式"."函数式"和"面向对象式". 很多优秀的开源 Python 项目里都用到了 ...

  6. klearn 文本分类_使用gensim和sklearn搭建一个文本分类器

    总的来讲,一个完整的文本分类器主要由两个阶段,或者说两个部分组成:一是将文本向量化,将一个字符串转化成向量形式:二是传统的分类器,包括线性分类器,SVM, 神经网络分类器等等. 之前看的THUCTC的 ...

  7. hough变换检测圆周_一文解读经典霍夫变换(Hough Transform)

    引言 本文讲述霍夫变换的一些内容,并加入一些理解性东西,参考了部分博客等相关性内容.希望能对霍夫变换有所了解,也希望看到的人如果发现错误及时帮忙纠正.博主水平有限,还望赐教. 历史和简介 历史 霍夫变 ...

  8. 回文联对联大全_回文的经典对联内容大全

    回文联,是我国对联中的一种.用回文形式写成的对联,既可顺读,也可倒读.不仅它的意思不变,而且颇具趣味.是我国的重要文化之一.下面小编整理了回文对联,欢迎大家阅读. 回文对联精选 上联:中华传妙墨; 下 ...

  9. python进行文本预处理_用python做NLP:中文文本预处理

    数据挖掘入门与实战  公众号: datadw 一 得到原始文本内容 def FileRead(self,filePath): f = open(filePath) raw=f.read() retur ...

最新文章

  1. fiddler 抓取winform wcf包
  2. 54 Node.js快速入门
  3. 计算机基础及msoffice应用书本,全国计算机等级考试一本通一级计算机基础及MSOffice应用2016年无纸化考试专用...
  4. (转)Symbian启动J2ME程序
  5. AOP(面向切面编程)大概了解一下
  6. 1 | GNN基础理论
  7. HDU6109 数据分割【并查集】
  8. Netflix是如何针对云构建和部署代码的
  9. 哆啦A梦:基于Prometheus的企业监控报警平台
  10. 将背景为白色图片转为png格式的透明图片
  11. 计算机组成原理补码减法,补码加减法运算(计算机组成原理).ppt
  12. win10 下装win7
  13. binomial检验_R卡方检验的详细解析过程_R计算二项Binomial分布的P
  14. 解析无所不能的正则表达式
  15. SQLPub免费的MySQL数据库
  16. 计算机专业选修课怎么选比较好,你知道怎么选AP课程吗?附AP不同专业方向的选课建议...
  17. css tabindex
  18. 计算机网络读书笔记(二)
  19. 数据化运营chapter4_code--分析模型和方法
  20. 【雷达通信】基于matlab GUI相控阵雷达方向图【含Matlab源码 1048期】

热门文章

  1. [渝粤教育] 南宁师范大学 聆听中国(南宁师范大学慕课) 参考 资料
  2. [渝粤教育] 广东-国家-开放大学 21秋期末考试招投标与合同管理10217k2 (2)
  3. 高速连传与LORA的区别和优势
  4. 5W-Lora电台的远距离传输优势
  5. linux中用参数代替键盘输入,Linux终端中使用上一命令减少键盘输入
  6. jq设置html的fontsize,Jquery 设置字体大小(font-size)与行高(line-height)
  7. 计算机二级web题目(7.4)--综合应用题1
  8. android webview javascript不执行,WebView中的JavaScript为什么不执行?
  9. linux指定内核位置,ARM linux内核启动时几个关键地址
  10. 重温6 ListView相关|单位dp/sp