CNN学习记录(二)
之前写过关于CNN的基础知识总结,在这里也就不再重复这些问题,需要查看基础的请点击。
CNN用于文本分类原理
我们知道,CNN
广泛的用在了图像领域,是图像领域的一个重大利器。但是现在,随着循环神经网络RNNs
在长距离文本处理的缺点,人们开始使用CNN
来提取特征,CNN
提取的方式可以从下图来解释:
假设我们一句话是:
wait for the video and don't rent it.
那么我们CNN
在提取特征的时候是一个怎样的过程呢?
可以按照上面的图来看,第一个红框,即对应着wait for
这两个单词的向量,后面经过卷积层,将这两个单词的向量映射为经过卷积层之后一个方框,然后移动我们的窗口,然后要处理的单词变为for the
,同样的,经过卷积层,能够提取出来一个向量,如此往复…
这个提取过程是不是很像我们之前学过的一个内容:就是n-gram特征,我们在进行语言模型的时候,在做n-gram的时候不就是这么操作的么?这里是n=2,当然,你也可以去提取三元语言特征等等。这就是神经网路强大的地方,不用我们自己去提取特征,而是自动提取特征。
然后将提取过来的特征进行max-pooling
,最后再加上一个神经网络的全连接层一下子就ok
了。
虽然理论上CNN
可以提取任意长度的特征,但是考虑一些其他的因素,我们在处理的时候,只会将n取为较小的值。这样的效果更好。
也可以分析一下论文上面的图,基本和我上面的解释是一致的.
理解了CNN
用于文本分类的原理,那么现在我们自己定义网络结果来实现文本分类。
CNN用于文本分类实战(Pytorch
)
刚开始写的时候,就算是参考着别人的代码都是各种不熟悉,各种报错。
在设计网络的时候,可以先想一下自己设计的网络结构是怎么样的,可以画个草图,然后通过这个模型,查看数据的流向,看模型需要哪些数据,然后再在初始化的时候初始具体的内容。
所幸的是,虽然过程很艰难,但是也可以说迈出了一步,写下去,孰能生巧。多思考网络,多思考接口。加油!
Reference
Convolutional Neural Networks for Sentence Classification
ification](https://arxiv.org/abs/1408.5882)
https://github.com/bebound/textcnn/blob/master/textcnn.ipynb