Convolutional Neural Network for Sentences Classification 笔记

Convolutional Neural Network for Sentences Classfication

文章特点

  1. 仅用一个很简单的拥有少数hyperpamater tuning and static vectors 的CNN, 就提高了七个任务中的四个SOA(state of the art),其中包括sentiment analysis and question classification.
  2. 四个model:
    2.1 CNN-rand: 基准model, 里面的字随机初始化成向量vector x i ∈ R k x_i \in\mathcal{R}^k xiRk,通过训练去调整,也就是所有的字其实都是要训练的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} wRhk,即每个feature c i c_i ci 应该与h个连续单词(将这些单词写作 x i : i + h − 1 x_{i:i+h-1} xi:i+h1,意即取了矩阵中的第 i i i i + h − 1 i+h-1 i+h1行)有关,这个想法在某个方面上很像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(wxi:i+h1+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,...,cnh+1],其中 c ∈ R n − h + 1 c\in \mathcal{R}^{n-h+1} cRnh+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(zr)+b, 而不是 y = w ⋅ z + b y = \mathbf{w}\cdot\mathbf{z} + b y=wz+b. ⊙ \odot 是element-wise multiplication operator, 它就像一个mask,对其中的元素有概率为 p p p遮住不让它传到下一层。
    two channels for an example sentences
    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的参数,但保持另一个的参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值