跳转至

欢迎使用bert4keras

bert4keras是一个基于keras的预训练模型加载框架,目前支持多种预训练模型(BERT、ALBERT、RoBERTa、ALBERT、NEZHA、GPT2、T5等),并支持多种环境(python 2.7、python 3.x)和后端(keras、tf.keras、tf 1.x、tf 2.x)。

bert4keras秉承keras的人性化理念,在框架上充分借鉴了keras的设计,尽量做到优雅、简练而不简单。

项目地址https://github.com/bojone/bert4keras

简单例子

下面是一个调用bert base模型来编码句子的简单例子:

from bert4keras.models import build_transformer_model
from bert4keras.tokenizers import Tokenizer
import numpy as np

config_path = '/root/kg/bert/chinese_L-12_H-768_A-12/bert_config.json'
checkpoint_path = '/root/kg/bert/chinese_L-12_H-768_A-12/bert_model.ckpt'
dict_path = '/root/kg/bert/chinese_L-12_H-768_A-12/vocab.txt'

tokenizer = Tokenizer(dict_path, do_lower_case=True)  # 建立分词器
model = build_transformer_model(config_path, checkpoint_path)  # 建立模型,加载权重

# 编码测试
token_ids, segment_ids = tokenizer.encode(u'语言模型')

print('\n ===== predicting =====\n')
print(model.predict([np.array([token_ids]), np.array([segment_ids])]))

更多例子可以前往Github的examples目录查看。

设计原则

bert4keras旨在为keras用户提供一个快速加载常见预训练语言模型的方法,它的使用难易程度取决于你对keras的熟悉程度。幸运的是,keras是当前最易用的深度学习框架之一,这意味着我们的上手时间会相当短。

但是,这不意味着使用bert4keras不需要任何基础。如果要更好地使用bert4keras,你需要一定的NLP基础,并且对keras已经有一定的了解。还是那句话,bert4keras仅仅是为keras提供一个快速加载预训练模型的方法,它并不是一 个傻瓜式工具,也不是“手把手培训班”,它仅仅希望在不丧失灵活性的基础上简化某些操作。

最后,温馨提示:你的很多关于bert4keras的疑惑,很可能只是因为你还没有入门好keras,基础很重要,不要急于求成~

开发背景

早期一直用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,争取在几个文件内把它完整地实现出来,减少这些依赖性,并且保留可以加载官方预训练权重的特性。随着后来的不断改进,它的支持已经不限于bert模型,目前已经支持比较多的transformer系列模型。

联系交流

QQ交流群:67729435,微信群请加机器人微信号spaces_ac_cn,同时欢迎访问作者博客:https://kexue.fm