bert 中文 代码 谷歌_ELECTRA中文预训练模型开源,110个参数,性能媲美BERT

感谢参考原文-http://bjbsair.com/2020-03-27/tech-info/7050/ 在去年11月份,NLP大神Manning联合谷歌做的ELECTRA一经发布,迅速火爆整个NLP圈,其中ELECTRA-small模型参数量仅为 BERT-base模型的1/10,性能却依然能与BERT、RoBERTa等模型相媲美。

在前不久,谷歌终于开源了ELECTRA,并发布了预训练模型,这对于缺大算力的高校和企业,简直是一大福音。

d706bbf96e1f504d7cbdf5f34ed54b51.png

然而,其发布的预训练模型只是针对英语,却非如BERT那样是多语言版本。对于其他语言(例如中文)的研究者来说,则非常遗憾。

b6e6bea31421817376c07edf39ffd3cd.png

针对这一问题,今天哈工大讯飞联合实验室(HFL)基于ELECTRA开源代码,发布了中文版的 ELECTRA 预训练模型。

1、ELECTRA

26aff24e90bfa5bbee8f7a0561be7fac.png

ELECTRA预训练模型的作者是斯坦福SAIL实验室Manning组和谷歌大脑研究团队,初次出现是在2019年北京智源大会上面。作为一种新的文本预训练模型,ELECTRA 新颖的设计思路、更少的计算资源消耗和更少的参数,迅速引起了大批关注者。特别是在去年 11 月 ICLR 2020 论文接收出炉后,曾引起NLP圈内不小的轰动。

0f658153a5a563864134ead5e13814a2.png

论文链接:

https://openreview.net/forum?id=r1xMH1BtvB

论文中这张图能够说明一切问题:

ab77ae68d80bda45ce6cde7f731e1ac1.png

图注:右图是左图放大的结果。

如上图所示,ELECTRA模型能够在训练步长更少的前提下得到了比其他预训练模型更好的效果。同样,在模型大小、数据和计算相同的情况下,ELECTRA的性能明显优于基于MLM的方法,如BERT和XLNet。

所以,ELECTRA 与现有的生成式的语言表示学习方法相比,前者具有更高的计算效率和更少的参数(ELECTRA-small的参数量仅为BERT-base的 1/10)。

ELECTRA能够取得如此优异结果,基于其新颖的预训练框架,其中包含两个部分:Generator和Discriminator。

0e1c63e03ae24719fd268ad359c96c73.png
  • Generator: 一个小的MLM,在[MASK]的位置预测原来的词。Generator将用来把输入文本做部分词的替换。
  • Discriminator: 判断输入句子中的每个词是否被替换,即使用Replaced Token Detection (RTD)预训练任务,取代了BERT原始的Masked Language Model (MLM)。需要注意的是这里并没有使用Next Sentence Prediction (NSP)任务。

在预训练阶段结束之后,只使用Discriminator作为下游任务精调的基模型。

换句话说,作者们把CV领域的GAN运用到了自然语言处理。

值得注意的是,尽管与GAN的训练目标相似,但仍存在一些关键差异。首先,如果生成器碰巧生成了正确的token,则该token被视为“真实”而不是“伪造”;所以模型能够适度改善下游任务的结果。更重要的是,生成器使用最大似然来训练,而不是通过对抗性训练来欺骗判别器。

2、中文ELECTRA预训练模型

目前已有的开源 ELECTRA 预训练模型只是英文的预训练模型。但世界上还有许多其他语言(例如中文)研究的学者,他们需要与其相应的语言预训练模型。

然而,谷歌官方除了BERT、RoBERTa等预训练模型有多语言版本外,其他例如XLNet、T5都没有相应的多语言版本,只有英文。其中原因在于相比于只在英语上做预训练,多语言的预训练需要收集相应语料,需要调配不同语言语料的比例等,比较麻烦。因此大概率上,ELECTRA 也不会出中文版或多语言版的预训练模型。

而另一方面,作为中文社区,我们国人自己对如何做中文的预训练则更为了解,我们自己来做相应的预训练可能会比谷歌官方来做会更好。

由哈工大讯飞联合实验室资深级研究员、研究主管崔一鸣所带领的团队之前曾做过系列类似的开源工作,即基于开源预训练代码,加上中文数据集来训练中文版预训练模型。例如中文版的系列BERT模型、中文版XLNet等,在GitHub上开源后反响不错,在许多中文评测任务中也曾有不少队伍使用他们开源的预训练模型进行改进。

0fe861c7e96b5590ffd0f964878745b9.png

开源地址:https://github.com/ymcui/Chinese-BERT-wwm

6350e4119594a252d31393c0fec72b15.png

开源地址:https://github.com/ymcui/Chinese-XLNet

在谷歌开源ELECTRA之后,崔一鸣等人再次推出中文版 ELECTRA。

训练数据集,仍和之前训练BERT系列模型所用数据是一致的,主要来自大规模中文维基及通用文本(中文网页爬取和清洗),总token达到5.4B。词表方面沿用了谷歌原版BERT的WordPiece词表,包含21128个token。

在本次的开源中,崔一鸣等人只发布了ELECTRA-base 和ELECTRA-small 两个模型。据崔一鸣表示,large版本由于参数较多,超参设置比较困难,因此模型发布会相应延后。

已发布的两个版本各自训练了大约7天时间,由于small版本的参数仅为base版本的1/10,在训练中,崔一鸣等人将其batch调为1024(是base的4倍)。具体细节和超参如下(未提及的参数保持默认):

  • ELECTRA-base:12层,隐层768,12个注意力头,学习率2e-4,batch256,最大长度512,训练1M步
  • ELECTRA-small:12层,隐层256,4个注意力头,学习率5e-4,batch1024,最大长度512,训练1M步

35fe09740a1cc4b230e2aa864065af42.png

ELECTRA-small 仅 46 M。

在效果上,崔一鸣等人将之与他们之前做的系列中文版预训练模型进行了效果对比。

对比模型包括:ELECTRA-small/base、BERT-base、BERT-wwm、BERT-wwm-ext、RoBERTa-wwm-ext、RBT3。

对比任务有六个:

  • CMRC 2018 (Cui et al., 2019):篇章片段抽取型阅读理解(简体中文)
  • DRCD (Shao et al., 2018):篇章片段抽取型阅读理解(繁体中文)
  • XNLI (Conneau et al., 2018):自然语言推断(三分类)
  • ChnSentiCorp:情感分析(二分类)
  • LCQMC (Liu et al., 2018):句对匹配(二分类)
  • BQ Corpus (Chen et al., 2018):句对匹配(二分类)

在下游任务精调中,ELECTRA-small/base模型的学习率设为原论文默认的3e-4和1e-4。值得注意的是,这里的精调并没有针对任何任务进行参数精调。为了保证结果的可靠性,对于同一模型,他们使用不同随机种子训练10遍,汇报模型性能的最大值和平均值(括号内为平均值)。

效果如下:

简体中文阅读理解:CMRC 2018(评价指标为:EM / F1)

b784d0de1cd06ebfc4a3347d4391cea0.png

繁体中文阅读理解:DRCD(评价指标为:EM / F1)

361bb3843f9366a71db7ee2b6a7cebc8.png

自然语言推断:XNLI(评价指标为:Accuracy)

cd770bc83c6cfcec7447e22ad048a55b.png

情感分析:ChnSentiCorp(评价指标为:Accuracy)

377d49314d5de60246abfabfd648a239.png

句对分类:LCQMC(评价指标为:Accuracy)

373aa209e826035c33e2386fdbb516be.png

句对分类:BQ Corpus( 评价指标为:Accuracy)

d0aa058943da81863f5693526938f1f9.png

从以上的结果可以看出,对于ELECTRA-small模型,其效果在多数任务上显著超过3层RoBERTa效果(RBT3),甚至是接近BERT-base的效果,而在参数量上只有BERT-base模型的1/10。对于ELECTRA-base模型来说,在多数任务上超过了BERT-base甚至是RoBERTa-wwm-ext的效果。

其具体使用,可以查看Github项目:

https://github.com/ymcui/Chinese-ELECTRA

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561106.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

监督学习和无监督学习_机器学习的要素是什么? 有监督学习和无监督学习两大类...

如前所述,机器学习是AI的一个子集,通常分为两大类:有监督学习和无监督学习。监督学习教学AI系统的常用技术是通过使用大量带标签的示例来训练它们。这些机器学习系统被馈入大量数据,这些数据已被注释以突出显示感兴趣的功能。这些…

如何用python计算levenshteindistance_Levenshtein计算相似度距离

使用Levenshtein计算相似度距离,装下模块,调用下函数就好。拿idf还得自己去算权重,而且不一定准确度高,一般做idf还得做词性归一化,把动词形容词什么全部转成名词,很麻烦。Levenshtein.distance(str1,str2)…

欧姆龙变频器MX2参数_第442期丨【源程序】基于三菱西门子欧姆龙松下PLC实现喷水池控制系统;欧姆龙PLC编程软件更新步骤...

论坛周刊1 Dec 2019本期论坛周刊精彩内容:1、【源程序】基于三菱\西门子\欧姆龙\松下PLC实现喷水池控制系统2、欧姆龙PLC编程软件更新步骤3、RSLinx Classic EntherNet/IP配置4、这个运动控制算厉害么5、施耐德、ABB、西门子接连登门拜访往期精选▼第441期丨施耐德电…

linux两台服务器 同一个地址_【网工玩Linux】搭建开源多运营商(ISP)链路负载均衡器...

今天,主要想讲一下如何利用Linux内核功能,搭建与市面上十几万的商用产品(F5、RADWARE等)功能相同的多互联网线路负载均衡设备。负载均衡,相信各位是了解的。主要包括两大类,一类是应用负载均衡,…

python拦截修改数据包_会Python?那么你一定要试一试mitmproxy

mitmproxy 是一款工具,也可以说是 python 的一个包,使用这个工具可以在命令行上进行抓包(现在也可以在web页面上查看上抓的数据包了),还可以对所抓到的包进行脚本处理,非常有用。和 fiddler 或charles 等接口抓包工具相比&#xf…

java sha1_java使用SHA1加密算法详解

java使用SHA1加密算法程序源码://下面四个import放在类名前面 包名后面import java.io.UnsupportedEncodingException;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;import java.util.Arrays;public static String getSha1(S…

小程序 wxml selectable_微信小程序 抽象节点

抽象节点这个特性自小程序基础库版本 1.9.6 开始支持。在组件中使用抽象节点有时,自定义组件模板中的一些节点,其对应的自定义组件不是由自定义组件本身确定的,而是自定义组件的调用者确定的。这时可以把这个节点声明为“抽象节点”。例如&am…

queue double java_一文弄懂java中的Queue家族

java中Queue家族简介简介java中Collection集合有三大家族List,Set和Queue。当然Map也算是一种集合类,但Map并不继承Collection接口。List,Set在我们的工作中会经常使用,通常用来存储结果数据,而Queue由于它的特殊性&am…

semantic ui中文文档_Vuetify-广受欢迎的Material风格的开源UI框架

全世界范围内广受欢迎的 Vue UI 框架,一个非常精致的 Material Design UI 套件。 Material Design 风格 UI 框架Vuetify 是一个基于 Vue.js 精心打造 UI 组件库,整套 UI 设计为 Material 风格。能够让没有任何设计技能的开发者创造出时尚的 Material 风格…

提示tun虚拟网卡没有安装_Win10家庭版通过Hyper-V安装Centos7+Python3.7过程总结

Win10专业版自带有虚拟机Hyper-V, 只需要在控制面板--程序中将其添加到应用就可使用,非常方便,但我电脑预装的是Win10家庭版,没有这个工具,但可以通过以下方法把它安装上:新建文件Hyper-V.cmd,文件内容&…

nginx 带宽_谈谈Nginx和LVS各自的优缺点以及使用

在最开始呢,咱们先说一下什么叫负载均衡,负载均衡呢,就是将一批请求,根据请求的内容,分发到不同的后端去进行相应的处理,从而提供负载分担,主备切换等功能。对于不同的负载均衡软件,…

wordpress 自定义分类url 重写_WordPress导航主题-WebStack导航主题

8月份写了一个导航主题,陆陆续续更新了十几版,功能自认已经很完善了,知乎也注册很久了,在这水片文章。首页截图预览地址一为忆 - 收集国内外优秀设计网站、UI设计资源网站、灵感创意网站、素材资源网站,定时更新分享优…

sql跨表查询_白话django之ORM的查询语句

教程源码:z991/django_turital在日常开发中,数据库的增删改查(CDUR)中,查询需求偏多,所以查询的语法比增删改操作多得多,尤其是跨表关联查询,可以让代码精简很多年。直接上代码吧&am…

看不懂论文代码怎么办_学位论文中的公式排版(制表位+mathtype+域)

写在前面为什么把公式排版单独拉出来写一篇文章呢?因为公式排版实在是太难了。公式居中标号右对齐,简直反人类好么。在学校期间一直寻找方便的公式排版自动编号方法,但搜索出来的大多只是用到了制表位,公式标号还要自己敲。最后毕…

利用trunk实现vlan内通信_实现不同VLAN间通信——单臂路由

单臂路由是一种实现不同VLAN间通信的技术,其方法是在虚拟机内接口上配置虚拟子接口。该技术是一种应急技术,仅仅用于网络预算不足,无力购买三层交换机,或者网络规模很小的情况下使用。一、实验路由器只需要一个端口和交换机(二层)…

java dispatchevent_java事件处理机制

java中的事件机制的参与者有3种角色:1.event object:就是事件产生时具体的“事件”,用于listener的相应的方法之中,作为参数,一般存在与listerner的方法之中2.event source:具体的接受事件的实体&#xff0…

java中的action是指什么_Struts2【开发Action】知识要点

前言前面Struts博文基本把Struts的配置信息讲解完了.....本博文主要讲解Struts对数据的处理Action开发的三种方式在第一次我们写开发步骤的时候,我们写的Action是继承着ActionSupport类的...为啥我们继承了ActionSupport类呢?下面我就会讲解到继承Action…

hql 查询条件 set集合_Redis从入门到深入-Sorted_set的value

1. sorted_set 类型新的存储需求,数据排序有利于数据的有效展示,需要提供一种可以根据自身特征进行排序的方式需要的存储结构:新的存储模型,可以保存可排序的数据sorted_set类型:在set的存储结构基础上添加可排序字段2…

pdm生成java_PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换

本篇文章主要介绍了PowerDesigner通过SQL语句生成PDM文件并将name和comment进行互相转换 超详细过程(图文),具有一定的参考价值,感兴趣的小伙伴们可以参考一下1.软件准备软件:Navicat 11.1,Powerdesigner 152.安装步骤第一步&…

java里面如何加入高级的东西_如何成为一名Java高级架构师

近些年来互联网快速发展,现阶段的数据量和高并发的诉求,引起了不少传统的技术人员的力不从心,企业愈发关注到了系统架构的重要性,既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的领导型人物——Java架构师应…