Neural Network Methods for Natural Language Processing 读书笔记4 —— CNN

前段时间一口气读完了 NN4NLP,很是畅快,非常喜欢作者行文讲解的口吻和逻辑。大概两周读完,每页都有收获,读完后反而担心有所疏漏,知识太多留不住,索性从头来一遍,把学习过程的知识点和思考记录下来,也算精简版供自己今后查阅。
感兴趣的,可以一起学习讨论,真的很推荐这本书。

大致介绍下该书。NN4NLP 由 Goldberg 撰写,是 CMU CS11-747 课程的教材,配合公开课食用更佳,公开课链接。本书并非系统介绍 NN 和 NLP,而是聚焦 NN 在 NLP 领域的具体应用,所以分成了四大部分:NN 中前馈神经网络的入门,前馈神经网络在 NLP 中的应用,RNN 等特殊结构在 NLP 中的应用,部分前沿方向介绍。
因此,本博客也打算分成多篇进行总结,其他篇章请自行搜索本博客。


特殊结构的神经网络

前面讲的都是前馈神经网络,其结构并没有对语言数据或序列进行什么特别设计,下面我们将介绍几个处理语言数据的专有神经结构,包括 1D CNN、RNN、sequence-generation model、conditional generation。

本书讲的 CNN 和 RNN 结构主要为当作特征提取器看待。即 CNN 或 RNN 并非孤立使用的模块,而是作为更大网络的一部分,负责产生一个向量或者向量序列,再 feed 给后面的模块或者后面的预测模块,整个网络的训练是 end-to-end 的。
目前为止,对于文本类任务来说,基于 RNN 的特征提取器相对 CNN 更普遍。但不同的结构有不同的优缺点,优势并不是永恒的,混合模型也在变得更流行。

通常来说,可以把 CNN 或 RNN 结构看做积木,可以混合组合来创造想要的结构实现想要的行为。这一思路由计算图机制和基于梯度优化得以保障的。即可以把 MLP、CNN、RNN 等结构当成模块来看,进行混合组合,只需要保证模块之间的输入输出维度匹配,其他的都交给计算图和基于梯度的训练即可。

Goldberg 建议,当学习到一个新的架构时,不要想着它可以替代已有的什么架构,或者可以用它解决什么问题,应该想的是怎么把它融到自己的模块工具库,并把它和其他架构相组合来实现更好的结果。

CNN

对于图片来说,CNN 主要应用结构为2D(网)卷积,针对文本,主要关注与1D(序列)卷积。

在 NLP 中,通常我们要进行基于序列集合(比如句子中的词序列,文章中的句序列)的预测任务。
一种方法是以 CBOW 的表示方式将它们全 feed 进一个全连接的 NN 如 MLP,但显然完全忽略了顺序信息。
一种方法是,不再针对单一元素使用 CBOW,而是基于 ngrams 使用 CBOW,虽然可以学到一定顺序信息,但显然会产生巨大的 embedded 矩阵、没法 scale 更长的 ngrams、会面临数据稀疏等问题。
CNN 结构(也称卷积-池化架构)专门可以解决这种问题。

CNN 专门设计来识别较大结构中的象征性局部预测器,并将它们结合以产生一个针对该结构的固定尺寸的向量表示,同时捕获那些对于预测任务最有信息量的局部特性。换句话说,CNN 不需要对每个可能的 ngrams 进行预先指定嵌入向量,即可识别那些对预测任务有用的 ngrams。将 CNN 扩展到多层卷积层,每一层可以有效着眼于句中跨度更大的 ngrams,从而最终可以识别一些不连续的 ngrams,即 gappy-ngrams。
可见,CNN 在整个网络中任务就是抽取对全局预测有用的子结构。

下图是一个 1D 窄卷积 + max池化的例子。
这里写图片描述
下面,针对这个结构,我们进行略详细的介绍。

1D 卷积

假设划窗尺寸为 k,共 l 个 filter。一个 filter 作用于一个划窗里所有词构成的拼接向量,产生一个标量,l 个 filter 作用于一个划窗得到该划窗的表示向量。
上例称为 narrow 卷积,如果在句子两端添加一些 padding 增加划窗数量称为 wide 卷积。

CV 中有 channel 的概念,在文本处理中也可以借鉴这种思想,即从不同角度看待数据,如对于一个语句,一个 channel 可以关注词的序列,一个 channel 可以关注 pos 的序列,对这两个序列分别应用卷积得到两个向量,然后拼接或者平均来使用。

池化

如果一个语句有 m 个划窗,那么经过卷积后该语句会产生对应的 m 个向量,将这 m 个向量处理为一个向量的过程,即称为池化。池化后的向量作为该语句的表示,可以 feed 进后面的网络。
池化的具体方式有最大化池化、平均化池化、K-max 池化、动态池化。

变种

也可以并行设置多个卷积层,如每个层采用不同的窗口尺寸以捕捉不同长度的 n-gram 信息,每个卷积层结果池化后向量进行拼接,然后 feed 进后续网络。

同样卷积结构也没必要限制在语句的线性结构,可以推广至语句的依存信息。

特征哈希
分层卷积

1D 卷积操作实际可看做 n-gram 检测器,即窗口尺寸为 k 的卷几层能识别输入中有代表性的 k-gram。因此,考虑多层卷积层级联,越往后的层能捕获到越大的有效 n-gram,最终能捕获到 gappy-ngram 信息。

需要注意的几点:
(1)划窗步长,前面图例中划窗步长即为1,通常可设置其他步长。
(2)扩展卷积结构,即在分层卷积结构中,每层的划窗步长都是 k-1。
(3)参数捆绑,即令所有卷积层的参数U、b保持一致,这实现了更多的参数共享,由于所有卷积层共享相同的参数不必事先设置卷积层数,从而允许使用任意数量的卷积层,这也使实现了利用 narrow 卷积将任意长度的语句序列变为单独的一个向量。
(4)skip-connection,在深层结构中,第 i 层输入不仅是第 i-1 层的输出,还可以将更前面的输出结合到第 i-1 的输出构成第 i 层输入。
(5)分层、扩展和池化结构在 CV 中应用很广,尤其是很多深层结构中,但深层结构在 NLP 中应用还处于起步阶段。

猜你喜欢

转载自blog.csdn.net/lipengcn/article/details/79491683
今日推荐