CNN为啥能使用在NLP?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CNN为啥能使用在NLP?相关的知识,希望对你有一定的参考价值。

特征提取很大意义上就是在提取该数据对于当前分类要求最有用的信息。但是general的机器学习模型,很难直接将数据之间的关联分析出来,所以需要设计特定的模型来分析这些关联,其实可以这么说,N-gram模型就是从语句中找N个词之间的关系,把所有的训练数据中N个词之间的关系变成一个统计模型,然后利用这个统计模型对之后的数据进行分析而这N个词之间的关系,就是一个局部的N个词之间的关系,如果N过大,用于统计的数据不够,就会导致模型的过拟合,而N太小则会导致欠拟合。CNN和N-gram的最大不同之处就在于:N-gram是直接统计不同的N个词之间组合在一起的概率,CNN是通过学习得到不同词组合的每个kernel的权重,加权和来达到某种分类或者其他目的。

参考技术A

CNN就是一个超级N-Gram,而N-Gram就是考虑局部统计信息的语言模型,CNN相当于在低维向量空间中实现了它。如果我们用一个滑动窗口(比如宽度是2)滑过一个句子,那么,我们便可以提取到句子中的所有2-gram。假设句子中的字都是用向量x1,x2,…xn表示的,那么,如果用卷积核(a,b)跟这个序列卷积就得到了向量序列ax1=bx2,…,axn-1+bxn, 也就是对句子中的每个2-gram 构造了个向量表示。不过这种向量表示真的合理吗?构造出的向量真能表达2-gram的语义吗?假设句子中包括这样两个2-gram,“吃饭”和“美丽”。有什么理由认为“吃”和“饭”的加权方式应该跟“美“和”丽“的加权方式一样?注意前者是动宾结构,后者是并列结构,分别对应于不同意义上的语义组合。所以这其实是卷积类的语义表达面临的问题。 这个问题有多严重不太好说,因为每个词向量,通常也跟着卷积核一起被训练调整,在一定程度上缓解了这个问题。解决这个问题一个最直接的办法就是让每个窗口里的权重 (a,b)随着它见到的词变化,这可以通过 attention 来给每个窗口生成(a,b)。当然,这样做法的代价是会引入更多的参数,不如直接卷积经济。另外最近attention 有取代卷积的趋势,变成"all you need" 的了,呵呵,也是有些道理的。 不过即使这样,不管CNN,LSTM, 还是 attention, 目前 NLP 的这些深度模型其实还很原始。

参考技术B

CNN应用的条件一般是要求卷积对象有局部相关性,还有就是CNN、RNN、注意力都是一种组块方法,把重复出现的模式组块成更高级的特征。而文本是符合这个条件的。卷积的过程实际上是一种模式匹配的过程,在CV的人脸识别中一个卷积核匹配的可能是眼镜或者鼻子等局部部位,而对于NLP的文本分类任务,一个卷积核匹配的则是特定的关键词或关键短语。后面提取出来的特征实际上就是表示句子中是否出现过这样的关键词或者关键短语,相当于低维空间的词袋模型,这样的特征信息对文本分类任务自然是非常有用的。

以上是关于CNN为啥能使用在NLP?的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 Tensorflow 理解用于 NLP 教程的 CNN

CNN for NLP

如何解决基于 NLP 的 CNN 模型中的过度拟合问题,以使用词嵌入进行多类文本分类?

理解NLP中的卷积神经网络(CNN)

【自然语言处理】CNN在NLP文本分类任务上的经典之作——TextCNN

CNN和RNN在NLP任务中的对比实验