BERTの学習済みモデルをkeras_bertを用いて再学習し.h5形式で保存しました。
また、.h5形式のモデルをロードし、入力した文章の[CLS]の特徴量を取得したいと考えています。
調べたところextract_embeddingsを使用し特徴量を取得しできそうな感じがしたのですが、ckpt形式で保存されていないといけないと言うことでした。
.h5形式で保存したモデルから特徴量を取得する方法がわからなくて困っています。
もしよろしければご教授いただけると幸いです。
python
1import numpy as np 2import os 3import csv 4import codecs 5from keras_bert import load_trained_model_from_checkpoint 6from keras_bert import Tokenizer 7from keras.optimizers import Adam 8from keras.models import Model, load_model 9from keras.layers import Dense 10from keras_bert.backend import keras 11from keras_bert.layers import TokenEmbedding, Extract 12from keras_pos_embd import PositionEmbedding 13from sklearn.metrics import classification_report 14from keras.utils import np_utils 15from keras_position_wise_feed_forward import FeedForward 16from keras_multi_head import MultiHeadAttention 17from keras_transformer import gelu 18from sklearn import metrics 19from keras_layer_normalization import LayerNormalization 20 21 22x_train = np.load('dataset'+os.sep+'train'+os.sep+'x_train.npy').tolist() 23y_train = np.load('dataset'+os.sep+'train'+os.sep+'y_train.npy') 24x_train =[np.array(x_train[0]),np.array(x_train[1])] 25 26BATCH_SIZE = 16 27EPOCHS = 1 28LR = 5e-5 29SEQ_LEN = 64 30BERT_DIM = 768 31 32pretrained_path = 'uncased_L-12_H-768_A-12' 33config_path = os.path.join(pretrained_path, 'bert_config.json') 34checkpoint_path = os.path.join(pretrained_path, 'bert_model.ckpt') 35vocab_path = os.path.join(pretrained_path, 'vocab.txt') 36 37bert = load_trained_model_from_checkpoint( 38 config_path, 39 checkpoint_path, 40 training=True, 41 trainable=True, 42 seq_len=SEQ_LEN 43) 44 45inputs = bert.get_layer('NSP-Dense').output 46output = Dense(units=1, activation='sigmoid')(inputs) 47model = Model(bert.inputs[:2], output) 48model.summary() 49 50# from keras_bert import AdamWarmup, calc_train_steps 51# total_steps, warmup_steps = calc_train_steps( 52# num_example=np.array(x_train).shape[0], 53# batch_size=BATCH_SIZE, 54# epochs=EPOCHS, 55# warmup_proportion=0.1, 56# ) 57 58model.compile( 59 optimizer=Adam(lr=0.001,beta_1=0.9,beta_2=0.999), 60 # optimizer = AdamWarmup(total_steps, warmup_steps, lr=1e-3, min_lr=1e-5), 61 loss='binary_crossentropy', 62 metrics=['acc'] 63) 64 65result = model.fit( 66 x_train, 67 y_train, 68 epochs=EPOCHS, 69 batch_size=BATCH_SIZE 70) 71 72print(result.history.keys()) 73import matplotlib.pyplot as plt 74plt.plot(range(1,EPOCHS+1), result.history['acc'], label='acc') 75plt.plot(range(1,EPOCHS+1), result.history['loss'], label='loss') 76plt.xlabel('epoch') 77plt.ylabel('acc') 78plt.legend() 79plt.savefig('plt.jpg') 80 81model.save('BERT_matching_model.h5') 82 83model_path = 'BERT_matching_model' 84 85texts = ['all work and no play', 'makes jack a dull boy'] 86from keras_bert import extract_embeddings 87embeddings = extract_embeddings(model_path, texts) 88print(len(embeddings[0])) 89
あなたの回答
tips
プレビュー