文本分类深度学习模型架构解析

前言

本文收集近年来深度学习中文本分类问题的主要模型并对相关模型架构进行大致的解读。目的是对有一定基础的学者能快速回忆起或者了解相关模型的大致结构,能对当前的研究或工作提供一个抛砖引玉的作用,同时可以让刚进入该领域的学者能对历年来的工作有个大概的了解,对深入学习提供一盏指路灯。也非常欢迎对相关论文非常熟悉的学者提出宝贵的意见。当前模型包括:

  • fasttext
  • TextCNN
  • TextRNN
  • TextRCNN
  • TextHAN

Fasttext

Paper: Bag of Tricks for Efficient Text Classification

fasttext.png

模型架构解析:该模型架构和word2vec中的cbow非常相似,只不过输出得是文档的类别标签。在输入方面fasttext使用N-gram作为附加特征来留存一些相近词序的部分信息。比如使用字符级别的bigram,“今天天气很好”,输入的是“今天”,“天天”,“天气”,“气很”,“很好”,上图中x_i表示第i​个文本所有N-gram features的归一化特征袋(即所有特征词袋表示的平均值,N表示有共有N个文档)。

fasttext使用 softmax 函数 f 来计算已知分类的概率分布。对于 N 个文档而言,这就会导致在分类上负对数似然的最小化,这也是模型在整个数据上的loss,公式如下图:

eq_1.png

第一个权重矩阵A 是基于词的查找表,这样可以把词转换到向量形式,Ax_n可以当做是该篇文档的向量形式,然后再输入线性分类器,B ​是softmax层的权重矩阵。

PS: fasttext模型另一个重要的作用是可以学习词向量,其效果可能不亚于word2vec和glove。

TextCNN

textcnn.png

Paper: Convolutional Neural Networks for Sentence Classification

模型架构解析:TextCNN用卷积来提取文本特征。由于CNN的输入维度大小是固定的,故首先需要将输入的句子填充或裁减为一个长度。每个词有其对于的词向量,这个可以使用预训练的词向量,也可以随机初始化交给神经网络训练。以下说明维度时不计batch的维度,输入的数据就是一个二维张量(如果考虑batch_size就是三维),每一行代表该行对应词的词向量,行数等于填充或裁减句子后的长度。输入层之后使用的是一维卷积,一维卷积可以把词向量的维度当做图像中的channel。卷积层可以采取不同尺寸的卷积核,从而可以获得不同的视野。由于是使用一维卷积相当于这是在做N-gram,只是在用卷积来提取特征,一维卷积层之后得到的也是二维张量,其中第二个维度等于该层使用卷积核的个数。上图中卷积之后的列向量表示的是每个卷积核作用的结果。然后再是经过一个池化层。该池化层取得是通过每个卷积核后得到的结果中所有元素的最大值,即max-pool,之后再把所有这样的最大值拼接起来得到一维张量(不计batch的size),维度就等于之前做cnn时使用卷积核的个数。这个操作相当于是把全局的序列信息保存下来,比如情感分析时:“我觉得这个地方景色还不错,但是人也实在太多了”,虽然前半句情感是积极的,但整个句子表达的是偏负面的情感。最后经过一个全连接层得到分类结果。

PS:文本本来是一维数据,虽然文本经过词向量表达后是二维数据,但是在embedding-level上的二维卷积没有意义,因此textcnn使用的是一维卷积。一维卷积也可以看成二维卷积的特殊情形。在使用tensorflow实现时可以用tf.nn.conv1d,同时也能用tf.nn.conv2d即二维卷积也能得到一样的结果,此时的二维卷积可以看做是输入通道为1,卷积层卷积核宽度为词向量的维度,池化层卷积核的宽度为序列长度减去池化层卷积核长度加上1,详见下面推荐的代码1(这里说的长度指行数,宽度指列数)。

实现textcnn的代码有很多,下面是亲测的两个能运行且star人数较多的github地址:

  1. https://github.com/dennybritz/cnn-text-classification-tf

  2. https://github.com/gaussic/text-classification-cnn-rnn

TextRNN

textrnn.png

代表论文: Recurrent Neural Network for Text Classification with Multi-Task Learning

模型架构解析: TextRNN模型架构上有很多变种,比如循环体单元可以用基本RNN单元、LSTM、GRU等,可以使用双向,也可以使用单向。在模型输出层,可以取循环网络最后一个时刻的输出结果做分类(如上图),也可以每个时刻的输出结果取平均值做分类,此时一般会把句子输入时padding的部分构造一个mask向量乘以每个时刻的输出结果把padding的部分不计入分类。这两种不同的输出形式可以分别见如下1,2:

  1. https://github.com/gaussic/text-classification-cnn-rnn

  2. https://github.com/tcxdgit/rnn-text-classification

PS: 上述第二个代码的作者由于是公司的数据不便公布,笔者阅读了他的模型部分,代码是否能正确运行未实验。

TextRCNN

textrcnn.png

Paper: Recurrent Convolutional Neural Networks for Text Classification

模型解析:通俗来说,模型的大概过程就是将每一时刻的词以及它的上下文向量(left和right两个向量)拼接起来,再在向量的每一个位置的值都取所有时序上的最大值,得到最终的特征向量用于分类,如上图所示。下面主要详细解释一下怎么得到一个词的left context和right context两个向量,word embedding就是当前位置的词向量。如上图和下图公式所示,第i时刻left context向量由第i-1时刻left context向量和第i-1时刻词向量得到(下图公式(1)),第i时刻right context向量由第i+1时刻right context向量和第i+1时刻词向量得到(下图公式(2))。当计算第一个词的left context时,c_l(\omega_0)是需要学习的张量,e(\omega_{0})​0,类似可计算最后一个词的right context。

eq_2.png

TextHAN

texthan.png

Paper: Multilingual Hierarchical Attention Networks for Document Classification

模型架构解析:

参考链接:https://blog.csdn.net/liuchonge/article/details/73610734

TextHAN是分层构建了词和句子两个注意力层,所用的基础架构还是RNN或其拓展(LSTM,GRU等),这里只详细解读一下HAN的注意力层具体是怎么计算的,整个模型架构可参考上述论文或参考链接或提供的源码。如图所示,word attention和sentence attention基本类似,这里已word attention为例,公式如下图:

eq_3.png

h_{it}表示第i个句子第t时刻的状态输出,这里的attention先将h_{it}经过一个激活函数为tanh的全连接层得到u_{it}。然后再将u_{it}u_w作内积,其中u_w也是需要学习的张量,将每个时刻得到的结果做softmax得到注意力权重 \alpha_{it},再加权求和(上图第三个公式)得到sentence encoder部分第i时刻的输入。sentence attention也是一样的计算过程,只是将最后得到的结果用于分类。

PS:TextRCNN和TextHAN的实现可参考下面这个地址:

https://github.com/zhengwsh/text-classification

待续...

第一时刻查看更新可关注github地址:
https://github.com/1234560o/Text-classification-in-deep-learning

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,123评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,031评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,723评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,357评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,412评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,760评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,904评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,672评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,118评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,456评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,599评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,264评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,857评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,731评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,956评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,286评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,465评论 2 348

推荐阅读更多精彩内容