知行编程网知行编程网  2022-03-06 19:00 知行编程网 隐藏边栏 |   抢沙发  168 
文章评分 0 次,平均分 0.0

韩国小哥哥用Pytorch实现谷歌最强NLP预训练模型BERT | 代码

乾明 编译整理自 GitHub 
量子位 报道 | QbitAI

新鲜代码,还热乎着呢。

前几天,谷歌发布了一篇论文,介绍了一个超强的NLP预训练模型BERT。

不仅在SQuAD中摧枯拉朽,全面超越人类表现,还在多种不同NLP测试中创出最佳成绩,包括包括将GLUE基准提升7.6%,将MultiNLI的准确率提提升5.6%。

更重要的是,论文中称,这个预训练语言模型可用于任何NLP任务,整个过程不需要对架构进行实质性的修改。

有人说这是自然语言理解领域几个月来最重大的事件,也有一些人认为这将改变NLP的研究模式。

当然,也有不少人心里长满了“草”,都想上手试试这个模型怎么样。

现在,方法来了。

一位名叫Junseong Kim韩国小哥哥,在GitHub上分享了自己用Pytorch实现BERT的过程与代码。

韩国小哥哥用Pytorch实现谷歌最强NLP预训练模型BERT | 代码

Junseong Kim表示,代码很简单,而且也易于理解,其中一些代码基于The Annotated Transformer,但尚未得到验证

The Annotated Transformer来自“Attention is All You Need”,是哈佛大学的一个研究团队对后者的解读与实现,链接在文末。

语言模型预训练

在谷歌的论文中,作者给出了两种针对语言模型进行预训练的任务,分别是Masked Language Model(论文中简称Masked LM)和预测下一句。

Masked LM

规则:

根据下面的子规则,随机改变15%的输入token:

1、80%的 token 将成为 [MASK] token。

2、10% 的 token 将成为 [RANDOM] token(另一个单词)。

3、10% 的 token 将维持不变,但是需要预测。

预测下一句

“当前的这个句子能够和下一句联系起来吗?”

理解两个文本句子之间的关系,这无法通过语言建模直接获取。

规则:

1、下一句有 50% 的概率是连续的句子。

2、下一句有 50% 的概率是无关的句子。

使用

注意:你的语料库中,一行中要准备两个句子,中间用 () 分隔符隔开。

1、根据自己的语料库构建vocab

python build_vocab.py -c data/corpus.small -o data/corpus.small.vocab
  -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


3、训练你自己的BERT模型

python train.py -d data/dataset.small -v data/corpus.small.vocab -o output/

GitHub传送门:

https://github.com/codertimo/BERT-pytorch


The Annotated Transformer传送门:

http://nlp.seas.harvard.edu/2018/04/03/attention.html

—  —

为您推荐

Github 2.2K星的超全PyTorch资源列表

来呀!AI喊你斗地主

谣言止于智者,AI帮你识别虚假新闻

一步一步,看图理解LSTM与GRU

【资源】MIT强化学习教程,了解一下

本篇文章来源于: 深度学习这件小事

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享