我无法通过 keras_bert 运行 Bert+CRF 模型

问题描述

我想通过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 (将#修改为@)