Text CNN

Overview

本节我们来重点介绍一下卷积神经网络在文本分类问题当中的应用。CNN网络在图像领域已经占据了主导地位,在文本领域也有不错的表现。在 "Convolutional Neural Network for Sentence Classification" 一文中,作者使用了CNN进行文本分类任务,取得了非常不错的效果

事实上在很多情况下,Multi-Window-Size的CNN正确率和LSTM相差无几,下面我们来看一看模型的结构。

Model Structure

我们知道在CV领域中,CNN是使用卷积核在不同的channel上进行特征提取,每一个卷积核都会提取出一张feature map,然后我们再去做pooling。那么在文本分类的时候,我们显然是没有 R G B RGB RGB三个channel的。通常情况下,我们会将原始文本经过处理转变成一个shape为 [ b a t c h , s e q _ l e n , e m b e d d i n g _ d i m ] [batch, \ seq\_len, \ embedding\_dim] [batch,seq_len,embedding_dim]的矩阵,这里类比图像, s e q _ l e n seq\_len seq_len可以认为是 h e i g h t height heighte m b e d d i n g _ d i m embedding\_dim embedding_dim可以认为是 w i d t h width width。那么显然如果我们想要使用二维卷积,我们的shape是少了一个channel维度的

但是再转念一想,这不就是一张黑白图像么!我们就把这个矩阵当作是一个 c h a n n e l = 1 channel=1 channel=1的图像,然后再应用卷积,不就大功告成了。因此,我们每次使用一个 k e r n e l _ s i z e kernel\_size kernel_size[ w i n d o w _ s i z e , e m b e d d i n g _ d i m ] [window\_size, embedding\_dim] [window_size,embedding_dim]的卷积核来进行文本特征提取,这里:

  • window_size表示每次我们希望看到几个单词(我们默认使用token level),window_size的选取也很重要,因为选小了,我们可能会捕捉不到上下文信息;选的太大,可能会导致计算资源的浪费或者模型准确率的下降
  • embedding_dim就是词向量的维度,这里我们不难发现,卷积核的kernel_size是一个矩形。文本比较特殊的是,每一个token是用一个向量进行表示,因此如果我们的卷积核每次不能覆盖一个完整的单词,那么就会丢失掉很多的信息。这一点与图像不一样,因为图像的每个像素点就是一个scalar,我们不会把像素点再用一个向量进行表示。

Multi Window Size

上面我们提到卷积核的window_size对模型的表现能力会产生很大影响,那么我们自然会想到使用多种大小的window_size,这样不就能取长补短了么?因此我们使用多组卷积核,每组卷积核的window_size互不相同,然后就得到了多张feature map。接着我们将所有的feature map进行一个concatenation,再丢进池化层

(当然也可以先对每张feature map进行池化,再concatenation,效果一样),得到一个shape为 [ b a t c h , o u t _ c h a n n e l ∗ n ] [batch,out\_channel*n] [batch,out_channeln]的特征矩阵,再经过一个linear transformation,最后就得到了我们的输出。

值得一提的是,原论文采用的window_size是 [ 3 , 4 , 5 ] [3,4,5] [3,4,5]

Static vs Non-Static

论文中还提出了许多提升模型效果的方法,其中一个就是Non-Static CNN。Static CNN就是我们使用了静态的词向量,如最经典的word2vec,直接将与训练好的词向量复制到我们的Embedding Layer中,不随卷积层一起训练。那么Non-Static CNN就是在训练过程中同时训练更新词向量,根据不同的任务做一下fine tuning,作者发现Non-Static CNN效果要优于Static CNN。

现Non-Static CNN效果要优于Static CNN。

TextCNN模型详解相关推荐

  1. 文本分类算法TextCNN原理详解

    详情请看:膜拜大佬![原创]文本分类算法TextCNN原理详解(一) - ModifyBlog - 博客园 Textcnn 原理 与rnn lstm 的比较, Textcnn更快 textCNN的总结 ...

  2. 使用pickle保存机器学习模型详解及实战(pickle、joblib)

    使用pickle保存机器学习模型详解及实战 pickle模块实现了用于序列化和反序列化Python对象结构的二进制协议. "Pickling"是将Python对象层次结构转换为字节 ...

  3. Transformer 模型详解

    Transformer 是 Google 的团队在 2017 年提出的一种 NLP 经典模型,现在比较火热的 Bert 也是基于 Transformer.Transformer 模型使用了 Self- ...

  4. TensorFlow Wide And Deep 模型详解与应用 TensorFlow Wide-And-Deep 阅读344 作者简介:汪剑,现在在出门问问负责推荐与个性化。曾在微软雅虎工作,

    TensorFlow Wide And Deep 模型详解与应用 TensorFlow Wide-And-Deep 阅读344  作者简介:汪剑,现在在出门问问负责推荐与个性化.曾在微软雅虎工作,从事 ...

  5. TensorFlow Wide And Deep 模型详解与应用

    Wide and deep 模型是 TensorFlow 在 2016 年 6 月左右发布的一类用于分类和回归的模型,并应用到了 Google Play 的应用推荐中 [1].wide and dee ...

  6. 数学建模——智能优化之模拟退火模型详解Python代码

    数学建模--智能优化之模拟退火模型详解Python代码 #本功能实现最小值的求解#from matplotlib import pyplot as plt import numpy as np imp ...

  7. 数学建模——智能优化之粒子群模型详解Python代码

    数学建模--智能优化之粒子群模型详解Python代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplo ...

  8. 数学建模——支持向量机模型详解Python代码

    数学建模--支持向量机模型详解Python代码 from numpy import * import random import matplotlib.pyplot as plt import num ...

  9. 数学建模——一维、二维插值模型详解Python代码

    数学建模--一维.二维插值模型详解Python代码 一.一维插值 # -*-coding:utf-8 -*- import numpy as np from scipy import interpol ...

最新文章

  1. iptables防火墙策略
  2. C语言基础-数据类型
  3. 我曾七次鄙视自己的灵魂
  4. POJ 3258 -- River Hopscotch(二分)
  5. 我的世界JAVA刷怪范围_《我的世界》只有刷怪蛋能够刷新生物吗?并不是,还有一种物品!...
  6. 【JAVA学习】09.创建BootstrapTale列表页
  7. @param注解什么意思_Java反射是什么?看这篇绝对会了!
  8. mongo .update
  9. Java Web 开发的目录结构
  10. numpy常用矩阵运算
  11. HenCoder Android 自定义 View 1-6:属性动画(上手篇)
  12. linux基础(十四)定时任务和管理系统的临时文件
  13. electron-vue中调用系统屏幕键盘(linux与windows)
  14. elasticsearch的父子_ElasticSearch 学习记录之父子结构的查询
  15. 【mysql 练习题】查询和“01”号同学所学课程完全相同的其他同学的学号
  16. 美团 java_GitHub - meituan/mssapi_java: 美团云对象存储 Java SDK
  17. Mac使用技巧/M1 Mac安装 PS 2021 闪退、卡启动界面解决方法
  18. golang(3)高质量编程与性能分析
  19. 学习笔记-TP5框架学习笔记\(路由\)
  20. 将XML文件中的内容批量修改

热门文章

  1. 一个完整的搜索系统 - God bless you - 博客园
  2. 异地多活场景下的数据同步之道
  3. Linux-文件类型
  4. python api接口10060_Python请求错误10060
  5. Spring 核心思想
  6. DCT 变换(几个简单的MATLAB的例子)
  7. 【Promise】自定义 - 手写Promise - Promise.all - Promise(executor)
  8. 算法笔记-CDQ分治
  9. 徐宗本院士:智能制造的大数据机遇与挑战
  10. 过去 10 年,阿里在开源圈做了什么?