最近读了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就是词