TextCNN的个人理解

TextCNN应该是NLP中非常经典的模型了,文本分类中他应该是深度学习方法的入门级方法,最近发现很多博客和github其实对Textcnn没有完全理解,内容上其实完全违背了作者的本意,不要把TextCNN简单地认为就是用了CNN而已,TextCNN之所以被称为一个里程碑式的工作,会因为它具有很多有意思的思路,不仅仅是用了CNN本身。我来和大家谈谈TextCNN论文里面提到的一些思路和细节。

参考文献放两个,一个是原作,另一个是我参考的博客。

  • Yoon Kim,Convolutional Neural Networks for Sentence Classification:原论文。

  • https://www.cnblogs.com/bymo/p/9675654.html:博客一篇。

TextCNN的主要思路

具体思路可以用下面一张图来表示:

这个还是非常明显的,做了embedding后,卷积层、最大池化层、全连接层,一气呵成,这个结构相信对深度学习的大家应该理解起来都不会太难。

但是,只理解到这一步绝对不能理解到TextCNN其中的内涵,毕竟论文虽然不长,但是上面几句话确实不需要很多篇幅。

深挖TextCNN中Trick

一维卷积

首先,这里的一维卷积,绝对不是指卷积核是一维的,卷积核的实质是一个x行y列的向量,尤其y,是指embedding词向量的维度,x经常在2-5之间。来看这个图,大家应该会更加清楚的。

这里为了简化,每个单词给了一个只有5维的词向量,后面分别是给了3种类型的卷积核,但是都有一个特点,就是他的列都和词向量一致,这就是一维卷积的核心,相当于要从整个词向量(玄学的说就是语义)抽取关键信息。

另一个关键点在于一个关键点在于,卷积的横向x行,这个行的实际含义可以理解为N-Gram的形式的信息抽取。

预训练模型和微调

在那个时代,word2vector是非常常用的预训练模型,预训练模型的优点就是可以利用外部数据,外部数据代表的是整体语境的含义,这就是预训练词汇的优势。但是,这个理解外部信息也是一个劣势,毕竟你的具体问题不是整体领域,而是某个垂直领域,这就导致你这里需要分析和取舍。更为夸张的,作者给出了4种处理预训练词向量的模式。

  • 词向量直接用随机的。

  • 固定的预训练词向量模型。

  • 微调的预训练词向量模型。

  • 多通道预训练词向量模型。

这里的多通道,最终使用的方法是一个通道是固定的预训练词向量模型,走卷积核等整个链路,预训练模型不跟着反向传播更新卷积,另一个通道预训练词向量模型也是走卷积等整个链路,但是预训练模型参数会跟着反向传播更新,两个链路在最大池化后concat起来一起做全连接得到最终分类结果。

那么,上面几个方案,具体那个好呢,作者是做了实验的:

其实可以感受到,随机的和固定模型的小伙都是靠后的,而多通道和微调在不同的数据下则比较接近,各有胜负。

所以,通过论文这个角度,用预训练模型,然后进行微调,性价比是最高的,多通道毕竟运算复杂度更高。

这里多通道和微调的结果接近的深层次原因还有待深入探究,个人认为很可能是因为这里面都包含了微调,毕竟微调和固定的结果差距很大,这里可能在concat后的全连接中,给了固定模型更低的权重,从而导致两者接近过接近。这个猜想做着同样做了一些的分析:

超参的细节

超参作者谈的不多,直接整了,这由于是作者自己尝试过的,所以我们可以作为参考,我们看看里面有没有一些trick吧。

  • 卷积层的行用了3,4,5三种,代表的是三种N-Gram窗口大小,没用2,有点意思。(感觉这个中英文可能有差异)

  • 随机失活用了0.5,个人感觉还不小。

  • L2正则,权重3.

  • batch size用了50。

(0)

相关推荐