TextCNN和图像CNN最大的区别就在于TextCNN是一维卷积,而图像CNN是二维卷积
有些人认为一维卷积核二维卷积的区别在于输入数据的维度,认为一维卷积的输入是一维数据,二维卷积的输入是二维数据;其实不然,两个最大的区别是卷积滑动的方向:
- 一维卷积只在一个维度上进行滑动
- 二维卷积先在第一个维度上滑动,然后在第二个维度上滑动,比如对于图像来说,卷积核先在第一行像素上横向活动,然后再在第二行上横向滑动…
textCNN过程如下图所示:
对于一个 n* k 的文本序列,n代表文本序列的长度,k代表embedding的维度,每个卷积核的宽度和embedding的维度保持一致;对于同一个序列 可以有多个n*k的矩阵(类似图像中的 RGB channel),每个矩阵是由不同模型得到的词向量矩阵(如 Glove、word2vec等),关于获取词向量的方法对比可以参考此->#最全面# NLP获取词向量的方法(Glove、n-gram、word2vec、fastText、ELMo 对比分析)
卷积核的长度可以不同,这主要取决于n-gram的大小,当使用2阶n-gram思想时卷积核的长度就为2,当使用3阶n-gram思想时卷积核的长度就为3
和图像上的二维卷积不同,文本序列上的卷积属于一维卷积,整个卷积核只在矩阵的长度维度上进行滑动;同时通过卷积核卷积之后得到的 feature map 也是一个一维向量;
最后,通过全局最大池化(取出每个 feature map 中多大的值)将每个feature map转化为一个单个值,在将这些单个值拼接成一个一维向量,后面就可以连接一个全连接网络进行分类了。