基于神经网络的文本分类算法综述(连续更新)
本文介绍了一个词向量模型,它不是文本分类模型,但可以说是fasttext的基础。所以也简单提一下。
笔者认为cbow、skipgram和大部分词向量模型都没有考虑一个词的多态性,只是简单地把一个词的多种形式看作独立的词。比如like的不同形式是like,like,like,like,like,like,这些词的意思其实是一样的,但是cbow/skipgram模型认为这些词是独立的,没有考虑它们的形态多样性。
为此,作者提出了一种能有效利用单词字符级信息的n元词向量模型,并以skipgram模式实现了该模型。例如,单词where,它的n-gram表示为
在损失方面,本文采用了负抽样+二元逻辑回归的策略。也就是说,每个目标单词被预测为肯定和否定之一。
本文提出了一种基于神经网络的文本分类模型,该模型基于cbow,与cbow非常相似。
和CBOW一样,fastText模型只有三层:输入层、隐藏层和输出层(层次化Softmax)。输入是用向量表示的若干单词,输出是特定的目标。隐含层是多个词向量的叠加和平均。不同的是,CBOW的输入是目标单词的上下文,fastText的输入是多个单词及其n-gram特征的嵌入表示,用于表示单个文档。CBOW的输入词采用onehot编码,fastText的输入特点是嵌入。CBOW的输出是目标词汇,fastText的输出是文档对应的类别标记。输出层的实现也使用了层次化的softmax。当然,如果自己实现的话,对于类别数量较少的任务,可以直接使用softmax。
最后贴一个简化版的Keras模型fasttext。
在词向量表示的基础上,提出利用卷积神经网络对文本进行分类。算法如上图所示:
在本文中,作者尝试了多种不同的词向量模式:
在上一篇文章中,CNN网络的输入一般是预先训练好的词向量,但在本文中,作者提出了一种直接将嵌入训练与分类任务相结合,能够有效提取/保留词序信息的模型方法,即有效训练n-gram,也可以理解为CNN嵌入的一种方法。
另外,另一个问题是输入序列长度的变化(在上一篇文章textCNN中通过填充解决?),本文作者提出用动态可变池层来解决这个问题,使卷积层的输出大小相同。实际上,变量池类似于图像识别中的空间金字塔池。
这篇文章有把fastText和TextCNN结合起来的感觉,把n-gram嵌入和分类任务结合起来进行训练,通过CNN嵌入。
通过区域嵌入的文本分类》
在本文中,作者提出了一种tv嵌入(即两视图嵌入),也属于区域嵌入(也可以理解为ngram嵌入)。这种方法类似于上面的bow-CNN表示法。用bow(单词包)表示一个区域内的单词和短语,然后预测其前后的区域(左右邻域内的单词或短语),即输入区域为view1,目标区域为view2。Tv-embedding单独训练,使用时与CNN中的embedding结合(形成多个频道?)。笔者认为word2vec方法预训练的嵌入向量具有普适性,而通过训练特定任务的数据集得到的tv-embedding具有一些与任务相关的信息,更有利于提高我们的模型效果。
这篇文章我不是很懂,也可能是我英语太差。作者的文章里没有一个一目了然的网络图,比如textCNN的图,一目了然的很清楚。看一看就知道怎么做了。
提出一种基于LSTM的文本分类模型,该模型使用监督学习和半监督预训练。文章作者同上,所以使用的很多技术可以说同上。所以简单说说这篇文章的一些想法。
笔者认为,现有的直接使用LSTM作为文本分类模型,直接使用LSTM的最后一个输出作为后续全连接分类器的方法面临两个问题:(1)这种方法一般集成了单词嵌入(即onehot的输入经过一个嵌入层再进入LSTM),但是嵌入训练不稳定,难以训练;(2)直接用LSTM的最后一次输出来表示整个文档是不准确的。一般来说,LSTM输入背后的单词将在最终输出中占据很大的权重,但这对于文章表示并不总是正确的。因此,作者改进了这两点:
其实这篇论文可以看做是作者前面的电视嵌入半监督训练和RCNN的融合,有一种操作猛如虎,头一眼就0-5的感觉(因为作者的实验结果和一般的CNN相比其实并不多)。
本文作者也是前两篇使用CNN进行文本分类的文章的作者。因此,本文将前两篇文章中提出的一些方法结合起来,使用深度卷积神经网络。具体细节包括:
关于DPCNN更详细的细节,请看来自DPCNN的深度词级文本分类模型。
提出一种基于CNN+注意力的文本分类模型。笔者认为现有的基于CNN的文本分类模型大多使用固定大小的卷积核,因此学习到的表示也是固定的N元文法表示,而这个N与CNN滤波器的大小有关。而在句子的语义表征中,不同句子中起重要作用的ngram词往往是不同的,也就是变化的。因此,模型自适应地为每个句子选择最佳n-gram以提高模型的语义表示能力是非常重要的。基于这一思想,本文提出了一种选择不同n元文法表示的自适应模型。
本文的模型在主题结构中引用CV中的DenseNet,通过DenseNet中的稠密连接提取丰富的n元文法特征表示。比如我们不仅可以学习f(x1,x2,x3),还可以学习f(x1(x2,x3)),这是一个多层次更丰富的特征。网络的结构主要包括三个部分:DenseCNN主网络、注意模块和最后的全连接层分类网络。以下是对这三个部分的简要描述:
本文采用密集连接+关注度来自动获取对文本语义最重要的n元文法特征,效果非常好。不过缺点是这个网络比较适合短文本。在本文中,输入文本是填充的,对于不同的数据集,最大长度为50,100,但对于长文本,这显然是不够的。因此,对于较长的文本,韩最好借用来不限制输入长度。
提出了一种结合递归神经网络(RNN)和卷积神经网络的文本分类方法。其结构如上图所示,网络可分为三部分:
虽然它是RNN和CNN的组合,但它实际上只在CNN中使用了pooling,这有点噱头。还提到了RCNN比CNN好的原因,即RCNN为什么能比CNN更好地捕捉上下文信息:CNN使用固定大小的窗口(即内核大小)来提取上下文信息,它实际上是一个n-gram。因此,CNN的性能受窗口大小的影响很大。如果太小,会丢失一些远距离信息。过大的话会导致稀疏,增加计算量。
在很多自然语言处理任务中,一个非常突出的问题就是训练数据的缺乏和标注的困难。为此,本文提出了一种多任务RNN模型框架,利用多个不同的任务数据集对同一模型的参数进行训练,并实现了数据集扩展的功能。
本文作者提出了三种模型,如上图所示:
三种模式的训练方法是相同的:
本文提出了一个层次化的LSTM+注意力模型。作者认为,虽然一篇文章由几个句子组成,但其中的一些句子可能真的起着关键作用,所以在每个句子中应用注意机制,使对文章语义贡献更大的句子占据更大的权重。同样,组成一个句子的词也有很多,但可能只有少数几个起重要作用,所以利用注意机制让重要的词发挥更大的作用是本文的核心思想。整个网络可以分为三层,两个LSTM层分别用于单词编码和句子编码,最上层是全连通的分类层。如果加上两层关注,可以把网络想象成五层。先简单说一下五层网络的结构:
总的来说,这篇文章看起来很有趣,符合人们看文章的习惯。我们写文章的时候也有中心词和中心句。但这种层级结构是否会导致训练速度慢或者训练效果差,不得而知。最后,论文还提出先将文章按长度排序,进入一个长度相近的批次,训练速度加快了3倍。
提出了一种基于图形神经网络的文本分类方法。这种方法的主要思想是将所有的文章及其词汇放入一个图网络中。图网络中的节点分为两种:文字节点和文章节点。其中,连接单词节点和文章节点的边的权重用TF-IDF表示,而单词之间的边的权重用点互信息(PMI)表示。点互信息非常类似于传统语言模型中条件概率的计算方法。而PMI采用滑动窗口法,条件概率直接统计在所有语料库中,可以认为是一个大窗口,然后就和PMI一样了。
a表示图网络的邻接矩阵,如下:
GCN还可以包含多个隐藏层,每层的计算方法如下:
其中a '是归一化对称邻接矩阵,w0 ∈ r (m× k)是权重矩阵,ρ是激活函数,例如ReLU ρ(x) = max(0,x)。如上所述,可以通过叠加多个GCN层来合并高阶邻域信息:
其中j代表层数。
损失函数被定义为所有标记文档的交叉熵误差:
文本GCN运行良好有两个原因:
但它也有一些缺点:
总的来说,文章的思路还是挺有意思的,效果也还不错。当你第一次见到GCN时,可能还是有点难以理解。你可以参考以下资料进一步研究:
基于图卷积网络的文本分类算法
如何理解图不由自主网(GCN)?