NLP实战高手课学习笔记(11):RNN与CNN在NLP中的应用

396 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第29天,点击查看活动详情

说明

本系列博客将记录自己学习的课程:NLP实战高手课,链接为:time.geekbang.org/course/intr… 本篇为21-23节的课程笔记,主要介绍NLP中使用的RNN和CNN模型。

马尔科夫过程和隐马尔科夫过程

在介绍RNN前,首先介绍马尔科夫过程和隐马尔科夫过程。

这里我们看一下维基百科上对于马尔科夫过程的介绍:

马尔可夫性质是概率论中的一个概念。当一个随机过程在给定现在状态及所有过去状态情况下,其未来状态的条件概率分布仅依赖于当前状态;换句话说,在给定现在状态时,它与过去状态(即该过程的历史路径)是条件独立的,那么此随机过程即具有马尔可夫性质。具有马尔可夫性质的过程通常称之为马尔可夫过程

image.png

马尔科夫过程中,当前状态下的动作与历史状态无关,而当中间的这种状态无法被观测时,即为隐马尔科夫过程。但在NLP中,这种马尔科夫性质一般是不成立的,即当前的状态通常与上下文都有着密切的联系。

RNN与LSTM

RNN又叫循环神经网络,其输入和输出的长度不固定,很适合语音、文本等时序序列数据。由于RNN都使用同一组参数进行计算,很容易导致梯度爆炸和梯度消失。在面对长序列时,RNN通常会“忘记”前面提到的词,为此研究者们提出了LSTM模型来改进RNN的这一缺点。

image.png

LSTM新增了三个门来控制信息流,它们分别是:

  • 输入门
  • 输出门
  • 遗忘门

其详细介绍可以参考我之前的博客NLP学习笔记(四):长短时记忆网络

CNN

CNN最早被应用于计算机视觉领域,后来在NLP中也大放光彩。CNN中两个基础的概念就是卷积和池化,我们先来了解一下。

卷积

卷积操作需要使用一个卷积核(或者叫Filter)对原始图像进行操作,把它想象成一个扫过矩阵的滑动窗口函数。下图展示了一个操作示例(动态图来源:pengfeinie.github.io/convolution… ):

image.png

池化

池化操作则是对图片分区的各个子区域进行平均、最大等操作。如下图所示,当采用2 * 2的Max pooling时,原4 * 4的图片会转换为2 * 2的输出结果。

image.png

CNN在NLP中的应用

了解了CNN对图像的两个基本操作后,我们来看一下其如何应用到NLP上。一个核心的问题是,我们的序列“图像”是如何呈现的。在上一节我们已经将一个单词表示为了One-hot embedding或者word embedding,所以可以认为图像的“长度”就是embedding的维度,比如300。而一个序列是由多个单词组成的,所以可以认为图像的“宽度”就是序列中单词的个数。

通过这种方式,我们将一个序列转换为了序列“图像”。后续,只要采取与CV中应用CNN的类似操作即可。下面有一个这样的应用示范(图片来源:juejin.cn/post/684490… ):

image.png

总结

本文简要介绍了RNN和CNN在NLP中的相关应用,希望对您有所帮助。

参考

  1. 一文读懂CNN如何用于NLP,juejin.cn/post/684490…
  2. convolutional neural network image recognition, pengfeinie.github.io/convolution…