【“达观杯”冠军分享】预训练模型彻底改变了NLP,但也不能忽略传统方法带来的提升...

点击上方,选择星标置顶,每天给你送干货

阅读大概需要11分钟

跟随小博主,每天进步一丢丢

来自:大数据文摘

9月 21 日,2019“达观杯”文本智能信息抽取挑战赛在北京长峰假日酒店顺利举行。

经过两个月的激烈角逐,实力卓群的 10 强决赛队伍从近3000名参赛选手中脱颖而出并在颁奖典礼上进行了方案汇报,最终由tonyxu战队赢得冠军,获得三万元现金大奖等丰厚奖励。本次比赛共吸引选手近3000人,组成1258支队伍参赛。参赛选手来自国内外各大高校、科研机构及企业,其中来自985、211的选手占报名人数的40%,BAT等多个知名企业均有代表参与。

比赛赛题与数据简介

联合创始人高翔表示,本次比赛是达观第三次组织算法大赛。第一届的主题是推荐,第二届的主题是文本或新闻分类。这的主题是信息抽取。信息抽取是一个非常基础的工作,如果没有做好,很多更高层面的工作就没有办法进行。总体来说,这三次比赛的问题和数据都很接近达观在工业实践中的应用。

这次比赛有两个特别之处。一是对比赛的文本数据进行了加密,每个字都被映射到了一个整数上。标注好的数据为什么要做一个ID映射?这是因为比赛组织者希望参赛者不要用一些比赛的窍门,而是专注于算法本身。另外在实际应用中也会出现类似的场景——某些特定领域的文本即使是中文,也未必很容易看懂。如果要在这些文本上抽取内容,场景会和这次比赛非常相似。

另一个特别之处是,比赛提供了非常大的未标注的语料集,每个类型的信息大约都有2万条数据。这和业务中实际出现的情况较为接近。其实有时候项目能接触到的文档数还会更少。

比赛技术选型

本次比赛的获奖选手方法各异,但也有一些共同的趋势。首先就是BERT已经成为了无法回避的主流框架和做文本信息挖掘的标准。目前很多公司的业务涉及大量非监督数据,所以BERT可以提供很大的帮助。选手也使用了word2vec等其他预训练模型,说明这些模型仍然能经得起考验。公司内部其实也使用这些模型,因为性能较好,效果也不错。

网络结构大部分都是都是LSTM/biLSTM+CRF,有些选手也使用CNN提取一些局部特征在公司内部,有时候也会不用LSTM这一层,直接用BERT接CRF。还有的参赛者用伪标签的形式,这个算法的效果可能不太稳定,因为它用预测出的结果再去做训练,可能会越训越好或越教越差。最后是数据扩充的思路,可以把测试集一起用于训练。

最后的结果竞争非常激烈,前几名要依靠万分位排序,不像过去的很多比赛第一名和第二名会有显著差距。这说明目前的技术出现了同质化,也说明了技术的确进步了,整个技术平台提升了,大家也都变强了。

冠军分享

我是徐恒,硕士毕业于香港理工大学,目前在南京一家跨境电商担任算法工程师的职位。很开心能够在这次达观杯上获得第一名。在这次比赛里,我除了尝试一些基础的神经网络模型以外,更对预训练语言模型进行了深入的研究。预训练语言模型的出现彻底改变了NLP的现状,我相信未来更多的工作都会基于预训练语言模型这个概念去完成。


模型选择和融合方法


模型的整体框架

数据预处理

我参加这个比赛主要分为三个阶段:

第一个阶段主要去搭建基础的实验框架。我是通过修改网络上开源的框架快速参与到这个比赛中来的。同时在第一个阶段中我也尝试了各种word embedding方法。这一个阶段对机器的性能要求不那么高,可以使用消费级的GPU来完成。

第二个阶段是简单的预训练语言模型的引入。在这个阶段,传统的word embedding方法已经很难取得提升。因此我尝试了简单的预训练语言模型,如FlairEmbedding,ELMO以及层数较少的Bert等。这些模型也可以在消费级GPU上进行训练。同时效果会相比于word embedding有所提升。

不同模型的实现过程和结果

第三个阶段是高复杂度的预训练语言模型的使用,在这个阶段使用传统的GPU比较难完成。由于我本身也比较缺乏计算资源,只能付费去使用Google Cloud提供云TPU。借助TPU的算力,例如BERT Large和XLnet Large的模型都可以顺利的完成训练。不过TPU的使用没有GPU那么灵活,同时TPU目前只能通过Tensorflow这个框架使用,因此熟练掌握多个深度模型的框架很有必要。


模型融合权重选择

在前十的队伍的分享中,我发现大家使用的方法都比较类似,但是每支队伍都有独特的技巧。不过这些技巧在我最终的提交中基本都有覆盖,我想这也是我能够最终夺冠的原因。虽然大规模的预训练语言模型很有效,我们也不能忽略传统方法带来的提升,这就是我本次比赛的经验。


有效和无效的技巧总结


自然语言处理方法总结

亚军总结

我是徐晓亮,以个人身份参赛。我来自武汉,2015年硕士研究生毕业于湖南大学。现就职于传神语联网网络科技股份有限公司,担任算法工程师,主要从事机器翻译、文档分类、信息抽取等nlp相关工作。

比赛过程中,主要的困难在于bert模型的pretraining,因为硬件资源的限制(大部分参数选手会遇到的问题),需要对bert模型的超参数进行调整,如transformer层数、intermediate_size、batch_size等,进而降低模型参数量;其次是针对fine tune阶段loss、acc指标所对应的token与线上提交时F1指标对应的entity不同进行调整,手动修改crf层的transition matrix;最后的模型融合阶段,是从token级别进行融合还是从entity级别进行融合,需要权衡。


我的框架和其他选手差不多,基本模型是BERT,后面接了双向的LSTM,后面再加条件随机场。下面主要从预训练和finetune两个阶段跟大家分享。


预训练阶段中,因为机器的限制,所以需要对原始参数进行分析修改。原始的BERT模型有110M参数,对于普通的机器来说比较多,即使我们机器GPU可以承载这么多参数,但是也不能设置太高。

个人认为,BERT模型里起到更重要作用的是self-attention,但是它的参数占比仅为30%左右(单层transformer中)。Feedforward层的参数占了70%,所以我从这方面入手调整。

最后调整结果如上图所示。max_seq_len设为256,这是基于对数据的分析: 99%以上的数据都在256以下。Num-hidden-layers设置成了8。Intermediate_size是全连接层参数,我改成2304,这一改动使feedforward层参数占比降至60%。Vocab size是根据语料统计,设置为21227,最终经过调整,参数量从110兆降到60兆,这样2个11G的GPU可以设置较合理的batch_size。

从任务来讲,原始的BERT预训练包含两个任务:一个是Masked Language Model,还有一个是Next Sentence Prediction。因为比赛数据是脱敏的,而且现在有研究表明Next Sentence Prediction任务好像对于某些下游任务有些损害,所以只用了第一个Masked Language Model任务。比赛组织者提供了160万条corpus数据,在生成预训练数据过程中,把dupe_factor设置成10,最终得到到1600万条数据。

这是微调过程。数据格式采用BMES(Begin, Middle, End, Single),总数据有17000条,trainset设置为15300,valset设置为1700,训练过程采用10折交叉验证。


微调过程中存在的问题:我们在训练时的loss和acc都是针对每个token,但是提交测试时得分F1针对的却是entity。针对这一问题,我在微调过程中加了一个人工限制,以这行为例,比如t时刻的label是B-b,那么t+1时刻就限制只能是M-b或者E-b,其他全部设成0(当然,实际过程是把它设置为较小负数)。经过人工约束后,大概有0.3-0.4的F1提升)。

最后是模型的融合。因为预训练模型花的时间比较久,我选择了三个基础模型,第一个是77%,第二个是80%,最终训练模型是82%。融合是按照1:1的权重正常投票去做的(token level),未来可以试一下以实体的level去融合。

季军总结

团队介绍

7月份,我们在biendata网站上看到了“达观杯”文本智能信息抽取挑战赛。信息抽取任务是自然语言处理中一个非常基础也很重要的任务。为了能够更好地了解和研究这个问题,我们5个人决定组队参加这个比赛。我们的队员都是浙大毕业或在读的博士硕士研究生,包括姜兴华、黄颖骅、严雨姗、钱炜、诸凯丽。在参赛的两个月中,我们从最开始的0.80,提升到了0.94,在整个比赛过程中,尝试了很多失败的方法,同时也学习到了很多东西。

一开始拿到赛题的时候,我们尝试了Bilstm + CRF的基础模型,主要是为了做一个baseline模型,能够更好了解数据以及问题。为了更好地利用提供的无标注数据,我们尝试了预训练词向量、预训练语言模型的方法。最后,使用了预训练语言模型 + finetune两阶段的方法。


预训练语言模型 + finetune两阶段的方法


预训练模型


Fintune 模型


模型融合

下面是我们在比赛过程中尝试的一些有效和无效的方法。

有效的方法:

  • 预训练mask语言模型

  • 动态mask输入单词

  • Ngram mask单词

  • 限定CRF转移矩阵,限制不合法转移

  • span模型(只预测实体的起始和结束位置)

  • 根据预测的实体出现在训练集的信息ensemble模型

无效的方法:

  • 伪标签,用训练好的模型预测未标注语料,然后,再用预测标签训练模型。(在不使用预训练语言模型的时候,该方法是有效的,但在最终模型上无效)

  • 用mask语言模型训练bilstm(相较于transformer模型,bilstm在预训练语言模型任务上效果较差)

  • 数据增强,替换训练数据中相同类型实体,增加训练样本(在开始模型性能并不是太好的时候,该方法是有效的,但是在最终模型上无效)。

推荐:

进步就在点滴,推荐几个国外留学生在看的技术资源平台



方便交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

推荐阅读:

【ACL 2019】腾讯AI Lab解读三大前沿方向及20篇入选论文

【一分钟论文】IJCAI2019 | Self-attentive Biaffine Dependency  Parsing

【一分钟论文】 NAACL2019-使用感知句法词表示的句法增强神经机器翻译

【一分钟论文】Semi-supervised Sequence Learning半监督序列学习

【一分钟论文】Deep Biaffine Attention for Neural Dependency Parsing

详解Transition-based Dependency parser基于转移的依存句法解析器

经验 | 初入NLP领域的一些小建议

学术 | 如何写一篇合格的NLP论文

干货 | 那些高产的学者都是怎样工作的?

一个简单有效的联合模型

近年来NLP在法律领域的相关研究工作


让更多的人知道你“在看”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值