如何在keras中使用Bert作为长文本分类中的段落编码器来实现网络?

2024-03-29

我正在做一个长文本分类任务,文档中有超过 10000 个单词,我计划使用 Bert 作为段落编码器,然后将段落的嵌入逐步输入 BiLSTM。 网络如下:

输入:(batch_size、max_paragraph_len、max_tokens_per_para、embedding_size)

bert层:(max_paragraph_len,paragraph_embedding_size)

lstm层:???

输出层:(batch_size,classification_size)

如何用keras实现呢? 我正在使用keras的load_trained_model_from_checkpoint来加载bert模型

bert_model = load_trained_model_from_checkpoint(
        config_path,
        model_path,
        training=False,
        use_adapter=True,
        trainable=['Encoder-{}-MultiHeadSelfAttention-Adapter'.format(i + 1) for i in range(layer_num)] +
            ['Encoder-{}-FeedForward-Adapter'.format(i + 1) for i in range(layer_num)] +
            ['Encoder-{}-MultiHeadSelfAttention-Norm'.format(i + 1) for i in range(layer_num)] +
            ['Encoder-{}-FeedForward-Norm'.format(i + 1) for i in range(layer_num)],
        )

我相信你可以检查以下内容article https://medium.com/@brn.pistone/bert-fine-tuning-for-tensorflow-2-0-with-keras-api-9913fc1348f6。作者展示了如何加载预训练的 BERT 模型,将其嵌入 Keras 层并将其用于定制的深度神经网络。 首先安装 google-research/bert 的 TensorFlow 2.0 Keras 实现:

pip install bert-for-tf2

然后运行:

import bert
import os

def createBertLayer():
    global bert_layer

    bertDir = os.path.join(modelBertDir, "multi_cased_L-12_H-768_A-12")

    bert_params = bert.params_from_pretrained_ckpt(bertDir)

    bert_layer = bert.BertModelLayer.from_params(bert_params, name="bert")

    bert_layer.apply_adapter_freeze()

def loadBertCheckpoint():

    modelsFolder = os.path.join(modelBertDir, "multi_cased_L-12_H-768_A-12")
    checkpointName = os.path.join(modelsFolder, "bert_model.ckpt")

    bert.load_stock_weights(bert_layer, checkpointName)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在keras中使用Bert作为长文本分类中的段落编码器来实现网络? 的相关文章

随机推荐