¿Cómo puedo obtener acceso a tokenizer después de cargar un modelo BERT personalizado guardado usando Keras y TF2?
Estoy trabajando en un problema de clasificación de intenciones y necesito tu ayuda.
Ajusté uno de los modelos BERT para la clasificación de texto. Entrené y evalué el modelo con un conjunto de datos pequeño para detectar cinco intenciones. Usé el siguiente código Intent Recognition with BERT usando Keras y TensorFlow 2. ¡Funciona bien!
https://curiousily.com/posts/intent-recognition-with-bert-using-keras-and-tensorflow-2/
He guardado el modelo para poder usarlo más tarde sin tener que volver a entrenarlo en el futuro.
Guardar todo el modelo como SavedModel.
!mkdir -p saved_model
model.save(‘saved_model/intentclassifiermodel’)
Luego lo comprimí y lo descargué para usarlo por separado.
!zip -r saved_model.zip saved_model/
Ahora, estoy tratando de usar este modelo para predecir la clasificación de intenciones. Para ello, he creado otro cuaderno de Google Colab y he cargado el modelo.
from google.colab import drive
drive.mount(‘/content/gdrive’)
!pip install tensorflow==2.2
!pip install bert-for-tf2 >> /dev/null
import bert
from tensorflow import keras
model = keras.models.load_model(‘/content/gdrive/MyDrive/NLPMODELS/saved_model/intentclassifiermodel’)
model.summary()
El modelo se carga correctamente, ahora quiero hacer una predicción. Para ello, estoy utilizando el siguiente fragmento de código (era el mismo código en el código base).
sentences = [
“¿Eres un bot?”,
“¿Cómo crear un bot?”
]
pred_tokens = map(tokenizer.tokenize, sentences)
pred_tokens = map(lambda tok: [“[CLS]”] + tok + [“[SEP]”], pred_tokens)
pred_token_ids = list(map(tokenizer.convert_tokens_to_ids, pred_tokens))
pred_token_ids = map(lambda tids: tids +[0]*(data.max_seq_len-len(tids)),pred_token_ids)
pred_token_ids = np.array(list(pred_token_ids))
predictions = model.predict(pred_token_ids).argmax(axis=-1)
for text, label in zip(sentences, predictions):
print(“text:”, text, “\nintent:”, classes[label])
print()
Sin embargo, este código falla porque no estoy seguro de cómo acceder al tokenizador aquí.
Aquí está el error:
¿Podrías ayudarme a obtener el tokenizador?
Gracias y saludos,
Rohit Dhamija
davy.ai
Hola Rohit,
Claro, puedo ayudarte a acceder al tokenizador. Como has utilizado el modelo BERT en tu código, necesitas tener el tokenizador correspondiente que se utilizó para pre-entrenar el modelo BERT.
Puedes cargar el tokenizador utilizando la clase
FullTokenizer
del módulobert/tokenization.py
. Aquí tienes el fragmento de código que puedes utilizar para cargar el tokenizador y tokenizar las frases:En el código anterior, cambia la variable
bert_ckpt_dir
al directorio donde has almacenado los archivos de checkpoint debert
. Además, cambiamax_seq_len
a la longitud máxima de secuencia que has utilizado durante el ajuste fino del modelo BERT.¡Espero que esto te ayude! Avísame si tienes alguna otra pregunta.
Gracias y saludos,
[Tu nombre]