【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--1 赛后总结与分析

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP自然语言处理_高级版,每接口累计50万次
NLP 自学习平台,3个模型定制额度 1个月
简介: 参与讯飞英文学术论文分类挑战赛的经验,包括使用的多种模型和技术,如TextCNN、FastText、LightGBM和BERT,以及提分策略和遇到的问题。

1 相关信息

2 总结

1.png

方案思路图

感谢2021年7月的暑假遇到三个志同道合的队友:博远、禹飞、沛恒,互相鼓励,一直出谋划策一个月,最终以0.8304的成绩获得rank 10/389的成绩。

2.1 TextCNN、Fasttext等DL方案

(1)方案
拿到赛题,第一件事,就是做数据分析。可以参考【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案–2 数据分析分析
了解到数据量比较小,只有5W,首先选择了TextCNN、FastText算法模型。首先选择非词向量的即词嵌入的模型去跑通baseline,然后再选择word2vec、fasttext、glove等预训练词向量去提分。这些方案最初,都只能拿到最高0.77+的分数,通过后期的数据预处理方式改变、K折交叉验证、预训练词向量调参,伪标签等提分技巧,最终达到0.807+。具体方案参考
【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案–3 TextCNN Fasttext方案
(2)提分点

  • 数据预处理:词性替换、去除特殊字符、数字泛化、去除多余空格、去除换行等方式,均有提升,具体查看代码实现
  • 预训练word2vec、fasttext、glove词向量,通过对比单个word2vec选择128维度,能获得最高的准确率,尝试合并三种向量的矩阵,得到3×128的词向量矩阵,但是效果并没有单个词向量的好。
    (3)注意点
  • 同样的数据,用DPCNN、TextRNN模型,效果并不佳
  • 还有HAN、LSTMwithAttention等模型都还没有尝试
  • 尝试了GCN图卷积神经网络,由于该方案中需要使用邻接矩阵,矩阵太大,显存装不下,只使用了部分的训练数据,线上就能到达0.78+的分数,实现没有这么大的显存设备,放弃了该方案。
  • 数据增强:随机替换、随机删除做的5W数据以及互译的5W数据,加上原本的5W的数据,分别测试了两种增强方式,都没有得到提升。但是在Bert上提升了一个点。

2.2 机器学习LGB方案

队友尝试了用LGB方案,实现非常简单,交叉5折交叉验证,就能达到0.79的分数,但是我们没有在该方案上进一步改进,仅作为一个基本方案,在比赛的最后的投票融合部分,使用了该模型的预测结果。具体方案可参考
【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案–4 机器学习LGB方案

2.3 Bert方案

(1)使用Bert的辛酸
选择Bert是最后的大杀器,我们的最高得分模型就是Bert,有一个致命的缺点就是太吃显卡,费时费钱,不像TextCNN等其他DL模型,十几分钟,半个小时就能跑完。跑通“致great -闫强”大佬开源的bert Baseline方案科大讯飞学术论文分类挑战赛 0.79+ baseline
就花了三个小时,后期我们自己的模型,少则6个小时,多则20个小时,才能出结果。多次出现跑到最后,在生成提交文件的时候出bug或者中途出Bug ,前功尽弃。因为选择的K折交叉验证取每折的平均作为预测值,一旦中断,交叉验证取平均的结果将得不到。

虽然我和其中一名队友有本地服务器,但是我的显存太小,只有8G,吃显存的Bert_large 、roberta_large根本跑不动,我和其他两名队友,就选择了恒源云的云服务器3090的GPU,虽然有活动送了100块钱的代金券,但是三天就用完了,剩下的全是自己烧钱充值,5块钱一个小时的费用,打比赛没赢到钱,反而每个人砸了不少钱。

(2)Bert真香
我尝试自己去github和kaggle上选择高分Bert baseline去跑通模型,但是准确率极低,只有0.65+。一直在分析原因,直到强哥又在直播课上开源了其他方案Bert的baseline,科大讯飞NLP文本分类赛事上分利器:Bert微调技巧大全_闫强,该方案中强哥提到了很多提分技巧,包括使用差分学习率,使用bert_base、bert_large、roberta_large预训练模型、对一篇Bert微调的论文中点进行了解析。特别是包括学习率的设置,如果设置不好,会导致灾难性遗忘,这对我是一个巨大的启发。

灾难性遗忘 Catastrophic forgetting (灾难性遗忘)通常是迁移学习中的常见诟病,这意味着在学习新知识的过程中预先训练的知识会被遗忘。 因此,论文中还研究了 BERT 是否存在灾难性遗忘问题。 我们用不同的学习率对 BERT 进行了微调,发现需要较低的学习率,例如 2e-5,才能使 BERT 克服灾难性遗忘问题。 在 4e-4 的较大学习率下,训练集无法收敛。

尝试修改学习率后,模型直接提升几个点,上了0.70+,但是还是低。最终选择在强哥的第二个bert的baseline上进行迭代。
首先跑通bert_base,使用差分学习率,5折交叉2epoch,训练参数调参就能达到0.795+。

(3)继续提分

  • 队友尝试修改模型结构,在bert后面使用一层LSTM,能够提升千分点。
  • 用相同的代码,使用不同的预训练模型bert_large,roberta_large,相继获得0.7991,0.80+的结果。
  • 选择TextCNN、Fasttext、ML -LGB 、bert_base、bert_large、roberta_large的投票模型融合提高一个点。0.81+
  • 数据增强:两种方式,第一种是随机删除、随机替换方式增强5W的训练集、第二种是互译的方式,再做5W的数据。总共15W的数据,再去训练模型。单个模型能提升一个点,bert突破0.81+。
  • 利用投票的原理,选择多个模型都投票的数据去做伪标签,得到top 6000的高质量伪标签,加入训练集,重新训练所有模型,所有模型都得到了一个点的提升,又继续投票融合,线上突破0.82
  • 此时已经黔驴技穷了,只能继续反复迭代伪标签,用最高的模型又重新做伪标签得到top8000的伪标签数据,再重新训练模型,TextCNN、Fasttext单个模型都突破0.80+,bert_base、bert_large方案都突破0.81+,roberta_large模型最佳达到0.8246,再去投票融合,最终达到最高成绩,0.8304。

(4)Bert 注意点

  • Bert的数据预处理,通过对比实验,只选择小写处理和词性替换,更多更细的预处理将会是适得其反的,反而会降低模型的准确率,因为预训练的模型,当初训练时就是预训练的没有经过太细致预处理的数据。可参考【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案–5 Bert方案
  • Bert训练太慢了,最后选择了混合精度训练,加快近两倍的训练速度。但是在比赛最后几天才使用的。模型精度没有太大影响。省了不少时间。可参考【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案–6 提分方案
  • 差分学习率搭配AdamW优化器使用很有必要,能够提高模型精度
  • 伪标签的加入,不是随便加入的,越高质量的伪标签,越能得到更好的效果。伪标签加入到训练数据后,不是继续训练,而是从零训练,这样伪标签才能发挥作用。可参考【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案–6 提分方案
  • 尝试自己使用ITPT方式预训练自己的数据集,最大设置了60epoch,效果并不佳,有两方面的原因,数据集太小,训练集加上测试集只有6W的样本文本,二可能是我们做的方式不对。最终该方案放弃。
  • 尝试过将bert_base、bert_large、roberta_large三个模型使用Stacking集成,非正规的Stacking效果有0.8228,并没有投票融合效果好,为什么说非正规,是因为我将三个模型验证集的数据是vstack,而不是hstack。说都了都是泪,因为三个模型训练的时候,把验证集顺序shuffle了,不能去hstack每个样本。如果正确使用,估计能提高更多分数。

3 继续提分点

(1)TextCNN、Fasttext等模型

  • 理论上合并word2vec+fasttext+glove三个词向量的矩阵,能提高模型精度,但是本人只尝试过各128维度,并没有提升,就没有过多时间去调参。可以各取100维度,合并成300维的词向量嵌入矩阵。
  • 对抗训练:队友使用PGD对抗训练的方法得到提升,但是我测试的时候未得到提升,这是不应该的。还有FGM对抗训练,在我的实验测试并没有得到提升。我也没有进一步去分析原因。

(2)Bert模型

  • 调参:bert模型没有经过太多的调参
  • 加深训练:选择的5折,2epoch,训练完模型,都没有过拟合,但是训练时间都是十几个小时。如果有更多的时间会选择去加大epoch
  • 其他集成方法,Stacking、Bagging等方案,由于我的代码有误,在准备三个Bert模型stacking数据的时候,被shuffle了,只能去vstack三个模型的数据去做非正规的stacking,的确有提升,但是并不如投票融合的话。
  • 改进Bert结构:在其他比赛中,有些大佬,使用拼接Bert输出层的bert模型,效果显著。CCF BDCI 2019 互联网新闻情感分析 复赛top1
目录
相关文章
|
2月前
|
自然语言处理 算法 Python
自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
【10月更文挑战第9天】自然语言处理(NLP)在文本分析中的应用:从「被动收集」到「主动分析」
50 4
|
2月前
|
自然语言处理 算法 数据挖掘
探讨如何利用Python中的NLP工具,从被动收集到主动分析文本数据的过程
【10月更文挑战第11天】本文介绍了自然语言处理(NLP)在文本分析中的应用,从被动收集到主动分析的过程。通过Python代码示例,详细展示了文本预处理、特征提取、情感分析和主题建模等关键技术,帮助读者理解如何有效利用NLP工具进行文本数据分析。
52 2
|
4月前
|
自然语言处理 算法 数据可视化
NLP-基于bertopic工具的新闻文本分析与挖掘
这篇文章介绍了如何使用Bertopic工具进行新闻文本分析与挖掘,包括安装Bertopic库、加载和预处理数据集、建立并训练主题模型、评估模型性能、分类新闻标题、调优聚类结果的详细步骤和方法。
NLP-基于bertopic工具的新闻文本分析与挖掘
|
4月前
|
机器学习/深度学习 自然语言处理 PyTorch
【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案--6 提分方案
在讯飞英文学术论文分类挑战赛中的提分技巧和实现方法,包括数据增强、投票融合、伪标签等策略,以及加快模型训练的技巧,如混合精度训练和使用AdamW优化器等。
43 0
|
4月前
|
数据采集 机器学习/深度学习 存储
【NLP】讯飞英文学术论文分类挑战赛Top10开源多方案–5 Bert 方案
在讯飞英文学术论文分类挑战赛中使用BERT模型进行文本分类的方法,包括数据预处理、模型微调技巧、长文本处理策略以及通过不同模型和数据增强技术提高准确率的过程。
42 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用与挑战
【10月更文挑战第3天】本文将探讨AI技术在自然语言处理(NLP)领域的应用及其面临的挑战。我们将分析NLP的基本原理,介绍AI技术如何推动NLP的发展,并讨论当前的挑战和未来的趋势。通过本文,读者将了解AI技术在NLP中的重要性,以及如何利用这些技术解决实际问题。
|
3月前
|
机器学习/深度学习 数据采集 自然语言处理
深度学习在自然语言处理中的应用与挑战
本文探讨了深度学习技术在自然语言处理(NLP)领域的应用,包括机器翻译、情感分析和文本生成等方面。同时,讨论了数据质量、模型复杂性和伦理问题等挑战,并提出了未来的研究方向和解决方案。通过综合分析,本文旨在为NLP领域的研究人员和从业者提供有价值的参考。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
探索AI在自然语言处理中的创新应用
【10月更文挑战第7天】本文将深入探讨人工智能在自然语言处理领域的最新进展,揭示AI技术如何改变我们与机器的互动方式,并展示通过实际代码示例实现的具体应用。
42 1
|
5天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术在自然语言处理中的应用
随着人工智能技术的不断发展,自然语言处理(NLP)已经成为了一个重要的应用领域。本文将介绍一些常见的NLP任务和算法,并通过代码示例来展示如何实现这些任务。我们将讨论文本分类、情感分析、命名实体识别等常见任务,并使用Python和相关库来实现这些任务。最后,我们将探讨NLP在未来的发展趋势和挑战。
|
24天前
|
机器学习/深度学习 自然语言处理 监控
探索深度学习在自然语言处理中的应用与挑战
本文深入分析了深度学习技术在自然语言处理(NLP)领域的应用,并探讨了当前面临的主要挑战。通过案例研究,展示了如何利用神经网络模型解决文本分类、情感分析、机器翻译等任务。同时,文章也指出了数据稀疏性、模型泛化能力以及计算资源消耗等问题,并对未来的发展趋势进行了展望。