TextCnn,顾名思义,就是将卷积神经网络应用在文本领域!
1.模型示意图
- 输入是一个n*k的矩阵,n表示一个句子切分后的序列,k表示每个词的词向量的维度 ,即
- input -> hidden layer 通过权重矩阵h*k大小的W,W就是CNN中的filter,k是固定的,在词序列方向进行滑动,求卷积;然后加一个bias后做非线性激活,即
- 对于序列长度为n,filter大小为h*k,不断滑动,可以得到n-h+1 个卷积值 。这个比较好理解
- 然后采用max_pooling进行操作,捕获最重要的特征!
- 将下去就到全连接层了
通过这个图更加好理解
2.模型的一些细节
- textCnn 用了多个大小不同的filter
- 对于输入层的词向量,采用两种不同的方式进行对待, 第一种是训练过程中维持不变,另外一种是通过bp进行更新,这样会得到ci 的两种结果
- 正则化:实际上就是cnn中的dropout,以一定的概率剔除隐藏层的神经元
- 另外,对W的2范式做了约束,当 ||w|| > s 时,就让 ||w|| > s ,防止 ||w|| 过大
3. 试验参数设置
- 数据集包含MR,SST-1,SST-2 等共计7个文本数据
- filter 的 h 为3,4,5 ,分别有100个filter,共计 300个filter
- dropout 设置为0.5
- ||w|| > s ,中的s 设置为3
- batchsize 设置为50
- 采用SGD进行梯度下降
- 这些数据是基于SST-2的 验证集(dev)得到的
- 如果数据集中没有专门的验证集,那么就把从训练集中抽出10%作为验证集
- 几种模型:
-
CNN-rand:词向量随机初始化,并且随着训练进行更新
-
CNN-static:采用word2vec预训练的词向量,训练过程中不更新
-
CNN-non-static:采用word2vec预训练的词向量,训练过程中更新
-
CNN-multichannel:CNN-static+CNN-non-static
-
4.一些结论
- 建议采用预训练的词向量,预训练词向量可以跨数据集使用,如果在此基础上,采用non-static模式,做fine tune,能捕获特定数据集的特征,performance 也更好,如果词,预训练的词向量没有覆盖到,通过fine tune,可以捕获有意义的表征
- 建议采用multichannel模式,当初设计的本意是防止过拟合,试验结果显示表现更好,特别是在小数据集上
refer:
https://arxiv.org/pdf/1408.5882.pdf Convolutional Neural Networks for Sentence Classification
https://arxiv.org/pdf/1510.03820.pdf A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification