文本分类:2、经典Deep Learning方法

使用Deep Learning 自动从文本中提取特征,实现端到端的训练,效果也较好。常用的模型有 Fasttext、TextCNN、DPCNN、TextRNN、TextRCNN 、HAN、Transformer 等。
腾讯 Pytorch汇总版代码 NeuralNLP-NeuralClassifierTF版代码

1、Fasttext : 词向量计算 & 文本分类 fasttext 源码
核心思想:将整篇文档的词及n-gram向量叠加平均得到文档向量,然后使用文档向量做softmax多分类。
技巧:字符级n-gram特征、分层softmax分类 ----> 速度很快
使用方法:run.sh

# 输入数据格式(每行):天筑 豪生 大酒店	__label__住宿-酒店

#!/usr/bin/bash
# 运行&测试脚本,输入文件夹
file_dir=$1
./fasttext supervised -input ${file_dir}/data/train_all.txt -output ${file_dir}/NLU_model_info -epoch 10 \
-wordNgrams 2 -dim 100 -loss softmax -thread 7 -minCount 1 -lr 0.1 -verbose 2 -pretrainedVectors fasttext_model.vec

#./fasttext test ${file_dir}/NLU_model_info.bin ${file_dir}/data/test1.txt > ${file_dir}/out_test_res.txt

./fasttext predict-prob ${file_dir}/NLU_model_info.bin ${file_dir}/data/test1.txt > ${file_dir}/out_test_res.txt

在这里插入图片描述

与word2vec的区别
    word2vec (CBOW) 把语料库中的每个单词当成原子的,为每个单词生成一个向量----忽略了单词内部的形态。(输入是目标单词的上下文并进行one-hot编码)
    fasttext使用字符级别n-grams表示一个单词----低频词的词向量更好(共享n-gram特征),OOV词仍可构建词向量(叠加字符级n-gram向量)
    输入层:CBOW的输入是目标单词的上下文并进行one-hot编码,fastText的输入是多个单词embedding向量,并将单词的字符级别的n-gram向量作为额外的特征;
    从输入层到隐藏层,CBOW会将上下文单词向量叠加起来并经过一次矩阵乘法(线性变化)并应用激活函数,而fastText省略了这一过程,直接将embedding过的向量特征求和取平均;
    输出层,一般的CBOW模型会采用Softmax作为输出,而fastText则采用了Hierarchical Softmax,大大降低了模型训练时间。CBOW的输出是目标词汇,fastText的输出是文档对应的类标。

2、TextCNN和fasttext比较示例代码gitHub代码
输入每个词的词向量,CNN & maxpooling 提取与类别相关的“关键词”,但是忽略了句子结构信息。
    下图中第一层输入为7*5的词向量矩阵,其中词向量维度为5,句子长度为7,然后第二层使用了3组宽度分别为2、3、4的卷积核(长度为词向量维度5),图中每种宽度的卷积核使用了2个。
    其中每个卷积核在整个句子长度上滑动(每次滑1步),得到n个激活值,图中卷积核滑动的过程中没有使用padding,因此宽度为4的卷积核在长度为7的句子上滑动得到4个特征值(卷积:按位相乘再求和)。然后出场的就是卷积的好基友全局池化了,每一个卷积核输出的特征值列向量通过在整个句子长度上取最大值,得到了6个特征值组成的feature map来供后级分类器作为分类的依据。
在这里插入图片描述
    TextCNN在做什么:卷积过后直接就是全局max pooling,那么它只能是在卷积的过程中计算与某些关键词的相似度,然后通过max pooling层来得出模型关注那些关键词是否在整个输入文本中出现,以及最相似的关键词与卷积核的相似度最大有多大。
    TextCNN的问题:全局的max pooling丢失了结构信息,因此很难去发现文本中的转折关系等复杂模式。可以尝试k-max pooling做一些优化,k-max pooling针对每个卷积核保留前k个最大值,并且保留按照文本中的位置顺序来排列这k个最大值。

3、DPCNN腾讯发表DPCNN加强版 VDCNN
类似于TextCNN,网络加深----提取更高层次的特征、相邻位置maxpooling----每次丢失的结构信息更少。 TextCNN 不能通过卷积获得文本的长距离依赖关系,而DPCNN通过不断加深网络,可以抽取长距离的文本依赖关系。

4、TextRNN汇总文章TRNN分类示例
CNN最大的问题是固定filter_size视野(特征表达),无法建模更长的序列信息(LSTM更适合)。 LSTM的输出直接接 全连接FC + softmax层输出。但是,一个时间步的输出依赖前一个输出,无法并行、速度慢。
5、TextRNN + Attention:
RNN无法记住太长久的东西,越靠后的字词对最终输出的影响越大。但是这和人类阅读文本的习惯是不一样的,一句话中对文本意义影响最大一必定是句子中间的某几个重点词汇。
假设RNN每个时刻的输出为 [ h 1 , h 2 , . . . , h T ] [h_1,h_2,...,h_T] [h1,h2,...,hT] ,在TextRNN中最后时刻的输出会用作softmax的输入,既 h = f ( w H T + b ) h=f(wH_T+b) h=f(wHT+b)。Attention层其实就是普通的一层,它接收 h t h_t ht ​,执行 u t = f ( w a h t + b ) u_t=f(w_ah_t+b) ut=f(waht+b)得到一个相应score,并经过归一化 α t = e x p ( u t ) / ∑ k = 1 T e x p ( u k ) \alpha_t=exp(u_t)/\sum_{k=1}^{T}exp(u_k) αt=exp(ut)/k=1Texp(uk)代表当前词的重要性。Attention向量是每个时刻输出的加权平均,既 c = ∑ α t h t c=\sum \alpha_t h_t c=αtht。最终输出为 l o g i t = s o f t m a x ( f ( w [ h ; c ] + b ) ) logit=softmax(f(w[h;c]+b)) logit=softmax(f(w[h;c]+b))

5、TextRCNN
RNN使得后面的词比前面的重要,CNN的滑动窗口大小不容易确定。二者结合,前者获取上下文信息、保留语序,后者pooling提取重要部分。
利用LSTM得到每个词的前、后向上下文表示,将词表示变为—[词向量,前向上下文表示,后向上下文表示],然后再用TextCNN的卷积层&pooling层。唯一不同的是卷积层 filter_size = 1就可以了,不再需要更大 filter_size 获得更大视野,这里词的表示也可以只用双向RNN输出。

6、HANHierarchy Attention Network
相较于TextCNN,HAN最大的进步在于完全保留了文章的结构信息,并且特别难能可贵的是,基于attention结构有很强的解释性。
在这里插入图片描述
    输入词向量序列,通过词级别的Bi-GRU后,每个词输出隐向量h,再通过 u w u_w uw向量与每个时间步的h向量点积得到 u t u_t ut分数、归一得 α t \alpha_t αt权重,然后把h序列做一个加权和,得到句子summary向量 s 2 = ∑ α t h t s_2=\sum \alpha_t h_t s2=αtht。每个句子再通过同样的Bi-GRU结构再加attention得到最终输出的文档特征向量v向量,然后v向量通过后级dense层再加分类器得到最终的文本分类结果。模型结构非常符合人的从词->句子->篇章的理解过程。
    最重要的是该模型在提供了更好的分类精度的情况下,可视化效果非常好。同时在调参过程中,发现attention部分对于模型的表达能力影响非常大,整个模型在所有位置调整L2-Loss对模型表达能力带来的影响远不如在两处attention的地方大,这同时也能解释为什么可视化效果比较好,因为attention对于模型的输出贡献很大,而attention又恰恰是可以可视化的。

7、Transformer使用示例
多头attention抽取任意位置的关键词、并行效率高。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值