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

阅读大概需要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在法律领域的相关研究工作


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

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

  1. 【2021 第五届“达观杯” 基于大规模预训练模型的风险事件标签识别】1 初赛Rank12的总结与分析

    目录 相关链接 1 赛题分析 2 引言 3 方案 3.1 传统DL方案 3.2 预训练方案 4 提分技巧 5 加快训练 6 总结和反思 7 参考资料 相关链接 [2021 第五届"达观杯&q ...

  2. 2021 第五届“达观杯” 基于大规模预训练模型的风险事件标签识别】3 Bert和Nezha方案

    目录 相关链接 1 引言 2 NEZHA方案 2.1 预训练 2.2 微调 3 Bert 方案 3.1 预训练 3.2 微调 3 模型融合和TTA测试集数据增强 4 总结和反思 5 参考资料 相关链接 ...

  3. 斯坦福NLP名课带学详解 | CS224n 第13讲 - 基于上下文的表征与NLP预训练模型(ELMo, transformer)(NLP通关指南·完结)

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/36 本文地址:https://ww ...

  4. 8种优秀预训练模型大盘点,NLP应用so easy!

    https://www.toutiao.com/a6674855848902132235/ 大数据文摘出品 编译:李雷.蔡婕 如今,自然语言处理(NLP)可谓遍地开花,可以说正是我们了解它的好时机. ...

  5. 将预训练模型应用于长文本阅读理解

    摘要: 基于transformers预训练模型(如BERT.RoBERTa)的表现突出,预训练模型基本作为模型的baseline,但是由于self-attention的矩阵计算时间复杂度为,导致输入长 ...

  6. 翟季冬:基于国产超算的百万亿参数超大预训练模型训练方法

    [前沿进展]训练参数规模万亿的预训练模型,对于超级计算机而言是不小的挑战.如何提升超算的计算效率,实现更大规模的参数训练,成为近年来研究者探索的课题.在近日举办的Big Model Meetup第二期 ...

  7. 综述 | 三大路径,一文总览知识图谱融合预训练模型的研究进展

    当前,预训练模型已是AI领域较为成熟的一项技术,但由于基于神经网络架构的模型本身不具有常识能力,在一些涉及逻辑推理和认知的任务上力有不逮. 近年来,知识图谱越来越受到人们的关注,知识图谱旨在提供一种复 ...

  8. 中文任务全面超越BERT:百度正式发布NLP预训练模型ERNIE(附项目地址)

    来源:机器之心 本文约1700字,建议阅读7分钟. 百度提出知识增强的语义表示模型ERNIE,并发布了基于PaddlePaddle的开源代码与模型. [ 导读 ]近日,百度提出知识增强的语义表示模型 ...

  9. 复旦邱锡鹏超全NLP预训练模型综述论文:两张图带你梳理完整脉络

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 超全预训练语言模型概览,入门学习.搭建知识体系.找文献资料.找资源代码,这里有 N ...

  10. 如何获取高精度CV模型?快来试试百度EasyDL超大规模视觉预训练模型

    在深度学习领域,有一个名词正在被越来越频繁地得到关注:迁移学习.它相比效果表现好的监督学习来说,可以减去大量的枯燥标注过程,简单来说就是在大数据集训练的预训练模型上进行小数据集的迁移,以获得对新数据较 ...

最新文章

  1. OpenCV最经典的3种颜色空间(cv2.cvtColor)及互相转换
  2. 编译 ORB_SLAM2 (一)
  3. 没有找到mysql。sock_linux系统安装mysql数据库
  4. python 科学计算基础教程电子版-自学Python 编程基础、科学计算及数据分析
  5. python最难学的是什么_python是最难学的语言吗
  6. 关于《如何阅读一本书》
  7. 阿里云-AliRepo
  8. AttributeError: ‘float‘ object has no attribute ‘exp‘
  9. http://127.0.0.1:8000/accounts/login/总是重定向到http://127.0.0.1:8000/accounts/profile/并且报告404
  10. MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)
  11. vim文本编辑器的使用
  12. 「双11」哪些东西值得买?超值大礼包四舍五入等于不要钱
  13. 老将回归,英特尔的复兴之路
  14. 实践出真知--ZAC《网络营销实战密码》
  15. HTML如果属性值包含多个字母,HTML笔记
  16. 通过软件调整显示器的扩展、复制、显示器输入源
  17. Nginx的HTTP健康检测
  18. refresh()方法
  19. html特效字体在线生成,javascript实现鼠标点击生成文字特效
  20. java单击按钮实现窗口隐藏

热门文章

  1. IP地址的定义和含义
  2. 一个DataTable赋值给另一个DataTable的常用方法
  3. [转]Basic OCR in OpenCV
  4. 爬虫--Scrapy-CrawlSpider基于CrawlSpide的分布式爬虫
  5. Elasticsearch 之(33)document数据建模实战_文件搜索_嵌套关系_父子/祖孙关系数据...
  6. umask设置导致的weblogic中的应用上传的文件没有权限打开
  7. JSONArray ja = JSONArray.fromObject(list);//特殊类 用于将list转化为JSON 数据并返回 out.print(ja);...
  8. PaddlePaddle(8)—— 如何写好一篇高质量的精选项目
  9. C/C++编程语言中枚举类型(enum)介绍
  10. UITableViewCell高度自适应变化