NLP - TextCNN

1.  word2vec(word2Vec 来源和原理)

2, Text -CNN 文本分类 (转自:Text-CNN 文本分类

Text-CNN

合理性: 深度学习模型在计算机视觉与语音识别方面取得了卓越的成就, 在NLP 也是可以的,卷积具有局部特征提取的功能,所以可用CNN 来提取句子中类似n-gram的关键信息。
在图像数据处理时,CNN 使用的卷积核的宽度和高度是一样的,但是在text-CNN中,卷积核的宽度是与词向量的维度一致!这是因为我们输入的每一行向量代表一个词,在抽取特征的过程中,词作为文本的最小粒度,如果我们使用卷积核的宽度小于词向量的维度就已经不是以词作为最小粒度了。 而高度和CNN一样,可以自行设置(通常取(2,3,4,5), 高度类似于n-gram了。 由于我们的输入是一个句子,句子中相邻的词之间关联性很高,因此,当我们用卷积核进行卷积时,不仅考虑了词义而且考虑了词序及其上下文。(类似于skip-gram 和CBOW模型的思想)
详细讲解卷积过程: 卷积层输入的是一个表示句子的矩阵,维度为n*d,即每个句子共有n个词,每个词有d维的词向量表示。假设X_i:i+j 表示从词X_i 到词X_i+j,使用一个宽度为d,高度为h的卷积核W 与X_i:i+h-1(h个词)进行卷积操作后再使用激活函数激活得到相应的特征ci,则卷积操作可以表示为Ci=f(W.*Xi:j+h-1 _ + b). (卷积后维度缩减)。 因此经过卷积擦左后,可以得到一个n-h+1维的向量C 形如:C = [C1,C2,...Cn-h+1]. 以上是一个卷积核与输入句子的卷积操作,同样的我们也可以使用更多高度不同的卷积核,且每个高度的卷积核多个,得到更多不同特征。

2.2 池化层: 因为在卷积层过程中,我们使用了不同高度的卷积核,使得我们通过卷积层后得到的向量维度会不一致,所以在池化层中,我们使用1-Maxpooling对每个特征向量池化层一个值,即抽取每个特征向量的最大值表示该特征,而且认为这个最大值表示的是最重要的特征。

2.3 全连接层: 跟其他模型一样,假设有两层全连接层,第一层可以加上‘relu’作为激活函数, 第二层则用softmax激活函数得到属于每个类的概率,如果处理的数据集是二分类,第二层也可以用sigmoid作为激活函数,然后损失函数使用binary_crossentropy。


2.4 Max Pooling:只会输出最大值,减少参数维度,顺便对输入中的补0 做过滤。
2.5 SoftMax 分类layer: 最后接全连接softmax 层,输出每个类别的概率。
2.6 小改动(变种):    在word representation 处理上会有一些变种。
    1) CNN-rand:设计好embedding_size这个Hyperparameter 后,对不同单词的词向量做随机初始化,后续BP的时候做调整。
    2)static: 拿pre-trained vectors from word2vec, FastText or Glove 直接用,训练过程中不再调整词向量(迁移学习的一种思想)
    3)non-static: pre-trained vectors +fine tuning: 即拿word2vec训练好的词向量初始化,训练过程中再对他们微调。
    4)multiple channel: 类比于图像中的RGB 通道,这里也可以用static 与non-static 搭两个通道来做。
一些结果表明,max-pooling 总是犹豫average-pooling, 理想的filter sizes 是最重要的,但是具体任务具体考量,而用不用正则化似乎在NLP任务重没有很大的不同。

2.7 使用text-CNN模型对imdb数据集进行情感分析
从对上文的 text-cnn的模型介绍,我们将利用keras 搭建该模型,并对imbd数据进行情感分析。

卷积过程中,由于只是沿着高度方向进行卷积,即只在一个维度卷积,所以使用Conv1d。 Conv1d(filters, kernel_size, activation): 
filters: 卷积核的个数,kernel_size: 卷积核的宽度,activation: 卷积层使用的激活函数。

池化过程使用的在一个维度上池化,使用MaxPooling1D.
MaxPooling1D(pool_size): pool_size 池化窗口的大小,由于我们要将一个卷积核得到特征向量池化为1个值,所以池化窗口可以设为(句子长度-卷积核宽度+1,即卷积层得到的特征向量的长度)

池化过程最后还需要对每个值拼接起来,可以使用concatenate 函数实现。
concatenate(inputs, axis): inputs: 为一个tensor的list,所以需要将得到的1-MaxPooling 得到每个值append到list中,并把list 作为inputs 参数的输入。 axis:指定拼接方向。

2.7 Text CNN 的 tf 实现

CNN TF 

需要注意的细节有。

tf.nn.embedding_lookup() creates the actual embedding operation. The result of the embedding operation is a 3-dimensional tensor of shape [None, sequence_length, embedding_size].
TensorFlow’s convolutional conv2d operation expects a 4-dimensional tensor with dimensions corresponding to batch, width, height and channel. The result of our embedding doesn’t contain the channel dimension, so we add it manually, leaving us with a layer of shape [None, sequence_length, embedding_size, 1].

2.8  与LeNet 比较

LeNet-5 网络结构


LeNet-5
TextCNN

1)先来比较卷积:
LeNet 的filter 是正方形,且每一层都只用了同一种尺寸的卷积核,Text-CNN中,filter是矩形,且矩形的长度有好几种,一般取(2,3,4), 而矩形的宽度是定长的,同word的embedding_size相同,每种尺寸都配有NUM_FILTER个数目,类比于LeNet 中的output_depth,所以得到的feature_map是长条状,宽度为1,因为是卷积,所以stride每个维度都是1.
2)池化层:
池化处理也叫下采样。LeNet的kernel 是正方形,一般也是2*2等,所以会把卷积后的feature_map尺寸缩小一半,Text-CNN的kernel依旧是长方形,将整个feature_map映射到一个点上,一步到位,只有一个池化层。
3)全连接层
都是多分类,这一步处理比较类似,将池化后的矩阵reshape为二维度。

3,TextCNN 对新浪新闻文本主题分类


GPU 占用30%

GPU 30%


NVIDIA Quadro M1200

不过 内存占用比较多


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

推荐阅读更多精彩内容

  • 卷积神经网络(Convolution Neural Network, CNN)在数字图像处理领域取得了巨大的成功,...
    MiracleJQ阅读 7,540评论 0 6
  • 前言 作为NLP领域最经典的使用场景之一,文本分类积累了许多的实现方法。这里我们根据是否使用深度学习方法将文本分类...
    摩天轮的守候阅读 36,756评论 0 11
  • 这一篇文章主要是记录下自己阅读《Convolutional Neural Networks for Sentenc...
    云时之间阅读 12,047评论 0 7
  • 1.文本分类 转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结。 本文介...
    流川枫AI阅读 35,639评论 23 76
  • 一些废话好久没有更新了,简书上公式编辑实在是让我不舒服~发现,不写下来自己的金鱼脑袋太容易忘记。ok,继续记录。由...
    是neinei啊阅读 7,936评论 0 13