如何解决我无法通过 keras_bert 运行 Bert+CRF 模型
from keras.layers import *
from keras.models import *
from keras.optimizers import *
from keras_bert import load_trained_model_from_checkpoint
from keras_contrib.layers import CRF
from keras_contrib.losses import crf_loss
from keras_contrib.metrics import crf_accuracy
import numpy as np
import json
from param import Parameters as pm
event_type="chineseSeg"
class BertBilstmCRF:
def __init__(self,max_seq_length,lstm_dim):
self.max_seq_length = max_seq_length
self.lstmDim = lstm_dim
self.label =pm.state_list
# 模型
def create_model(self):
model_path = "../../bert/chinese_L-12_H-768_A-12/"
bert = load_trained_model_from_checkpoint(
model_path + "bert_config.json",model_path + "bert_model.ckpt",seq_len=self.max_seq_length
)
# make bert layer trainable
for layer in bert.layers:
layer.trainable = True
x1 = Input(shape=(None,))
x2 = Input(shape=(None,))
bert_out = bert([x1,x2])
crf_out = CRF(len(self.label),sparse_target=True)(bert_out)
model = Model([x1,x2],crf_out)
print(bert_out.shape) #(None,128,768)
model.summary()
model.compile(
optimizer=Adam(1e-4),loss=crf_loss,metrics=[crf_accuracy]
)
return model
然后发生错误:
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras_contrib/layers/crf.py:292 call *
test_output = self.viterbi_decoding(X,mask)
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras_contrib/layers/crf.py:564 viterbi_decoding *
argmin_tables = self.recursion(input_energy,mask,return_logZ=False)
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras_contrib/layers/crf.py:521 _step *
return self.step(input_energy_i,states,return_logZ)
/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/keras_contrib/layers/crf.py:463 step *
m = K.slice(states[3],[0,t],[-1,2])
AttributeError: module 'keras.backend' has no attribute 'slice'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。