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

2019 年 9 月 28 日 大数据文摘

大数据文摘出品


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在预训练语言模型任务上效果较差)

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



一个去乌镇的机会!
第六届世界互联网大会•乌镇峰会
数字经济人才专场研讨会
首届“30位新生代数字人才”评
报名启动!


-18日晚-
数字经济人才对接VIP晚宴
首批“30位新生代数字经济人才”颁奖仪式

-19日上午-
大咖主题演讲
《数字经济人才城市指数报告》发布


点击“ 阅读原文 ”或扫描海报二维码报名参加👇



实习/全职编辑记者招聘ing

加入我们,亲身体验一家专业科技媒体采写的每个细节,在最有前景的行业,和一群遍布全球最优秀的人一起成长。坐标北京·清华东门,在大数据文摘主页对话页回复“招聘”了解详情。简历请直接发送至zz@bigdatadigest.cn



点「在看」的人都变好看了!
登录查看更多
4

相关内容

知识抽取,即从不同来源、不同结构的数据中进行知识提取,形成知识(结构化数据)存入到知识图谱。
斯坦福2020硬课《分布式算法与优化》
专知会员服务
117+阅读 · 2020年5月6日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
209+阅读 · 2020年4月26日
基于深度学习的多标签生成研究进展
专知会员服务
140+阅读 · 2020年4月25日
【北航】面向自然语言处理的预训练技术研究综述
专知会员服务
111+阅读 · 2020年4月23日
【复旦大学-SP2020】NLP语言模型隐私泄漏风险
专知会员服务
24+阅读 · 2020年4月20日
专知会员服务
102+阅读 · 2020年3月12日
NLP基础任务:文本分类近年发展汇总,68页超详细解析
专知会员服务
57+阅读 · 2020年1月3日
3分钟看懂史上最强NLP模型BERT
机器学习算法与Python学习
7+阅读 · 2019年2月27日
深度学习如何调参?
炼数成金订阅号
6+阅读 · 2018年10月18日
NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)
数据挖掘入门与实战
5+阅读 · 2017年11月24日
Arxiv
29+阅读 · 2020年3月16日
Arxiv
12+阅读 · 2019年2月28日
Arxiv
31+阅读 · 2018年11月13日
Arxiv
21+阅读 · 2018年8月30日
Arxiv
10+阅读 · 2018年4月19日
VIP会员
相关VIP内容
斯坦福2020硬课《分布式算法与优化》
专知会员服务
117+阅读 · 2020年5月6日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
209+阅读 · 2020年4月26日
基于深度学习的多标签生成研究进展
专知会员服务
140+阅读 · 2020年4月25日
【北航】面向自然语言处理的预训练技术研究综述
专知会员服务
111+阅读 · 2020年4月23日
【复旦大学-SP2020】NLP语言模型隐私泄漏风险
专知会员服务
24+阅读 · 2020年4月20日
专知会员服务
102+阅读 · 2020年3月12日
NLP基础任务:文本分类近年发展汇总,68页超详细解析
专知会员服务
57+阅读 · 2020年1月3日
相关资讯
3分钟看懂史上最强NLP模型BERT
机器学习算法与Python学习
7+阅读 · 2019年2月27日
深度学习如何调参?
炼数成金订阅号
6+阅读 · 2018年10月18日
NLP大赛冠军总结:300万知乎多标签文本分类任务(附深度学习源码)
数据挖掘入门与实战
5+阅读 · 2017年11月24日
Top
微信扫码咨询专知VIP会员