keras implement of transformers for humans
See the code这是笔者重新实现的keras版的transformer模型库,致力于用尽可能清爽的代码来实现结合transformer和keras。
本项目的初衷是为了修改、定制上的方便,所以可能会频繁更新。
因此欢迎star,但不建议fork,因为你fork下来的版本可能很快就过期了。
目前已经实现:
安装稳定版:
pip install bert4keras
安装最新版:
pip install git+https://www.github.com/bojone/bert4keras.git
使用例子请参考examples目录。
之前基于keras-bert给出的例子,仍适用于本项目,只需要将bert_model的加载方式换成本项目的。
理论上兼容Python2和Python3,兼容tensorflow 1.14+和tensorflow 2.x,实验环境是Python 2.7、Tesorflow 1.14+以及Keras 2.3.1(已经在2.2.4、2.3.0、2.3.1、tf.keras下测试通过)。
为了获得最好的体验,建议你使用Tensorflow 1.14 + Keras 2.3.1组合。
关于环境组合
支持tf+keras和tf+tf.keras,后者需要提前传入环境变量TF_KERAS=1。
当使用tf+keras时,建议2.2.4 <= keras <= 2.3.1,以及 1.14 <= tf <= 2.2,不能使用tf 2.3+。
keras 2.4+可以用,但事实上keras 2.4.x基本上已经完全等价于tf.keras了,因此如果你要用keras 2.4+,倒不如直接用tf.keras。
当然,乐于贡献的朋友如果发现了某些bug的话,也欢迎指出修正甚至Pull Requests~
目前支持加载的权重:
注意事项
type_vocab_size字段)。residual_attention_scores参数来实现RealFormer,只需要在build_transformer_model中传入参数residual_attention_scores=True启用。PositionEmbedding引入层次分解,可以让BERT直接处理超长文本,在build_transformer_model中传入参数hierarchical_position=True启用。extend_with_parameter_wise_lr,可用于给每层设置不同的学习率。WebServing类,允许简单地将模型转换为Web接口,详情请参考该类的说明。Transformer类加入prefix参数;snippets.py引入to_array函数;AutoRegressiveDecoder修改rtype='logits'时的一个隐藏bug。Tokenizer原来的max_length参数重命名为maxlen,同时保留向后兼容性,建议大家用新参数名。RECOMPUTE=1启用。rematch方法。Tokenizer增加rematch方法,给出分词结果与原序列的映射关系。DataGenerator,允许传入迭代器时进行局部shuffle。key_size的选项。DataGenerator;优化模型写法。tokenizer.py更名为tokenizers.py。application='seq2seq'改名为application='unilm'。build_bert_model更名为build_transformer_model。models.py结构。bert.py更名为models.py。AutoRegressiveDecoder类,统一处理Seq2Seq的解码问题。load_vocab函数;将build_bert_model中的keep_words参数更名为keep_tokens,此处改动可能会对部分脚本产生影响。build_bert_model函数里加上model='nezha';此外原来albert的加载方式albert=True改为model='albert'。model.save保存模型结构,用load_model加载整个模型(只需要在load_model之前执行from bert4keras.layers import *,不需要额外写custom_objects)。TF_KERAS=1来切换tf.keras。load_pretrained_model函数里加上albert=True。之前一直用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的源码,在此衷心感谢大佬的无私奉献。
bert4torch:一个跟bert4keras风格很相似的pytorch-based的transofrmer库,使用pytorch的读者可以尝试。
@misc{bert4keras,
title={bert4keras},
author={Jianlin Su},
year={2020},
howpublished={\url{https://bert4keras.spaces.ac.cn}},
}
Overall
Maintained
Code review
PyPI
Latest release
Releases this year
53 followers · starred Sep 2021
6 followers · starred Oct 2024
104 followers · starred Oct 2021
59 followers · starred Oct 2019
keras implement of transformers for humans
See the code这是笔者重新实现的keras版的transformer模型库,致力于用尽可能清爽的代码来实现结合transformer和keras。
本项目的初衷是为了修改、定制上的方便,所以可能会频繁更新。
因此欢迎star,但不建议fork,因为你fork下来的版本可能很快就过期了。
目前已经实现:
安装稳定版:
pip install bert4keras
安装最新版:
pip install git+https://www.github.com/bojone/bert4keras.git
使用例子请参考examples目录。
之前基于keras-bert给出的例子,仍适用于本项目,只需要将bert_model的加载方式换成本项目的。
理论上兼容Python2和Python3,兼容tensorflow 1.14+和tensorflow 2.x,实验环境是Python 2.7、Tesorflow 1.14+以及Keras 2.3.1(已经在2.2.4、2.3.0、2.3.1、tf.keras下测试通过)。
为了获得最好的体验,建议你使用Tensorflow 1.14 + Keras 2.3.1组合。
关于环境组合
支持tf+keras和tf+tf.keras,后者需要提前传入环境变量TF_KERAS=1。
当使用tf+keras时,建议2.2.4 <= keras <= 2.3.1,以及 1.14 <= tf <= 2.2,不能使用tf 2.3+。
keras 2.4+可以用,但事实上keras 2.4.x基本上已经完全等价于tf.keras了,因此如果你要用keras 2.4+,倒不如直接用tf.keras。
当然,乐于贡献的朋友如果发现了某些bug的话,也欢迎指出修正甚至Pull Requests~
目前支持加载的权重:
注意事项
type_vocab_size字段)。residual_attention_scores参数来实现RealFormer,只需要在build_transformer_model中传入参数residual_attention_scores=True启用。PositionEmbedding引入层次分解,可以让BERT直接处理超长文本,在build_transformer_model中传入参数hierarchical_position=True启用。extend_with_parameter_wise_lr,可用于给每层设置不同的学习率。WebServing类,允许简单地将模型转换为Web接口,详情请参考该类的说明。Transformer类加入prefix参数;snippets.py引入to_array函数;AutoRegressiveDecoder修改rtype='logits'时的一个隐藏bug。Tokenizer原来的max_length参数重命名为maxlen,同时保留向后兼容性,建议大家用新参数名。RECOMPUTE=1启用。rematch方法。Tokenizer增加rematch方法,给出分词结果与原序列的映射关系。DataGenerator,允许传入迭代器时进行局部shuffle。key_size的选项。DataGenerator;优化模型写法。tokenizer.py更名为tokenizers.py。application='seq2seq'改名为application='unilm'。build_bert_model更名为build_transformer_model。models.py结构。bert.py更名为models.py。AutoRegressiveDecoder类,统一处理Seq2Seq的解码问题。load_vocab函数;将build_bert_model中的keep_words参数更名为keep_tokens,此处改动可能会对部分脚本产生影响。build_bert_model函数里加上model='nezha';此外原来albert的加载方式albert=True改为model='albert'。model.save保存模型结构,用load_model加载整个模型(只需要在load_model之前执行from bert4keras.layers import *,不需要额外写custom_objects)。TF_KERAS=1来切换tf.keras。load_pretrained_model函数里加上albert=True。之前一直用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的源码,在此衷心感谢大佬的无私奉献。
bert4torch:一个跟bert4keras风格很相似的pytorch-based的transofrmer库,使用pytorch的读者可以尝试。
@misc{bert4keras,
title={bert4keras},
author={Jianlin Su},
year={2020},
howpublished={\url{https://bert4keras.spaces.ac.cn}},
}
Overall
Maintained
Code review
PyPI
Latest release
Releases this year
53 followers · starred Sep 2021
6 followers · starred Oct 2024
104 followers · starred Oct 2021
59 followers · starred Oct 2019