我正在做一个长文本分类任务,文档中有超过 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(使用前将#替换为@)