无法在 NER

问题描述

我在为 NER 训练我的 BERT-CRF 模型时遇到了一个未知问题。我将 keras.contrib 用于 CRF 模型。

这是导入的库。

!pip install transformers
!pip install git+https://www.github.com/keras-team/keras-contrib.git
import pandas as pd
import numpy as np
from transformers import TFBertModel,BertTokenizer,BertConfig
import tensorflow as tf
from tensorflow import keras
from keras_contrib.layers import CRF
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder
from tqdm import tqdm

模型创建代码。

input_ids = keras.layers.Input(shape=(MAX_LEN,),dtype=tf.int32)
token_type_ids = keras.layers.Input(shape=(MAX_LEN,dtype=tf.int32)
attention_mask = keras.layers.Input(shape=(MAX_LEN,dtype=tf.int32)
bert_output = bert(
       [input_ids,attention_mask,token_type_ids]
   )[0]    
bert_output = keras.layers.Dropout(0.3)(bert_output)
dense_layer_output = keras.layers.Dense(num_classes+1,activation='softmax',name='output')(bert_output)
crf = CRF(num_classes)
outputs = crf(dense_layer_output)
model = keras.Model(
       inputs=[input_ids,token_type_ids,attention_mask],outputs=[outputs],)
model.compile(
   loss=crf.loss_function,metrics=[crf.accuracy],optimizer=keras.optimizers.Adam(5e-5)
   )
model.fit(
    x_train,y_train,epochs=1,verbose=1,batch_size=32,validation_data=(x_test,y_test)
)

在尝试训练模型时出现此错误。我无法理解它的起源和原因。

WARNING:tensorflow:The parameters `output_attentions`,`output_hidden_states` and `use_cache` cannot be updated when calling a model.They have to be set to True/False in the config object (i.e.: `config=XConfig.from_pretrained('name',output_attentions=True)`).
WARNING:tensorflow:The parameter `return_dict` cannot be set in graph mode and will always be set to `True`.
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-18-f369b38eb91d> in <module>()
      5     verbose=1,6     batch_size=32,----> 7     validation_data=(x_test,y_test)
      8 )

9 frames
/usr/local/lib/python3.7/dist-packages/tensorflow/python/framework/func_graph.py in wrapper(*args,**kwargs)
    975           except Exception as e:  # pylint:disable=broad-except
    976             if hasattr(e,"ag_error_metadata"):
--> 977               raise e.ag_error_metadata.to_exception(e)
    978             else:
    979               raise

AttributeError: in user code:

    /usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training.py:805 train_function  *
        return step_function(self,iterator)
    /usr/local/lib/python3.7/dist-packages/keras_contrib/losses/crf_losses.py:54 crf_loss  *
        crf,idx = y_pred._keras_history[:2]

    AttributeError: 'Tensor' object has no attribute '_keras_history'

我在互联网上读到 keras.contrib 已被弃用,但我不知道如何在 BERT 之上使用 CRF 层的任何其他方式。如果在 keras 中有更好的方法,请给我建议。

我不知道这个问题是否有意义,但任何帮助将不胜感激。 提前致谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)