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

0e86b2d4a822edc29b808a8abeecd0a9.png

作者 |  何从庆

转载自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

ca5270c6849cc439c5be55dc268b790d.png

图1:TextCNN模型架构

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

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

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

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

43f1934694f3cf09fa9e3ce31ae8cc21.png

图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

240c2d914037ff5983f1a54dcdf60c14.png

图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。

9cf0490e3a6f142339e7255fdc4315cc.png

图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

90fca351ed43d9d932921b210b009035.png

图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

854f6589fda1c0b7f4058d3cfe856b29.png

图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

4d10e0aae9457f9a1812efa9091987e0.png

图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

134cc4701ee5d5925c5a0023ba5e582f.png

图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.

8d3b9fa7274e07748e5bbe3139477530.png

图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状态概率重构实例的表征。

a902d0ee5ddeab1134e7e003ae91ae34.png

图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

187597a2f7b5125d8af8ffb723a264d9.png

图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

49e0e8d15260b8bdc3e96bb2922ec9bd.png

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

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

精彩推荐

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

6a5e8101dfee3e8a4bf9c84f268b1258.png

推荐阅读

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

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

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

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

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355494.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 8 Streams API:对流进行分组和分区

这篇文章展示了如何使用Streams API中可用的Collectors将具有groupingBy的流元素和具有partitioningBy的流元素进行groupingBy 。 考虑一系列Employee对象,每个对象都有名称,城市和销售数量,如下表所示: ----------------------…

vi/vim 编辑器详解

vi/vim : 强大的编辑器 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi n filename :打开文件,并将光标置于第n行首 vi filename :打开文件,并将光标置于最后一行首 vi /pattern …

linux 定义快捷命令,Linux系统自定义快捷命令的详细说明

Linux系统用户可以自定义喜欢的快捷键命令。下面由学习啦小编为大家整理了Linux系统自定义快捷键命令的详细说明,希望对大家有帮助!Linux系统自定义快捷命令的详细说明目前总结到的有两种方式,一种是临时快捷键,一种是永久快捷键。Linux系统自…

python求最小公倍数_python求最大公约数和最小公倍数的简单方法

python怎么求最大公约数和最小公倍数 一、求最大公约数 用辗转相除法求最大公约数的算法如下: 两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。比如10和25,25除以10商2余5&#xff0c…

linux如何获取raw中的文件路径,如何使用Linux获取Touchscreen Rawdata的坐标

我们有一个3米的微触摸显示屏.它通过usb连接到我的debian系统,并被识别为人机界面(hid).我正在尝试访问并推送实时信息…如果它被触及我想知道哪里(x,y)并通过netcat管道到另一台主机.不幸的是,我只能使用原始数据cat /dev/input/event2 | hexdump要么evtest你得到的hexcode似乎…

实验三+067+冯艳芳

一、实验目的 掌握黑盒测试用例设计方法 二、实验要求 (1)对被测程序进行黑盒测试用例设计 (2)运用等价类、边界值、决策表、状态图法等进行测试用例设计。 (3)对手机上任意一款音乐软件进行黑盒测试实践。…

python越来越慢_为什么Python中的串联速度越来越慢?

为什么在某些情况下,Python 3中的连接似乎比Python 2中的连接慢? 影响最大的串联方法似乎是字节对象的连续串联,从O(n)到O(n?)操作. 我的分析代码大部分在这里: #!/usr/bin/env python from operator import concat from sys import version, version_i…

jvm gc策略_IBM JVM调整– gencon GC策略

jvm gc策略本文将向您详细介绍从Java虚拟机(例如HotSpot或JRockit)迁移到IBM JVM时重要的Java堆空间调整注意事项。 此调整建议基于我为我的一个IT客户端执行的最新故障排除和调整任务。 IBM JVM概述 正如您可能从其他文章中看到的那样,IBM …

linux etc 服务启动脚本,linux 服务脚本启动问题

对于使用了 systemd 的系统,所有的 service 服务都会默认转为 systemd 服务之后再由 systemd 来执行,转换之后,你也可以直接使用 systemd 来执行了(它的用户工具就是你用的 systemctl),除非是一些非 service 标准的命令&#xff0…

芬兰高性能图表控件-免费试用并提供技术支持

图表控件对于很多技术研发人员、工程设计师来说肯定不陌生,但市面上已有的图表控件产品大多功能单一、性能也不稳定,很难满足不同人群在不同场合的使用需求。为此,专注于开发高性能和最先进的数据可视化工具公司Arction则给出了完美的解决方案…

linux open函数_Linux驱动开发 / 字符设备驱动内幕 (1)

哈喽,我是老吴,继续记录我的学习心得。一、保持专注的几个技巧将最重要的事放在早上做。待在无干扰环境下,比如图书馆。意识到刚坐下开始投入工作前,有点负面小情绪是特别正常的现象。让“开心一刻”成为计划的一部分。拥有合情合…

xftp 无法连接linux 22端口,解决Xshell不从22端口连接服务器

PL/SQL Developer主数据库连接和窗口连接切换Oracle开发者估计对PL/SQL Developer都非常熟悉了,里面有些小的功能点大概还有些初学者没发现.PL/SQL Developer支持多连接多窗口,下面详细说说. 主连接的概念 打开PL ...4 多表代替密码之Hill 密码 2实现该解密方法的KEY 不…

bzoj4484[JSOI2015]最小表示

题意 给出一张DAG,要求删除尽量多的边使得连通性不变.(即:若删边前u到v有路径,则删边后仍有路径).点数30000,边数100000. 分析 如果从u到v有(u,v)这条边,且从u到v只有这一条路径,那么这条边必须保留.否则这条边一定可以删除.因为如果有不止一条路径从u到v,必然存在点x(x!u,x!v)…

Enterprise Spring示例和集成测试

我的博客中的空白更长,因为我正在忙着写《 Pivotal认证的Spring企业集成专家考试–学习指南》 。 这本书是沉重的例子。 幸运的是,Apress同意开源所有这些示例。 因此, 在此GitHub存储库中有大量可用的Spring示例 。 总共146个带有集成测试的…

github删除文件_github 仓库中删除历史大文件

问题如果git中提交了大文件,而且保存到了版本库中,那在下载或者克隆git包的时候,速度会非常慢。再加上github在国内访问本来就很慢,可能会导致包无法下载(克隆)。为了提升下载(克隆)速度,可以永久的删除这些文件(包括该…

linux plc编程软件,基于Linux平台的可编程控制器软PLC设计

实例下面以一个简单的对3并口通道循环控制为例,说明软PLC 的工作流程。(1)梯形图编程。从软PLC 主界面进入后,启动梯形图编程,调用梯形图编程的主程序。梯形图编程共需要调用梯形图界面模块、关闭模块、IO 模块,这些均在配置文件中…

django的ModelForm

一、ModelForm 二、Ajax 原生 jQuery 伪Ajax操作 三、文件上传(预览) - Form提交(会刷新页面) - Ajax上传文件(推荐) 四、图片验证码(跟session配合) 五、CKEditor,UEEditor,TinyEdi…

insert into语句_入门MySQL——DML语句篇

前言:在上篇文章中,主要为大家介绍的是DDL语句的用法,可能细心的同学已经发现了。本篇文章将主要聚焦于DML语句,为大家讲解表数据相关操作。这里说明下DDL与DML语句的分类,可能有的同学还不太清楚。DDL(Data Definitio…

HBase shell 命令。

HBase shell 命令。 进入hbase shell console$HBASE_HOME/bin/hbase shell如果有kerberos认证,需要事先使用相应的keytab进行一下认证(使用kinit命令),认证成功之后再使用hbase shell进入可以使用whoami命令可查看当前用户 hbase(…

python常用库有哪些餐厅_Python常用库整理

前两天有个同学问我关于Tkinter库的问题,但是我连Tkinter库是干啥的都不清楚,有点尴尬。Python库博大精深,涉及各个领域,多了解一些著名的库总比不知道的好。GUI图形界面TkinterwxPythonPyGTKPyQtPySideWeb框架Djangoweb2pyflaskb…