为什么用CNN做NLP

一、引例

我们首先来看这么一个问题,假设我们需要对句子做情感上的分类。


传统的词袋模型或者连续词袋模型都可以通过构建一个全连接的神经网络对句子进行情感标签的分类,但是这样存在一个问题,我们通过激活函数可以让某些结点激活(例如一个句子里”not”,”hate”这样的较强的特征词),但是由于在这样网络构建里,句子中词语的顺序被忽略,也许同样两个句子都出现了not和hate但是一个句子(I do not hate this movie)表示的是good的情感,另一个句子(I hate this movie and will not choose it)表示的是bad的情感。其实很重要的一点是在刚才上述模型中我们无法捕获像not hate这样由连续两个词所构成的关键特征的词的含义。


在语言模型里n-gram模型是可以用来解决,想法其实就是将连续的两个词作为一个整体纳入到模型中,这样确实能够解决我们刚才提出的问题,加入bi-gram,tri-gram可以让我们捕捉到例如“don’t love”,“not the best”。但是问题又来了,如果我们使用多元模型,实际训练时的参数是一个非常大的问题,因为假设你有20000个词,加入bi-gram实际上你就要有400000000个词,这样参数训练显然是爆炸的。另外一点,相似的词语在这样的模型中不能共享例如参数权重等,这样就会导致相似词无法获得交互信息。


二、卷积神经网络结构的认识

利用卷积神经网络实际上是可以解决上述的两个问题。在讲卷积神经网络前


https://zhuanlan.zhihu.com/p/30268946?utm_source=wechat_timeline&utm_medium=social&from=timeline