an elegant bert4keras
Project description
Our elegant implement of bert for keras
更清晰、更轻量级的keras版bert
个人博客:https://kexue.fm/
功能
目前已经实现:
加载bert/roberta/albert的预训练权重进行finetune;
实现语言模型、seq2seq所需要的attention mask;
丰富的examples;
从零预训练代码(支持TPU、多GPU,请看pretraining);
兼容keras、tf.keras
使用
使用例子请参考examples目录。
之前基于keras-bert给出的例子,仍适用于本项目,只需要将bert_model的加载方式换成本项目的。
理论上兼容Python2和Python3,实验环境是Python 2.7、Tesorflow 1.13+以及Keras 2.3.1(已经在2.2.4、2.3.0、2.3.1、tf.keras下测试通过)。
当然,乐于贡献的朋友如果发现了某些bug的话,也欢迎指出修正甚至Pull Requests~
权重
目前支持加载的权重:
Google原版bert: https://github.com/google-research/bert
徐亮版roberta: https://github.com/brightmart/roberta_zh
哈工大版roberta: https://github.com/ymcui/Chinese-BERT-wwm
Google原版albert[例子]: https://github.com/google-research/google-research/tree/master/albert
徐亮版albert: https://github.com/brightmart/albert_zh
华为的NEZHA: https://github.com/huawei-noah/Pretrained-Language-Model/tree/master/NEZHA
自研语言模型: https://github.com/ZhuiyiTechnology/pretrained-models
(注:徐亮版albert的开源时间早于Google版albert,这导致早期徐亮版albert的权重与Google版的不完全一致,换言之两者不能直接相互替换。为了减少代码冗余,bert4keras的0.2.4及后续版本均只支持加载Google版以徐亮版中带Google字眼的权重。如果要加载早期版本的权重,请用0.2.3版本。)
背景
之前一直用CyberZHG大佬的keras-bert,如果纯粹只是为了在keras下对bert进行调用和fine tune来说,keras-bert已经足够能让人满意了。
然而,如果想要在加载官方预训练权重的基础上,对bert的内部结构进行修改,那么keras-bert就比较难满足我们的需求了,因为keras-bert为了代码的复用性,几乎将每个小模块都封装为了一个单独的库,比如keras-bert依赖于keras-transformer,而keras-transformer依赖于keras-multi-head,keras-multi-head依赖于keras-self-attention,这样一重重依赖下去,改起来就相当头疼了。
所以,我决定重新写一个keras版的bert,争取在几个文件内把它完整地实现出来,减少这些依赖性,并且保留可以加载官方预训练权重的特性。
鸣谢
感谢CyberZHG大佬实现的keras-bert,本实现有不少地方参考了keras-bert的源码,在此衷心感谢大佬的无私奉献。
交流
QQ交流群:67729435,微信群请加机器人微信号spaces_ac_cn
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.