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, 里面的字随机初始化成向量vector x i ∈ R k x_i \in\mathcal{R}^k xi∈Rk,通过训练去调整,也就是所有的字其实都是要训练的parameter,个人认为这个需要很大的数据训练,所以这个model必然overfit. 这一系列的向量自称一条长为n的句子,如果每个字代表一个长为 k k k的行向量,则可将整个句子写成一个 k × n k\times n k×n的矩阵。Convolution filter w ∈ R h k w \in \mathcal{R}^{hk} w∈Rhk,即每个feature c i c_i ci 应该与h个连续单词(将这些单词写作 x i : i + h − 1 x_{i:i+h-1} xi:i+h−1,意即取了矩阵中的第 i i i到 i + h − 1 i+h-1 i+h−1行)有关,这个想法在某个方面上很像Local Attention mechanism. 公式为 c i = f ( w ⋅ x i : 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 map c = [ c 1 , c 2 , . . . , c n − h + 1 ] \mathbf{c} = [c_1,c_2,...,c_{n-h+1}] c=[c1,c2,...,cn−h+1],其中 c ∈ R n − h + 1 c\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有不同的 h h h: 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上并且结果也要用于计算 c i c_i ci的计算(感觉这里和其他的CNN不同,因为一般channels的number应该是和kernel的深度一致,但这里似乎没有,仿佛是分开计算的一样,可能我这里理解错了)。 每个model都不可避免需要做regularization, 本文用了dropout在penultimate layer (with a constraint on l 2 l_2 l2=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 ) + b y = \mathbf{w}\cdot(\mathbf{z}\odot \mathbf{r}) + b y=w⋅(z⊙r)+b, 而不是 y = w ⋅ z + b y = \mathbf{w}\cdot\mathbf{z} + b y=w⋅z+b. ⊙ \odot ⊙是element-wise multiplication operator, 它就像一个mask,对其中的元素有概率为 p p p遮住不让它传到下一层。
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的参数,但保持另一个的参数。