韩国小哥哥用Pytorch实现谷歌最强NLP预训练模型BERT | 代码
乾明 编译整理自 GitHub
量子位 报道 | 公众号 QbitAI
新鲜代码,还热乎着呢。
前几天,谷歌发布了一篇论文,介绍了一个超强的NLP预训练模型BERT。
不仅在SQuAD中摧枯拉朽,全面超越人类表现,还在多种不同NLP测试中创出最佳成绩,包括包括将GLUE基准提升7.6%,将MultiNLI的准确率提提升5.6%。
更重要的是,论文中称,这个预训练语言模型可用于任何NLP任务,整个过程不需要对架构进行实质性的修改。
有人说这是自然语言理解领域几个月来最重大的事件,也有一些人认为这将改变NLP的研究模式。
当然,也有不少人心里长满了“草”,都想上手试试这个模型怎么样。
现在,方法来了。
一位名叫Junseong Kim韩国小哥哥,在GitHub上分享了自己用Pytorch实现BERT的过程与代码。
Junseong Kim表示,代码很简单,而且也易于理解,其中一些代码基于The Annotated Transformer,但尚未得到验证。
The Annotated Transformer来自“Attention is All You Need”,是哈佛大学的一个研究团队对后者的解读与实现,链接在文末。
语言模型预训练
在谷歌的论文中,作者给出了两种针对语言模型进行预训练的任务,分别是Masked Language Model(论文中简称Masked LM)和预测下一句。
Masked LM
Input Sequence : The man went to [MASK] store with [MASK] dogTarget Sequence : the his
规则:
根据下面的子规则,随机改变15%的输入token:
1、80%的 token 将成为 [MASK] token。
2、10% 的 token 将成为 [RANDOM] token(另一个单词)。
3、10% 的 token 将维持不变,但是需要预测。
预测下一句
Input : [CLS] the man went to the store [SEP] he bought a gallon of milk [SEP]Label : Is Next
Input = [CLS] the man heading to the store [SEP] penguin [MASK] are flight ##less birds [SEP]Label = NotNext
“当前的这个句子能够和下一句联系起来吗?”
理解两个文本句子之间的关系,这无法通过语言建模直接获取。
规则:
1、下一句有 50% 的概率是连续的句子。
2、下一句有 50% 的概率是无关的句子。
使用
注意:你的语料库中,一行中要准备两个句子,中间用 (\t) 分隔符隔开。
Welcome to the \t the jungle \nI can stay \t here all night \n
1、根据自己的语料库构建vocab
python build_vocab.py -c data/corpus.small -o data/corpus.small.vocab
usage: build_vocab.py [-h] -c CORPUS_PATH -o OUTPUT_PATH [-s VOCAB_SIZE] [-e ENCODING] [-m MIN_FREQ]
optional arguments: -h, --help show this help message and exit -c CORPUS_PATH, --corpus_path CORPUS_PATH -o OUTPUT_PATH, --output_path OUTPUT_PATH -s VOCAB_SIZE, --vocab_size VOCAB_SIZE -e ENCODING, --encoding ENCODING -m MIN_FREQ, --min_freq MIN_FREQ
2、用自己的语料库构建BERT训练数据集
python build_dataset.py -d data/corpus.small -v data/corpus.small.vocab -o data/dataset.small
usage: build_dataset.py [-h] -v VOCAB_PATH -c CORPUS_PATH [-e ENCODING] -o OUTPUT_PATH
optional arguments: -h, --help show this help message and exit -v VOCAB_PATH, --vocab_path VOCAB_PATH -c CORPUS_PATH, --corpus_path CORPUS_PATH -e ENCODING, --encoding ENCODING -o OUTPUT_PATH, --output_path OUTPUT_PATH
3训练你自己的BERT模型
python train.py -d data/dataset.small -v data/corpus.small.vocab -o output/
usage: train.py [-h] -d TRAIN_DATASET [-t TEST_DATASET] -v VOCAB_PATH -o OUTPUT_DIR [-hs HIDDEN] [-n LAYERS] [-a ATTN_HEADS] [-s SEQ_LEN] [-b BATCH_SIZE] [-e EPOCHS]
optional arguments: -h, --help show this help message and exit -d TRAIN_DATASET, --train_dataset TRAIN_DATASET -t TEST_DATASET, --test_dataset TEST_DATASET -v VOCAB_PATH, --vocab_path VOCAB_PATH -o OUTPUT_DIR, --output_dir OUTPUT_DIR -hs HIDDEN, --hidden HIDDEN -n LAYERS, --layers LAYERS -a ATTN_HEADS, --attn_heads ATTN_HEADS -s SEQ_LEN, --seq_len SEQ_LEN -b BATCH_SIZE, --batch_size BATCH_SIZE -e EPOCHS, --epochs EPOCHS
GitHub传送门:
https://github.com/codertimo/BERT-pytorch
The Annotated Transformer传送门:
http://nlp.seas.harvard.edu/2018/04/03/attention.html
— 完 —
加入社群
量子位AI社群开始招募啦,欢迎对AI感兴趣的同学,在量子位公众号(QbitAI)对话界面回复关键字“交流群”,获取入群方式;
此外,量子位专业细分群(自动驾驶、CV、NLP、机器学习等)正在招募,面向正在从事相关领域的工程师及研究人员。
进专业群请在量子位公众号(QbitAI)对话界面回复关键字“专业群”,获取入群方式。(专业群审核较严,敬请谅解)
诚挚招聘
量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。
量子位 QbitAI · 头条号签约作者
վ'ᴗ' ի 追踪AI技术和产品新动态
韩国小哥哥用Pytorch实现谷歌最强NLP预训练模型BERT | 代码相关推荐
- 谷歌最强NLP模型BERT官方代码来了!GitHub一天3000星
新智元报道 来源:GitHub 作者:Google Research 编辑:肖琴 [新智元导读]谷歌AI团队终于开源了最强NLP模型BERT的代码和预训练模型.从论文发布以来,BERT在NLP业内引起 ...
- 谷歌最强NLP模型BERT如约开源,12小时GitHub标星破1500,即将支持中文
夏乙 晓查 乾明 问耕 发自 凹非寺 量子位 报道 | 公众号 QbitAI BERT终于来了!今天,谷歌研究团队终于在GitHub上发布了万众期待的BERT. 代码放出不到一天,就已经在GitHub ...
- 谷歌最强 NLP 模型 BERT 解读
谷歌最强 NLP 模型 BERT 解读 https://mp.weixin.qq.com/s/N7Qp_Fx0rAFbvrpLSETi8w 本文是追一科技潘晟锋基于谷歌论文为 AI 科技评论提供的解读 ...
- 谷歌更强 NLP 模型 XLNet 开源:20 项任务全面碾压 BERT!
谷歌更强 NLP 模型 XLNet 开源:20 项任务全面碾压 BERT! 11 月份,谷歌研究团队在 GitHub 上发布了万众期待的 BERT,它不仅在 11 项 NLP 测试中刷新了最高成绩,甚 ...
- 完胜 BERT,谷歌最佳 NLP 预训练模型开源
2020-03-16 19:35 导语:小模型高精度,效率显著优于 MLM. 按:近日,谷歌宣布将 AI 语言模型 ELECTRA 作为 TensorFlow 之上的开源模型发布.该方法用到了一种称为 ...
- JAVA训练nlp模型,完胜 BERT,谷歌最佳 NLP 预训练模型开源
雷锋网 AI 源创评论按:近日,谷歌宣布将 AI 语言模型 ELECTRA 作为 TensorFlow 之上的开源模型发布.该方法用到了一种称为替换令牌检测(RTD)的新预训练任务,使其能够在从所有输 ...
- 详解谷歌最强NLP模型BERT(理论+实战)
作者:李理,环信人工智能研发中心vp,十多年自然语言处理和人工智能研发经验.主持研发过多款智能硬件的问答和对话系统,负责环信中文语义分析开放平台和环信智能机器人的设计与研发. 本文是作者正在编写的&l ...
- pytorch 之 保存不同形式的预训练模型
注意,后缀.pt和.pth似乎没什么区别 保存时即可以保存整个模型也可以只保存参数,还可以构建新字典重新保存,这也就对应了在读取时需要做不同的处理,我们在加载的时候load_state_dict函数的 ...
- 完胜BERT!谷歌NLP预训练利器:小模型也有高精度,单个GPU就能训练 | 代码开源...
十三 发自 凹非寺 量子位 报道 | 公众号 QbitAI 这款NLP预训练模型,你值得拥有. 它叫ELECTRA,来自谷歌AI,不仅拥有BERT的优势,效率还比它高. ELECTRA是一种新预训练方 ...
最新文章
- php中去空函数trim,PHP中trim()函数简单使用指南
- Android SDK Manager无法下载包的问题
- 年入近1亿,曾被20家VC拒绝,如今电商是他大客户,数据处处有黄金
- 给 IConfiguration 写一个 GetAppSetting 扩展方法
- 使用Sencha Touch加载本地Json数据
- javascript 简易时钟
- MATLAB中的fopen、fclose、fprintf、fscanf、fread、fwrite
- Android热修复升级探索——代码修复冷启动方案 1
- priority_queue C++
- CorelDRAWX4的VBA插件开发(八)更改尺寸与移动
- pygame下载报错
- 如何解决使用PCS7时报警无法确认的问题?
- PHP网站接入QQ互联实现QQ登录获取用户信息功能,超级简单,三个文件就搞定,无需费力地去了解官方提供的一大堆Demo文件
- u-boot-2010.09-for-tiny6410-v1.0支持sd卡SDHC卡启动
- 2020.8.25丨微生物基因组重测序流程梳理
- Windows+GCC得到各种格式的文件正文(office文件,PDF,邮件,html,zip等)
- 剧场版复活的f 剧情
- STM32 FSMC TFT LCD
- 一节前端课:html+css+js做个计算器
- 全球及中国带棱镜的全站仪行业发展动态及十四五运营前景咨询报告2022-2027年
热门文章
- 2016计算机应用论基础,2016-2017-2计算机应用基础理论复习题.docx
- android自定义进度条百分比跟着走,Android studio圆形进度条 百分数跟随变化
- go for 循环遍历数组并排序_Go语言基础教程:for循环语句
- 计算机技术学 试卷,计算机技术及科学技术学院试卷模板A.doc
- python 逐行读取文件_Python fileinput模块:逐行读取多个文件
- java 文件无法下载_无法从Java中的URL下载文件
- 北航计算机和天大建筑,天津大学好厉害,原来北航、北科大、北邮,都是天大分出去的......
- CSS中Position定位属性的使用
- android退出图标按钮,android-setCloseButtonIcon(位图可绘制)不适用于...
- Javascript插入排序