Week1.3 Simple deep learning for text classification

Neural networks for words(and characters)

在本节中我们将学习如何将神经网络用于文本分类,还将学习卷积神经网络相关的原理.

回顾–Bag of words way

在前面课程中,我们学习了如何将一段文本当作一系列words或是tokens来处理。并且介绍了BOW的方法来处理这些tokens。
首先,我们有每个单词对应的vector,这就是这些tokens的对应特征向量。
这里的特征向量,我们使用的是one-hot representation表示。
这是一种直观的表示方法。这个向量的维度是整个词表的大小,其中的值只有一个为1,其余值都为0.
例如:

very = [0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0...........]
good = [0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,.........]

在BOW方法中,我们可以将一句话中的这些单词对应的特征向量相加,得到一个稀疏的矩阵,这就是这句话的一个对应的矢量化结果。再搭配上前面学到的Hash表分配技术。就可以很好地描述出这句话的某些特征。

Neural way

在神经网络方法中,我们更喜欢使用密集型的向量来表示每一个token,这些向量中可能包含300个甚至更多的实数,来作为这一个token的特征向量。

这里的特征向量,我们使用了word embedding的方法,对 one-hot方法表示的vector进行了一些改进:
1.将vector的每个元素由整型改为浮点型,变为实数范围的表示;
2.将原来较为稀疏的、维度较大的向量进行压缩,使其“嵌入”到更小的维度。
这就是word embedding的含义。

然后我们可以对这些向量进行训练。将在后两周学习有关Word2vec的更多信息。
需要知道的是,Word2vec embedding有一个非常好的属性:
有着相近意思的单词往往趋向于含有共线的向量,这会使这些词指向大致相同的方向,并且从空间上看,它们可能分布于一块邻近的区域。

创建好这些向量后,我们可以进一步地对这个文本进行分析,以期望获得整个文本的特征描述。接下来有两种方法:
1.如同Bow中使用的方法,我们将这些word2vec进行简单的相加,就可以得到一个可以运行的很好的文本分类器了。
2.引入神经网络的方法进行分析,见下小节。

A better way: 1D convolutions

现在,我们有了每个特定单词(word)的word embedding向量表示,但是我们期望得到更多pairs的特征向量。比如2-gram的向量,要如何获得呢?

事实上,我们可以将每个word对应的向量拿过来写在一起,构成一个矩阵。这里我们设每个向量的长度为m,一共有n个向量,那么形成的是一个 n * m 的矩阵。但我们的目的不是这个矩阵,如果我们想要提取2-gram的关键信息,我们可以想象一个滑动窗口,这个滑动窗口是 2 * m大小的,它从n = 1开始滑动,一直向下。对于每个窗口中的数据,我们可以引入相同大小(2 * m)的卷积分类器(convolutional filter)进行分析。对每两个相邻的word,我们就有了关于这两个word形成的2-grams的一个向量。我们可以引入不同的卷积核进行分析,用于获得更好的结果。

这样的卷积为什么比BOW方法好呢?正是因为上面黑色字体中提到的word2vec embedding的优秀属性。意思相近的words有着相似的余弦距离(cosine distance),而余弦距离和向量间的点积(内积)相似。而它们的结果正是我们所使用的卷积方法所产生的结果。

还有,当我们使用卷积方法时,我们可以发现一段text更加深层的含义。比如我们有"cat sitting"和“dog resting",我们通过卷积分类器,可以发现这两段text都表现了同一大类意思:“animal sitting”。通过这种方法,我们就不需要像之前那样构造许多的非常长而稀疏的向量来表示每个2-gram了,我们只需要观察每两个word embedding的卷积结果,就能够发掘出其中更加深刻的含义。

同样的,这个卷积方法可以很好得扩展到3-grams,4-grams…n-grams的情况。同时我们也需要更多的卷积分类器以获得更好的结果。这个方法被称作一维卷积(1D convolution)的原因是,我们做卷积的窗口只在一个维度方向上滑动,比如上下滑动。在图像处理中,我们可能在两个方向上来移动窗口。

Final Models

这里MOOC中没有对最终的卷积神经网络模型进行非常好的解释。这里引用 https://blog.csdn.net/wangyangzhizhou/article/details/79675278
这篇文章对Yoon Kim的paper Convolutional Neural Networks for Sentence Classification
(见 https://arxiv.org/abs/1408.5882 )中的一些构造进行了解释(挖个坑之后研究)。

Yoon Kim给出的模型

输入层

图中最左边的部分即为输入层,总的来说输入层就是句子对应的矩阵。一般不会使用 ont-hot 向量来表示单词,而是使用 k 维的分布式词向量。那么对于一个长度为 n 的句子,则构成一个 n × k 的矩阵。

所以,可以设 xi 为句子的第 i 个单词,它为 k 维向量。那么一个句子为
x 1 : n = x 1 ⨁ x 2 ⨁ . . . ⨁ x n x 1 : n = x 1 ⨁ x 2 ⨁ . . . ⨁ x n x1:n=x1⨁x2⨁...⨁xnx1:n=x1⨁x2⨁...⨁xn x1:n=x1x2...xnx1:n=x1x2...xn其中 ⨁ ⨁ 表示串联的意思。

另外,根据对词向量的作用可以分为两种模式:静态和非静态。静态模式的意思就是我直接使用第三方发布的词向量或者自己训练的词向量来初始化矩阵,并且在每次训练的过程中不对反向误差传播产生作用,不改变词向量,整个训练过程词向量都是固定不变的。而非静态模式则不同,同样是使用词向量来初始化矩阵后,在此后的每次训练过程中,根据反向误差传播会对词向量进行微调,整个训练过程词向量都会更新。

卷积层

图中第二部分为卷积层,卷积层的作用就是用于提取句子的特征。主要是通过一个 h × k 的卷积核 w 在输入层从上到下进行滑动进行卷积操作,通过该卷积操作得到一个 feature map。feature map 的列为1,行为 (n-h+1)。即 c = ( c 1 , c 2 , . . . c n − h + 1 ) c=(c1,c2,...cn−h+1) c=(c1,c2,...cnh+1)其中 c i = f ( w ⋅ x i : i + h − 1 + b ) ci=f(w⋅xi:i+h−1+b) ci=f(wxi:i+h1+b)

上图中输入层上红色框就是卷积操作的卷积核,可以看到它是 2 × k 维的,运算后变为 feature map 的一个元素。除此之外,还可以将 h 定为3,此时卷积核变为 3 × k 维,如图中黄色框框部分。相同维度的可以有若干个参数不同的卷积核,所以最终在每种维度下都可以得到若干个 feature map。

卷积操作的意义是什么?可以看到它其实是根据 h 大小不同提取不同长度相邻单词的特征,这个其实可以跟 n-gram 语言模型对应起来。

池化层

图中第三部分为池化层,池化层的作用是对特征做进一步提取,将最重要的特征提取出来。这里使用的是 max-over-time pooling 操作,即取出 feature map 中的最大值作为最重要的特征,即cˆ=max{c}c^=max{c}。所以最终对于每个 feature map 池化后都得到一个一维向量,取最大值作为特征也解决了不同句子长短的问题,尽管短的句子会用 0 进行填充,但通过取最大值消除了该问题。

前面的通过卷积层的多个不同卷积核操作得到若干 feature map,而再经过池化层处理后得到若干个一维向量。

全连接层

图中最后部分为全连接层,全连接层通过使用 softmax 分类器得到各个分类的概率。前面的池化层的输出以全连接的形式连到 softmax 层,softmax 层定义好分类。

做好这些工作后,我们就可以在这个卷积神经网络上添加我们想要训练的工作,它有着比基于BOW的传统ML方法更好的结果。

Summary

1.我们可以使用word2vec向量来将text中的每个token进行预先的训练;
2.使用1D convolutions可以获得更好的更复杂的特征
3.可以将上述的模型运用于字符级别(characters),也将获得很好的结果,甚至在某些数据集上,在字符级别上处理得到的结果甚至比在word级别上得到的结果要好。
4.CNN方法在大数据集上表现得比传统方法好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值