论文Convolutional Naural Networks for Sentence Classification--模型介绍篇

来源:互联网 发布:淘宝能买汽车吗 编辑:程序博客网 时间:2024/04/27 14:46

最近读了Yoon Kim发表的Convolutional Naural Networks for Sentence Classification一文。这是一篇将CNN和NLP结合的文章,接下来我们会分模型介绍和代码实现两部分来介绍该论文。

论文所提出的模型结构如下图所示:
这里写图片描述
1,这里的输入层显示有两个channel,其实我们可以看作是一个,因为后文中说到这两个channel分别是static和non-static,即使用的词向量是否随着训练发生变化。non-static就是词向量随着模型训练变化(Fine tune),这样的好处是词向量可以根据数据集做适当调整,但是CS224d课程里也说过当数据集较小时不推荐此操作,否则容易产生过拟合现象。static就是直接使用word2vec训练好的词向量即可。此外,由图可知,输入层是将一个句子所有单词(padding)的词向量进行拼接成一个矩阵,每一行代表一个词。

2,卷积层,不做过多解释。每个卷积核的大小为filter_size*embedding_size。filter_size代表卷积核纵向上包含单词个数,即认为相邻几个词之间有词序关系,代码里使用的是[3,4,5]。embedding_size就是词向量的维数。每个卷积核计算完成之后我们就得到了1个列向量,代表着该卷积核从句子中提取出来的特征。有多少和卷积核就能提取出多少种特征,即图中在纵深方向上channel的数量。
这里写图片描述

3,池化层。文中提到pooling操作就是将卷积得到的列向量的最大值提取出来。这样pooling操作之后我们会获得一个num_filters维的行向量,即将每个卷积核的最大值连接起来。这样做还有一个好处就是,如果我们之前没有对句子进行padding操作,那么句子的长度是不同的,卷积之后得到的列向量维度也是不同的,可以通过pooling来消除句子之间长度不同的差异。
这里写图片描述

4,全连接层,为了将pooling层输出的向量转化为我们想要的预测结果,加上一个softmax层即可。针对电影评价的分类任务,就是将其转化为正面、负面两个结果。文中还提到了过拟合的问题,因为实验中所使用的数据集相对较小,很容易就会发生过拟合现象,在实验过程中也会发现当迭代3000多轮的时候准确率就会接近1。所以这里引如dropout来减少过拟合现象。此外还可以考虑L2正则化等方法实现防止过拟合的功能。
这里写图片描述

到这里其实对论文模型的架构已经介绍的差不多了,至于实验结果自然不必说,达到了很好的效果,现在其分类性能也成了新论文的标准线。具体的结果分析可以参考论文,这里不再详细赘述。那么接下来我们就开始介绍该模型如何使用TensorFlow实现。

0 0
原创粉丝点击