Introduction
一方面目前文本分类技术主要考虑词或词的组合;另一方面,研究表明,卷积神经网络在从原始信号中抽取信息的方面,非常有用。在这篇论文中,作者将字符级的文本当做原始信号,并且使用一维的卷积神经网络来处理它。研究表明,单词嵌入表示可以直接用于卷积神经网络,而无需考虑语言的语法或语义结构。
这篇论文,仅仅使用字符,运用在卷积神经网络上。作者发现,当训练大规模数据集的时候,深度卷积神经网络并不需要单词层面的意义(包括语言的语法和语义)。这是非常激动人心的工程简化,因为不管什么语言,它都是由字符组成的,因此这对于构建跨语言的系统至关重要。还有一个好处,对于异常的字符组成(比如拼写错误)和表情符,该模型依然能够应付。
Character-level Convolutional Networks
下面介绍这个用于文本分类的字符级ConNets的设计,该设计是模块化的,并且采用反向传播进行优化。
假设我们有一个离散的输入函数g(x),它的取值范围是[1, l](小写L)中的实数。有一个离散的核函数f(x),它的取值范围是[1, k]中的实数。f(x)和g(x)以步长为d的卷积h(y)
其中,c = k - d + 1 是一个偏移常数。就像计算机视觉中的传统卷积神经网络,模型通过一系列的核函数来参数化,在输入为gi(x)和输出为hj(y)的时候,这些核函数我们表示为fij(x),(i = 1, 2,......,m,以及j = 1, 2,...,n),我们也将其称为权重。我们将每个gi称为输入特征,每个hj称为输出特征,m叫输入特征大小,n叫输出特征大小。输出hj(y)是通过gi(x)和fij(x)之间的卷积核来得到的。 帮助我们训练较深模型的一个关键模块是有时做的最大池化操作。若有一个离散的输入函数g(x),它的取值范围是[1, l](小写L)中的实数。则它的最大池化操作函数h(y)
可定义为:
注意论文中的这种写法可能容易导致和上面的混淆,但只要理解卷积神经网络模型,还是很清楚的。如果有点晕,不防去看看卷积神经网络的模型。
同样,c = k - d + 1 是一个偏移常数。这个特有的池化模型能够使我们训练深度超过6层的ConNets。
我们的非线性处理使用的是h(x) = max{0, x},这就比较像ReLUs了。算法使用的是随机梯度下降法,最小批量大小是128,使用0.9的动量以及0.01的初始步长,步长每3个时段减半,持续10次。每个时段都从各类中随机采取相同数量的样本。
实验
实验使用的是Torch 7这个框架。
字符的量化方法
作者把文本当成字符序列,每个字符用一个m维长度的向量表示,所以首先为我们要训练的语言建立一个大小为m的字母表,字母表由l0个字符组成,然后使用“1- of - m”或“one - hot”编码每个字符。超过出l0的任何字都被忽略掉,以及,任何不在我们定义的字母表中的字符(比如空白字符)都用零向量表示。字符量化顺序是向后的,因此最新读取的字符始终位于输出的开头附近,这使得全连接层可以轻松地将权重与最新读数相关联。
上面提到的m就是下面提到的1024,l0就是下面的70.
在我们所有的模型中使用的字母表总共70个字符,包含26个英文字母,10个数字,33个其他的字符等,如下所示:
模型设计
我们设计了一大一小两个卷积网络,他们的深度都是9层,包括6个卷积层和3个全连接层,如下图所示:
由于我们的量化方式,输入特征是70维的,即有70个特征,并且每个特征的长度是1024(对于不同的问题可能不一样)。看来,似乎1024个字符已经能够捕获大部分我们感兴趣的文本了。另外,我们在3个全连接层之间插入两个dropout模块以实现正则化(regularize)。(dropout一般是用来防止过拟合的)他们dropout的概率是0.5。
下表1列出了卷积层的所有配置,表2列出了全连接层的配置。
我们使用高斯分布初始化权重,初始化大模型和小模型的平均值和标准差分别是(0, 0.02)和(0, 0.05)。
使用词典进行数据扩充
研究表明,合适的数据扩充可以降低泛化误差。但文本的数据扩充不能像图像和语言进行数据转换,因为文本的序列顺序蕴含着丰富的语法和语义,因此最好的数据扩充方式应该是使用人类的重述文本类,然儿,由于数据集的庞大,这会导致昂贵的代价切不现实。综上,我们一般使用词汇和词组的近义词进行替代扩充。
当前研究中,我们使用一份英语词典进行实验数据扩充。
论文实现代码:
https://github.com/zhangxiangxiao/Crepe (Torch)
https://github.com/mhjabreel/CharCNN (Tensorflow)
https://github.com/srviest/char-cnn-text-classification-pytorch (PyTorch)