背景

Char-CNN算法来源于发表在NIPS2015的论文:Character-level
Convolutional Networks for Text Classification(基于CNN的字符级文本分类)中。

深度学习处理自然语言处理问题,有的基于短语,有的基于单词。该篇文章受启发于CV领域的像素级别,因此采用从字符角度出发重新训练神经网络。神经网络就不需要提前知道关于单词的知识(lookupTable or word2vec),并且这些单词的知识往往是高维的,很难应用于卷积神经网络中。除此之外,卷积神经网络也不再需要提前知道语法和语义的知识。因此,论文作者称这种基于的字符学习为从零开始学习(learn from scratch)。值得一提的是,这种from scratch网络的学习一般都需要比较大的数据集,否则根本拟合不了模型。

网络结构

在此之前很多基于深度学习的模型都是使用高层面的单位对文本或者语言进行建模,比如单词(统计信息或者n-grams、word2vec等),短语(phrases),句子(sentence)层面,或者对语义和语法结构进行分析,但是本文则提出了更细粒度的——字符层面进行文本分类。这样做的好处是不需要使用预训练好的词向量和语法句法结构等信息。除此之外,字符级还有一个好处就是可以很容易的推广到所有语言。首先看一下论文中的模型结构图:

Char-CNN理解

首先必须清楚的一点是该模型的输入是字符层面的one-hot表示的向量,那么首先需要有字符的编码。

  1. 字符编码
    因为模型的输入是字符的one-hot表示向量,所以先得有字符编码,需要做的就是构建字母表,本文中使用的字母表如下,共有70个字符,外加两个"": 0, “”: 1,所以共72个。文中还提到要反向处理字符编码,即反向读取文本,这样做的好处是最新读入的字符总是在输出开始的地方。:

Char-CNN理解

对于中文,可以按照单个字出现的频率,提取出字典。

  1. 卷积-池化-全连接
    文中提出了两种规模的神经网络–Large和Small。都由6个卷积层和3个全连接层共9层神经网络组成。这里使用的是1-D卷积神经网络。除此之外,在三个全连接层之间加入两个dropout层以实现模型正则化。其参数配置如下图所示:

Char-CNN理解

其中large feature为卷积核个数,kernal为卷积核大小,pool为池化尺寸。

Char-CNN理解

其中output units large为全连接层维度。

下面为对网络的整体理解:

Char-CNN理解

  1. 用同义词做数据增强
    对于深度学习模型,采用适当的数据增强技术可以提高模型的泛化能力,比如说图像处理中对图片进行缩放、平移、旋转等操作不会改变图片本身含义;语音识别中对语音的声调、语速、噪声也不会改变其结果。但是在文本处理中,却不能随意调换字符顺序,因为顺序就代表了语义。对于NLP,最理想的数据增强方法是使用人类复述句子(human rephrases of sentences),但是这比较不现实并且对于大规模语料来说代价昂贵。 一个更自然的选择是使用词语或短语的同义词或同义短语进行替换,从而达到数据增强的目的。

模型结论

l char-cnn是基于更小粒度的文本分类模型,由于可以不考虑单词的内在含义、语义和语法的信息,所以可以跨语言的使用;

l 根据论文实验结果,char-cnn更适用于不是那么标准的文本,像用户生成数据(user-generated
data)。例如用户评论等,在正规文本如新闻等上面竞争力不大;

l 可以学习表情符号和拼写错误;

l 字符表的构建,是否考虑大小写?根据文中的实验结果,数据量小时,区分大小写效果好些;数据量达到百万级时,不区分时效果要好些;

l 该模型在数据量小时没有优势,但是在数据量很大的时候就表现出了它的竞争力;

l 数据集大小为数十万的,n-gram TFIDF这样的传统方法仍然是的有效方法,只有在数据集达到数百万的规模之后,采用字符级别的ConvNets更有优势。

相关文章:

  • 2021-05-05
  • 2021-12-28
  • 2022-12-23
  • 2022-01-23
  • 2021-12-20
猜你喜欢
  • 2022-01-05
  • 2022-01-03
  • 2021-08-03
  • 2021-06-07
  • 2021-12-16
  • 2022-02-09
  • 2021-06-03
相关资源
相似解决方案