zoukankan      html  css  js  c++  java
  • bert4keras

     

    快速上手

    这里将提供一个快速上手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('
     ===== predicting =====
    ')
    print(model.predict([np.array([token_ids]), np.array([segment_ids])]))
    

    这个例子虽然简短,但事实上已经包含了在Keras中使用BERT模型的完整流程,事实上,对于已经比较熟悉Keras的用户来说,仅凭这个例子就可以自行搭建基于BERT的模型了,因为当model = build_transformer_model(config_path, checkpoint_path)这一步成功执行后,一个基于Keras的BERT模型就已经搭建完毕,剩下的都是Keras的使用了。

    从例子可以看到,其实代码分为两部分:第一部分是tokenizer的建立,bert4keras.tokenizers里边包含了对原版BERT的tokenizer的完整复现,同时还补充了一下常用的功能;第二部分就是BERT模型的建立,其主要函数是build_transformer_model,其定义如下:

    def build_transformer_model(
        config_path=None,  # 模型的配置文件(对应的文件为json格式)
        checkpoint_path=None,  # 模型的预训练权重(tensorflow的ckpt格式)
        model='bert',  # 模型的类型(bert、albert、albert_unshared、nezha、electra、gpt2_ml、t5)
        application='encoder',  # 模型的用途(encoder、lm、unilm)
        return_keras_model=True,  # 返回Keras模型,还是返回bert4keras的模型类
        **kwargs  # 其他传递参数
    ):
    

    build_transformer_model各参数的含义很难用几句话表达清楚,不过在这个10分钟教程里,这些细节并不是特别重要,所以暂时略去。学习一个框架最好的方法还是多看例子,所以还是恳请用户多参考github上提供的examples

    支持模型

    bert4keras支持搭建和加载权重的预训练模型还是比较多的,在同类程序中应该仅次于huggingface的transformers。目前支持的预训练模型包括:

    注意事项

    • 注1:brightmart版albert的开源时间早于Google版albert,这导致早期brightmart版albert的权重与Google版的不完全一致,换言之两者不能直接相互替换。为了减少代码冗余,bert4keras的0.2.4及后续版本均只支持加载Google版以brightmart版中带Google字眼的权重。如果要加载早期版本的权重,请用0.2.3版本,或者考虑作者转换过的albert_zh

    • 注2:下载下来的ELECTRA权重,如果没有json配置文件的话,参考这里自己改一个。

  • 相关阅读:
    两条斜线
    Cantor表
    城市网络
    一起来数二叉树吧
    牛客网音乐研究(枚举)
    删括号
    合并回文子串
    寻找道路
    EXTJS 4.0.2 XML数据
    extjs4.0.2a gridpanel看不到横向滚动条的一种原因
  • 原文地址:https://www.cnblogs.com/cx2016/p/13022865.html
Copyright © 2011-2022 走看看