文本分类论文总结

Classification

CNN

卷积神经网络相比于基于词袋模型的DNN有以下优点:

  1. 能捕获局部的位置信息
  2. 能够方便的将不定长的输入转换成定长输入接入到DNN网络中
  3. 相比于RNN模型计算复杂度低,在很多任务中取得不错的效果

text-cnn

1. 网络结构

2. 参数与超参数

  • sequence_length
    CNN输入输出都是固定的,对句子做定长处理,超过的截断,不足的补0.
  • num_classes
    类别数量
  • vocabulary_size
    语料库词典大小
  • filter_size_list
    多个不同size的filter

3. Embedding Layer

4. Convolution Layer

输入层通过卷积操作得到若干个Feature Map,卷积窗口的大小为 h×k ,其中 h 表示纵向词语的个数,而 k 表示word vector的维数。通过这样一个大型的卷积窗口,将得到若干个列数为1的Feature Map。

5. Max-Pooling Layer

接下来的池化层,文中用了一种称为Max-over-time Pooling的方法。这种方法就是简单地从之前一维的Feature Map中提出最大的值,文中解释最大值代表着最重要的信号。可以看出,这种Pooling方式可以解决可变长度的句子输入问题(因为不管Feature Map中有多少个值,只需要提取其中的最大值)。最终池化层的输出为各个Feature Map的最大值们,即一个一维的向量。

6. SoftMax分类Layer

池化层的一维向量的输出通过全连接的方式,连接一个Softmax层,Softmax层可根据任务的需要设置(通常反映着最终类别上的概率分布)。最终实现时,我们可以在倒数第二层的全连接部分上使用Dropout技术,即对全连接层上的权值参数给予L2正则化的限制。这样做的好处是防止隐藏层单元自适应(或者对称),从而减轻过拟合的程度。

7. 变种

  • CNN-rand
    设计好 embedding_size 这个 Hyperparameter 后, 对不同单词的向量作随机初始化, 后续BP的时候作调整.
  • static
    pre-trained词向量固定,训练过程不再调整
  • non-static
    pretrained vectors + fine-tuning
  • multiple channel
    static与non-static搭两个通道

实验

数据

结论

  1. CNN-static较与CNN-rand好,说明pre-training的word vector确实有较大的提升作用;
  2. CNN-non-static较于CNN-static大部分要好,说明适当的Fine tune也是有利的,是因为使得vectors更加贴近于具体的任务;
  3. CNN-multichannel较于CNN-single在小规模的数据集上有更好的表现,实际上CNN-multichannel体现了一种折中思想,即既不希望Fine tuned的vector距离原始值太远,但同时保留其一定的变化空间。

Effective Use of Word Order for Text Categorization with Convolutional Neural Networks

主要思路:
不做word embedding,直接输入one-hot

  1. seq-CNN
1545732578191.jpg
  1. bow-CNN
1545732675037.jpg
  1. Extension: parallel CNN
    首先将句子序列中每个词onhot表示,然后可以通过不同size的卷积池化层来对其进行特征抽取,得到结果之后再进行concat,然后再接全连接输出层进行输出。
1545041217664.jpg

DPCNN

Super Charactors

主要思想:把文字转化成图,然后用图片进行训练。

1545100615760.jpg

Dynamic Convolutional Neural Network

一、介绍

模型采用动态k-max pooling取出得分topk的特征值,能处理不同的句子,不依赖解析树。网络包含两种类型的层:一维的卷积层和动态k-max池化层(Dynamic k-max pooling)。

k-max pooling:

  • pooling的结果不是返回一个最大值,而是返回k组最大值,这些最大值是原输入的一个子序列;
  • pooling中的参数k可以是一个动态函数,具体的值依赖于网络的其他参数。

二、模型的特点

  1. 保留了句子中词序信息和词语之间的相对位置;
  2. 宽卷积的结果是传统卷积的一个扩展,某种意义上,也是n-gram的一个扩展,更加考虑句子边缘的信息;
  3. 模型不需要任何先验知识,并且模型考虑了句子中相隔较远的词语之间的语义信息。

三、模型结构及原理

1. 宽卷积

卷积层使用 宽卷积(Wide Convolution) 的方式。
与传统卷积操作相比,宽卷积输出Feature Map宽度更宽,因为卷积窗口并不需要覆盖所有的输入值。(感觉就是padding?)

右图就是宽卷积计算过程,当计算第一个节点s1时,可以假定s1节点前面有四个输入值为0的节点参与卷积(卷积窗口为5)。
2. k-max池化

k-max pooling选择序列p中的前k个最大值,这些最大值保留原来序列的词序。
k-max pooling的好处在于,既提取句子中的较重要信息(不止一个),同时保留了它们的次序信息。同时,由于应用在最后的卷积层上只需要提取出k个值,所以这种方法允许不同长度的输入。

3. 动态k-max池化

动态k-max池化中k是输入句子长度和网络深度两个参数的函数。
K l = max ( k t o p , L l L s ) K_{l}=\max \left( k_{top}, \left \lceil \frac {L-l}{L} s \right \rceil \right)
l l 表示当前卷积的层数, L L 是网络总共卷积层的层数; k t o p k_{top} 为最顶层卷积层pooling对应的k值,是一个固定值;s是输入句子的长度。
动态k-max池化的意义在于,从不同长度的句子中提取出相应数量的语义特征信息,以保证后续卷积层的统一性。

4. 非线性特征函数
5. 多个Feature Map
6. 折叠操作(Folding)

在卷积之后,pooling之前将相邻两行相加。该操作没有增加参数数量,但是提前(在最后的全连接层之前)考虑了特征矩阵中行与行之间的某种关联。

Fine-tuned Language Models for Text Classification

介绍

提出一种fine-tuned的语言模型(FitLaM)。
基于一个简单的RNN,没有其他额外修改。
主要贡献点:

  • 分析CV和NLP迁移学习的相似性,为NLP迁移学习提供理论依据;
  • 提出FitLaM,一种可以用来实现NLP各种任务的迁移学习方法;
  • 提出判别微调方法,保留以前的知识,避免微调过程中发生灾难性遗忘;
  • 引入了文本分类的"通过时间反向传播"(BPT3C),这是一种通过线性层将分类器丢失反向传播到任意序列大小的rnn输出的新方法;
  • 介绍微调预训练语言模型的关键技术;
  • 在5个代表性文本分类数据集上达到state-of-the-art,在主要数据集上错误率下降18-24%;

Fine-tuned Language Models(FitLaM)

统计语言模型目的是通过给定之前词语,预测下个词的概率。作者选择使用AWD-LSTM模型。
FitLaM主要包括三步:

  1. 通用领域语言模型预训练;
  2. 目标任务语言模型微调;
  3. 目标任务分类器微调;

通用领域语言模型预训练

利用Wikitext-103进行模型预训练。

目标任务语言模型微调

给定任务数据和之前预训练数据分布有偏差,需要微调。

Gradual unfreezing

从最后一层逐步解冻,微调所有解冻层。与之前做法区别:解冻层是一个集合,而不是每次只训练单独一层。

Fine-tuning with cosine annealing

只训练一个epoch,每个batch降低一次学习率。
η t = η m i n + 1 2 ( η m a x η m i n ) ( 1 + c o s ( t T ) ) \eta_t = \eta_{min}+\frac12(\eta_{max}-\eta_{min})(1+cos(\frac{t}T)) η m i n = 0 \eta_{min}=0 η m a x = 0.002 \eta_{max}=0.002

Warm-up reverse annealing

Target task classifier fine-tuning

针对目标任务分类器微调,在预训练模型基础上增加一或多个额外的线性块。每个块使用batch normalization和dropout,内部层使用ReLU,输出使用softmax。

Concat pooling

H = h 1 , . . . , h T H={h_1,...,h_T} h c = [ h T , m a x p o o l ( H ) , m e a n p o o l ( H ) ] h_c = [h_T,maxpool(H), meanpool(H)]

Discriminative fine-tuning

太激进的微调可能导致灾难性的遗忘,而太谨慎的微调又会使收敛太缓慢。
之前SGD更新:
θ t = θ t 1 η θ J ( θ ) \theta_t = \theta_{t-1}-\eta\cdot\nabla_\theta J(\theta)
作者希望不同层学习率不同, { η 1 , . . . , η L } \{\eta^1,...,\eta^L\} 代表不同层学习率
θ t l = θ t 1 l η l θ t J ( θ ) \theta^l_t = \theta^l_{t-1}-\eta^l\cdot\nabla_{\theta_t}J(\theta)

BPTT for Text Classification(BPT3C)

将文本分为大小为b的固定长度batches,在每个batch开始之前,将模型用上个batch最后状态初始化。

Bidrectional language model

训练一个双向的语言模型,使用BPT3C对正向和反向分别进行微调,对他们的预测结果取平均。

实验

分了三个分类任务:情感分析,问题分类,主题分类

fastText(Bag of Tricks for Efficient Text Classification)

介绍

fastText提供简单而高效的文本分类和表征学习,性能比肩深度学习而且速度更快。fastText结合自然语言处理和机器学习中最成功的理念,比如词袋模型、n-gram,并通过隐藏表征在类别间共享信息。另外,采用hierarchical softmax加速运算过程。

Model architecture

模型输入一段文本或一句话,输出该文本属于不同类别的概率

损失函数:

1 N n = 1 N y n l o g ( f ( B A x n ) ) -\frac1N\sum_{n=1}^Ny_nlog(f(BAx_n))

Hierarchical softmax

分类类别很多时,训练线性分类器的计算量比较大,计算复杂度为$O(kh)$,k是类别数,h是文本表示的维度。为了提高运行速度,使用层次softmax,在训练期间,计算复杂度降到$O(hlog_2(k))$。同时,在测试时查找类别速度也得到提升。

N-gram features

使用hashing trick捕捉词序特征。

总结

fastText的学习速度比较快,效果还不错。fastText适用与分类类别非常大而且数据集足够多的情况,当分类类别比较小或者数据集比较少的话,很容易过拟合。可以完成无监督的词向量的学习,可以学习出来词向量,来保持住词和词之间,相关词之间是一个距离比较近的情况;
也可以用于有监督学习的文本分类任务

ULMFiT

//TODO

Att-BLSTM

Model

  1. Input layer: input sentence to this model;
  2. Embedding layer: map each word into a low dimension vector;
  3. LSTM layer: utilize BLSTM to get high level features from step2;
  4. Attention layer: produce a weight vector, and merge word-level features from each time step into a sentence-level feature vector, by multiplying the weight vector;
  5. Output layer: the sentence-level feature vector is finally used for relation classification.
kkmPrn.jpg

Bidirectional Network

kkny01.jpg

LSTM:
i t = σ ( W x i x t + W h i h t 1 + W c i c t 1 + b i ) i_t = \sigma(W_{xi}x_t+W_{hi}h_{t-1}+W_{ci}c_{t-1}+b_i) f t = σ ( W x f x t + W h f h t 1 + W c f c t 1 + b i ) f_t = \sigma(W_{xf}x_t+W_{hf}h_{t-1}+W_{cf}c_{t-1}+b_i) g t = t a n h ( W x c x t + W h c h t 1 + W c c c t 1 + b c ) g_t = tanh(W_{xc}x_t+W_{hc}h_{t-1}+W_{cc}c_{t-1}+b_c) c t = i t g t + f t c t 1 c_t = i_tg_t+f_tc_{t-1} o t = σ ( W x o x t + W h o h t 1 + W c o c t + b o ) o_t = \sigma(W_{xo}x_t+W_{ho}h_{t-1}+W_{co}c_t+b_o) h t = o t t a n h ( c t ) h_t = o_ttanh(c_t)
BiLSTM:
h i = [ h i h i ] h_i = [\overrightarrow{h_i}\oplus\overleftarrow{h_i}]

Attention

H = [ h 1 , h 2 , . . . , h T ] H=[h_1,h_2,...,h_T] M = t a n h ( H ) M = tanh(H) α = s o f t m a x ( w T M ) \alpha = softmax(w^TM) r = H α T r = H\alpha^T h = t a n h ( r ) h^*=tanh(r)

Classifying

p ^ ( y S ) = s o f t m a x ( W ( S ) h + b ( S ) ) \hat{p}(y|S) = softmax(W^{(S)}h^* + b^{(S)}) y ^ = a r g max y p ^ ( y S ) \hat{y} = arg\max_{y}\hat{p}(y|S) J ( θ ) = 1 m i = 1 m t i l o g ( y i ) + λ θ F 2 J(\theta) = -\frac1m\sum_{i=1}^mt_ilog(y_i)+\lambda\lVert\theta\rVert_F^2

猜你喜欢

转载自blog.csdn.net/leo_95/article/details/87707165