Convolutional Neural Network for Sentences Classfication
文章特点
- 仅用一个很简单的拥有少数hyperpamater tuning and static vectors 的CNN, 就提高了七个任务中的四个SOA(state of the art),其中包括sentiment analysis and question classification.
- 四个model:
2.1 CNN-rand: 基准model, 里面的字随机初始化成向量vectorxi∈Rkx_i \in\mathcal{R}^kxi∈Rk,通过训练去调整,也就是所有的字其实都是要训练的parameter,个人认为这个需要很大的数据训练,所以这个model必然overfit. 这一系列的向量自称一条长为n的句子,如果每个字代表一个长为kkk的行向量,则可将整个句子写成一个k×nk\times nk×n的矩阵。Convolution filter w∈Rhkw \in \mathcal{R}^{hk}w∈Rhk,即每个feature cic_ici 应该与h个连续单词(将这些单词写作xi:i+h−1x_{i:i+h-1}xi:i+h−1,意即取了矩阵中的第iii到i+h−1i+h-1i+h−1行)有关,这个想法在某个方面上很像Local Attention mechanism. 公式为ci=f(w⋅xi:i+h−1+b)c_i = f(\mathbf{w\cdot x}_{i:i+h-1} + b)ci=f(w⋅xi:i+h−1+b). 如果将这个filter运用到整个矩阵上, stride 为1的话, 就可以产生feature mapc=[c1,c2,...,cn−h+1]\mathbf{c} = [c_1,c_2,...,c_{n-h+1}]c=[c1,c2,...,cn−h+1],其中c∈Rn−h+1c\in \mathcal{R}^{n-h+1}c∈Rn−h+1. 然后运用max-over-time pooling operation在这产生的feature map中取最大值,c^=max{c}\hat{c} = \max\{\mathbf{c}\}c^=max{c}. 这个地方的目的其实是因为如果我们的filters有不同的hhh: variable sentence length, 这样我们最后得到的也能是一个向量,长度是filters的数量,否则可能每个output channel维度都不同。所以一个filter最后实际产生一个feature。 将所有filters产生的features形成一个penultimate layer(没想到倒数第二层也能有自己的名字), 而后通过一个full connected softmax layer,输出是labels的概率分布。
(这里应该是2.2与2.3的内容哈哈哈)如下图所示,某个模型有两个channel: static channel 和 non-static channel,前者vectors保持固定,后者通过backpropagation进行微调。每个filter都要应用到两个channels上并且结果也要用于计算cic_ici的计算(感觉这里和其他的CNN不同,因为一般channels的number应该是和kernel的深度一致,但这里似乎没有,仿佛是分开计算的一样,可能我这里理解错了)。 每个model都不可避免需要做regularization, 本文用了dropout在penultimate layer (with a constraint on l2l_2l2=norms of the weight vector)。 通过随机的dropout的好处是防止hidden units的co-adaption(个人理解相当于参数之间的相关性,免得有一些参数其实最后变化永远都是一起变化的)。
具体做法: 已知penultimate layer z=[c^1,...,c^m]\mathbf{z} = [\hat{c}_1,...,\hat{c}_m]z=[c^1,...,c^m], 我们用 y=w⋅(z⊙r)+by = \mathbf{w}\cdot(\mathbf{z}\odot \mathbf{r}) + by=w⋅(z⊙r)+b, 而不是y=w⋅z+by = \mathbf{w}\cdot\mathbf{z} + by=w⋅z+b. ⊙\odot⊙是element-wise multiplication operator, 它就像一个mask,对其中的元素有概率为ppp遮住不让它传到下一层。
2.2 CNN-static: 一个运用预训练得到的向量word2vec. 所有的词,包括未知的(被随机初始化),在训练过程中保持不变,并且只有其他参数进行学习。
2.3 CNN-non-static: 与CNN-static很相似,只是在训练过程中,每次任务可以微调这些vectors,
2.4 CNN-multichannel: 这个模型把word vectors弄两个set(里面初始的vector应该是一致的),每个filter都对两个channel同时工作,但是 gradients 只backpropagated 其中一个channel,也就是只微调其中一个channel的参数,但保持另一个的参数。