Open 16372212 opened 3 years ago
word vectors:句子中的词语对应的依次(从上到下)排列的矩阵,假设句子有 $n$ 个词,vector 的维数为 $k$,那么这个矩阵就是 $n \times k$ 的。这个矩阵的类型既可以是 static,也可以是 non-static 的。
static:word vectors 是固定不变的。
non-static:在模型训练过程中,word vectors 也当做是可优化的参数,通常把反向误差传播导致 word vectors 中值发生变化的这一过程称为 fine-tuning。
$\text{1-of-V}$ encoding:每一个词用一个向量表示,向量的维度就是所有可能的词的数量,假如有10万个,那 $\text{1-of-V}$ encoding的维度就是十万维。每一个词,对应其中一维。用这种方式描述一个词,这个描述向量信息不丰富,不同词的词向量都是不同的,那就没办法知道词与词之间的关系。
模型训练和调参
这些参数的选择都是基于 SST-2 dev 数据集,通过网格搜索方法(Grid Search)得到的最优参数。另外,训练过程中采用随机梯度下降方法,基于 shuffled mini-batches 之上的,使用了 Adadelta update rule
四个模型
结论
Ye Zhang等人基于Kim Y的模型做了大量的调参实验之后的结论:
Ye Zhang等人给予模型调参者的建议:
Title | background | solution/contribution(系统还是算法贡献) | question |
---|---|---|---|
Convolutional Neural Networks for Sentence Classification | 现有的用于句子分类的方法有RNN, Fast-RNN,LSTM | 提供了一个简单的cnn。基于预训练的word vectors训练一个CNN,从而用于句子分类。并对CNN-vector做了微调:CNN-rand, CNN-static, CNN-non-static, CNN-multichanne | 那text的时间序列怎么办 |
two ‘channels’ of word vectors: one keep static, another fine-tuned via backpropagation.正则:l2正则
Input layer -> Convolution layer -> max pooling layer -> full connected layer+softmax layer
filter w的大小和window一样: 因为input的一整行代表一个单词,所以windows的宽度也就是filter的宽度应该是整个input的宽,否则就会把一个单词拆开。
filter可以看成权重的集合。会通过反向传播更新filter的。但是这个模型只有一层卷积层。而对于多层卷积,每一个卷积层的filter参数是不同的,因为loss function不同。
kernel,filter的区分:一个filter有多个kernel, 相当于filter的深度。但是一次卷积可以有多个filter, filter的个数决定了feature map的通道个数。
但是这个文章中对filter的理解稍有不同:
pre-trained word vector: 预训练的词向量
concatenation: (concat) 将新向量拼接到原来的向量之后,对应着维数增加
正则化:regularization: 修改函数误差,减少范化。
Dropout algorithm: 在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0),可以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用,检测器相互作用是指某些检测器依赖其他检测器才能发挥作用。 我们在前向传播的时候,让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强,因为它不会太依赖某些局部的特征
一般不是用rnn or LSTM做文本分类吗,为什么这个用cnn, 那text的时间序列怎么办( 样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要)
现在用LSTM, RNN, Fast-RNN的算法解决文本分类。那么文中的CNN与这些主流文本分类算法的优缺点是什么?
CNN也是将语言视为一个序列的,filter 是沿着时间维度在移动。 CNN比RNN更并行化,它在每个时间步长的状态只依赖于本地上下文, RNN要依赖过去所有的状态。
CNN 与 RNN在文本分类的比较: 1、An RNN is trained to recognize patterns across time, while CNN learns to recognize patterns across space. 但是在一些分类任务,比如情感分类,一些关键词起着决定性作用。比如“生气了”,“皱眉”等,因此,在这类问题中,CNN的效果也非常exciting. 但是对于翻译任务之类的任务,需要考虑全局的信息,上下文都很重要,因此RNN的效果会更出众。
2、 速度不同,CNN里较费时间的就是卷积了。但是RNN还需要记录上下文各种信息,速度很慢
paper: Convolutional Neural Networks for Sentence Classification github: CNN_sentence