2

ドキュメントに10000語以上の長いテキスト分類タスクを実行しています。Bertを段落エンコーダとして使用し、段落の埋め込みをBiLSTMに段階的にフィードする予定です。ネットワークは以下の通りです。

入力: (batch_size, max_paragraph_len, max_tokens_per_para,embedding_size)

バート層: (max_paragraph_len,paragraph_embedding_size)

lstm レイヤー: ???

出力層: (batch_size,classification_size)

ケラスでそれを実装する方法は? 私はケラスの load_trained_model_from_checkpoint を使用してバートモデルをロードしています

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)],
        )
4

1 に答える 1

0

以下の記事で確認できると思います。著者は、事前トレーニング済みの 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)
于 2020-05-01T21:06:59.087 に答える