自然语言处理中的多模型深度学习

14 篇文章 2 订阅
12 篇文章 2 订阅

这里先分享两个分享:
一个是用深度学习(CNN RNN Attention)解决大规模文本分类问题 - 综述和实践,另一个是 brightmart 的 text_classification,里面用 Keras 实现了很多文本分类的模型)

以及下面的各种分享:
2017 知乎看山杯从入门到第二
知乎看山杯夺冠记
深度学习与文本分类总结第二篇–大规模多标签文本分类
2017知乎看山杯总结(多标签文本分类)

现在,小结一下这里面涉及到的多模型深度学习的相关:

2017看山杯第二

参照 brightmart 的 github 开源,我们尝试了前 5 种模型,分别是 FastText、TextCNN、TextRNN、RCNN、HAN

其中,HAN 的原始论文中用的是词和句子两层 Attention,而数据中是看不出句子的,所以这个方法我只用了一层 word,效果不好。而 RCNN 因为同时用到了 RNN 和 CNN 的思想,所以整个网络的训练时间很长,且其效果与单独的 RNN 和 CNN 差不多,因此后期没有使用此模型。最终用到的模型有:

  • FastText:通过 Average 抽象出概括性语义信息
  • TextCNN:仿照 n-gram 捕捉局部语义信息
  • TextRNN:提取序列语义信息
    FastText+TextCNN+TextRNN

核心思路

这是我们这次参赛的一大亮点和创新点,就是成功地在深度学习上应用了一种类似于 AdaBoost 的做法,通过训练多层来不断修复前面层的偏差。我们在分析数据的时候发现,一个模型的输出是具有类别倾向性的,所以在某些类别上可能全对,而在某些类别上可能全错,所以我们针对这种偏差做了一些改进,通过人为地定义偏差的计算方式,指导下一层模型更多关注那些错的多的类,从而达到整体效果的提升。
这里写图片描述
通过用这种方法,单模型 Score 有了质的飞跃,平均提升都在 1.5 个百分点(FastText 因模型过于简单,提升空间有限),而 10 层的 RNN 则更是在用全部训练集 finetune 之后,分数直接从 0.413 飙升到 0.42978,可谓真是用单模型探索数据的极限了。
这里写图片描述
这种方法的优势在于,一般只要不断加深训练层数,效果就会提升,但缺点却在于它抹平了模型的差异性,对于模型融合效果不友好。

模型融合

模型融合依靠差异性,而我们模型的差异性在前面已经近乎被抹平,所以又另寻他路,用了另外两个方法:

  • 改变输入,从 word 改成 char,虽然 char 的单模型效果不好,但总体融合却能提升很多
  • 人为定义不同的偏差计算方式

最终模型主要是 5 个 10 层模型的概率加权融合,分数在 0.43506。

知乎看山杯夺冠记

模型:
TextCNN、TextRNN、TextRCNN、TextInception(他们自己提出来的)
训练方法:

  • 基于词和基于字的模型要分开训,然后融合,一起训的效果不好 (我:注意这里是中文,才有基于词和基于字)
  • 使用官方给的word-embedding.txt和char-embedding.txt初始化Embedding层的权重
  • 训练1-2个epoch之后,Embedding层的学习率设为2e-4
  • 每个epoch或者半个epoch统计一次在验证集的分数
    • 如果分数上升,保存模型,并记下保存路径
    • 如果分数下降,加载上一个模型的保存路径,并降低学习率为一半(重新初始化优化器,清空动量信息,而不是只修改学习率—-使用PyTorch的话新建一个新优化器即可)

模型融合:
像这种模型比较简单,数据量相对比较小的比赛,模型融合是比赛获胜的关键。 (!!!)
最简单的模型融合方法—–概率等权重融合。
对于每个样本,单模型会给出一个1999维的向量,代表着这个模型属于1999个话题的概率。融合的方式就是把每一个模型输出的向量直接相加,然后选择概率最大的5个话题提交。
这里写图片描述

MultiModel
这里作者提出了一种大模型,很值得一看,或许有启发。

深度学习与文本分类总结第二篇–大规模多标签文本分类

在这篇分享中,作者说到下面这一段话:
我感觉比较常用的应该是ranking和BR的方法。再反过来看这次知乎的竞赛,其实我看了前几名的解决方案,大都是只用了深度学习模型的堆砌,比如说CNN,RNN然后再加上模型融合和数据增强的一些手段得到了比较好的分数。但是我之前也采访过知乎机器学习团队的负责人,他当时也明确的表明现在选手使用的方法还都是比较老派,没有什么十分大的创新点出来,而且几乎没怎么利用标签之间的关系等信息。
然后提出了自己的一些创新点:(我稍微总结了一下)

  • 数据的特定以及label之间的关系,可构成树状图
  • 利用已给出的label的信息
  • 自定义初始化网络权重的方法让模型学习到这种标签的共现信息,从而更加准确地进行类别预测。
  • Multi-Label Classification on Tree- and DAG-Structured Hierarchies
2017知乎看山杯第五

(刚开始看到他们的分享,其实觉得他们设备不错了)
所有的比赛都应该一样, 就是“不择手段”地达到更好的成绩,而要取得较好的成绩,不可避免地会用到集成学习,所以你不可能靠一两个模型就能够取得很好的结果。在这次比赛中最后获奖的所有队伍都用了模型融合,模型数量少的有十几个,多个两百多个,我最后提交的结果用了37个模型。所以从一开始,你就应该管理好模型和文件的命名,这样才不至于后期命名混乱,因为缺乏经验,所以我也在这上面吃了不少亏。
tensorboard 很好用,通过 tensorboard 查看损失变化能够很好地帮助我们进行调参,当然同时也可以看看模型结构有没有写错了

模型
TextCNN,BiGRU,HAN(Hierarchical Attention Networks),FastText,RNN+CNN(区别与RCNN)
融合
作者用了线性加权
一定要从一开始就为最后模型融合做好准备。模型融合的方法有很多,最常见的比如bagging, stacking 等。在这次比赛中,由于数据量太大,而且计算时间非常长,所以对于我来说,基本上没有办法做stacking,所以最后使用了线性加权。好而不同,这是模型融合最最关键的地方。所以BIGRU与TextCNN融合要比BIGRU与HAN效果好很多,因为TextCNN与BIGRU结构相差非常大,而HAN里边就是用了 BIGRU。所以在训练不同模型时,一定尽量增加模型之间的差异性。在这个比赛中,使用字向量训练的模型要比词向量训练的模型差很多(1个百分点以上),但是在模型融合中,一个好的字向量模型带来的提升非常大。

下面来看看知乎对这些的总结:获奖团队及方法总结
(代码都公开了!)
「2017 知乎 · 看山杯机器学习挑战赛」结束,谁获奖了?知乎还会做什么?
这里写链接内容

  • init 团队提交的模型在 leader board 上获得了 0.4341 分的成绩,使用新的数据集进行验证则获得了 0.4346 分的成绩;
  • YesOfCourse 团队提交的模型较多,约有 200 多个;我们随机抽取其中的部分模型进行了验证,其 CNN 单模型在 leader board 上获得了 0.4182 的成绩,使用新的数据集进行验证,则获得了 0.4146 分的成绩;
  • NLPFaker 团队一共提交了近 40 个模型,我们复现了其中 20 个模型的 ensemble 结果,这部分模型在 leader board 上取得了 0.4254 的成绩,使用新的数据集则获得了 0.4237 分的成绩。

我们对 7 支比赛队伍的方法进行了汇总如下:

  • init 团队:TextCNN + TextRNN + RCNN,共享 Embedding 进行联合学习,在模型集成方面,使用多模型、等权重的 Bagging 方法进行集成;在数据预处理方面,使用 delete 和 shuffle 进行数据增强;
  • Koala 团队:FastText + TextCNN + TextRNN,使用 boosting 的思想对神经网络进行逐层训练,各个网络之间使用加权平均的 bagging 方式;
  • YesOfCourse 团队:使用 TextCNN + LSTM/GRU + RCNN 作为基模型,并且利用 GBRank 融合多个神经网络的输出;
  • NLPFakers 团队:使用 TextCNN + RNN + RCNN 作为基模型,利用线性加权进行模型集成;在神经网络训练中使用了 attention 机制;
  • Gower Street & 81 Road 团队:使用 RNN 神经网络作为基础模型,并且将 Query-TopicTitle 的相似度与神经网络进行联合训练。最终使用 Bagging with Ensemble Selection 作为模型集成策略;
  • ye 团队:使用 TextCNN + BiGRU 作为基础模型,利用带有权重搜索的 bagging 作模型集成策略;
  • Yin&Bird 团队:利用 LSTM 和 Bayes 方法作为基础模型,并且利用 stacking 方法进行模型集成。

<墙裂建议看看知乎对此的总结>

下面我来说说 2017年Semeval的 task4 分享

2017深度学习NLP进展与趋势

模型:
一个纯的DL系统BB_twtr系统(Cliche,2017)在5 个子任务中排名第一。
作者将10个CNN和10个双向LSTM结合起来,使用不同的超参数和不同的预训练策略训练。
为了训练这些模型,作者使用了人工标记的推文(子任务A有49,693个),并且构建了一个包含1亿个推文的未标记数据集,通过简单的标记来提取推特数据集中表示积极的积极表情符号,如:-),反之亦然消极鸣叫。为了对CNN和双向LSTM输入的词嵌入进行预训练,作者使用word2vec,GloVe和fastText在未标记的数据集上构建词嵌入。然后他使用隔离的数据集来添加积极和消极的信息,然后使用人类标记的数据集再次提炼它们。之前的SemEval数据集的实验表明,使用GloVe会降低性能。
这里写图片描述
融合:
然后作者将所有模型与软投票策略结合起来。由此产生的模型比2014年和2016年的历史最好的历史成绩更胜一筹。
这项工作表明了将DL模型结合起来,可以在Twitter中的情感分析中超越监督学习的方法。*

模型融合依靠差异性。
我看了那篇semeval论文中提到,他计算差异性的方法:
we can compute the Pearson correlation coefficient between the output probabilities of any pairs of models
这里写图片描述

我目前就看了这么些了,建议我自己回去再看看在别的方面的模型以及模型融合。

【待续……】

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值