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,一经查实,立即删除!

相关文章

python开发系统架构设计师_系统架构设计师在线题库

该课程包含了三大重磅性课程,学员 可以分三个阶段进行学习,一步一个脚印深入巩固SpringBoot知识体系栈、消息中间件RabbitMQ以及分布式锁的实现方式1、SpringBoot实战知识体系~从菜鸟到小牛 本课程可以让学员一步一个脚印学习当前微服务SpringBoot项目开…

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

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

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

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

pythoncsv文件的操作_python操作CSV文件

概念:CSV是逗号分隔值或者字符分割值,其文件以纯文本形式存储表格数据。CSV文件可以用文本文件或者转换成EXCEL(直接用EXCEL也可以,但是可能会有一些问题)打开。因此更适合通过CSV文件进行程序之间转移表格数据。应用场景:需要进行…

欧姆龙变频器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等)功能相同的多互联网线路负载均衡设备。负载均衡,相信各位是了解的。主要包括两大类,一类是应用负载均衡,…

hive 和mysql配置_Hive学习和配置Mysql

1.Hive简介 起源自facebook由Jeff Hammerbacher领导的团队 构建在Hadoop上的数据仓库框架 设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据 2008年facebook把hive项目贡献给Apache Hive的组件与体系架构 用户接口:shell, thrift, web等…

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…

java调用hbase_Java调用Hbase

1、java调用hbase时(hbase0.96)报以下错误:Exception in thread "main" java.io.IOException: java.lang.reflect.InvocationTargetExceptionat org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:383)at org…

opython3l_python之 数据类型判定与类型转换

一、 判断数据类型0、type(x)type()可以接收任何东西作为参数――并返回它的数据类型。整型、字符串、列表、字典、元组、函数、类、模块,甚至类型对象都可以作为参数被 type 函数接受。>>> type(1)>>> li []>>> type(li)>>> …

java编写服务器_java编写一个简单的回射服务器

全部代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class Client {// 搭建客户端public static void main(String[] args) throws…

python filter函数_python基础——filter函数

python基础——filter函数Python内建的filter()函数用于过滤序列。和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。例如&am…

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

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

java jar 配置文件路径_java jar 配置文件的相对路径问题

无论是在Windows还是Linux操作系统下,绝对路径和相对路径都是很重要的概念,也是许多初学者迷惑的地方,下面我们就这两个概念进行介绍。  绝对路径:由根目录‘/’开始写起的文件名或者目录名称,例如/home/student;  相…

python曲面图颜色渐变方向_matplotlib三维曲面的透明度和颜色渐变?

colset self._shade_colors(color, normals)虽然理论上一个平面的法线都是相同的,但实际上由于浮点运算。这些微小的变化被放大了normalization因为这个{a3}位于0和1之间。在因此,所有完全平面的曲面都容易出现这种着色缺陷。在当颜色是统一的(例如colo…

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

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

python os.walk_Python os.walk() 简介

os.walk目录遍历每个月都有那么几天想划水,又到划水的日子了,今天分享的是刚在处理遍历目录相关用到的相关方法。os.walkos.walk的参数如下:os.walk(top, topdownTrue, οnerrοrNone, followlinksFalse)其中:top是要遍历的目录。topdown是代…

python pdf转word 表格_太赞了!Pdf转Word,我用Python 轻松搞定表格和水印!

原标题:太赞了!Pdf转Word,我用Python 轻松搞定表格和水印!继上一次为大家推出了将pdf转word之后(卧槽!Pdf转Word用Python轻松搞定!),引起了大家的热烈讨论,我也总结了大家的一些意见…