dccuchile / beto

BETO - Spanish version of the BERT model
Creative Commons Attribution 4.0 International
488 stars 64 forks source link

No se puede cargar en Tensorflow #8

Closed eduardofv closed 4 years ago

eduardofv commented 4 years ago

No estoy seguro si es cuestión de los modelos o de la implementación, pero no he podido cargar el modelo referido en la página de Huggingface:

%tensorflow_version 2.x
!pip install transformers
import torch
from transformers import *

#Estos funcionan:
#m = TFBertForSequenceClassification.from_pretrained("bert-base-uncased")
#m = AutoModelForSequenceClassification.from_pretrained("dccuchile/bert-base-spanish-wwm-cased")

#Estos no funcionan
m = TFBertForSequenceClassification.from_pretrained("dccuchile/bert-base-spanish-wwm-uncased")

m

Manda error:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-1-fb60f3d257dd> in <module>()
      9 
     10 #Estos no funcionan
---> 11 m = TFBertForSequenceClassification.from_pretrained("dccuchile/bert-base-spanish-wwm-uncased")
     12 
     13 m

1 frames
/usr/lib/python3.6/genericpath.py in isfile(path)
     28     """Test whether a path is a regular file"""
     29     try:
---> 30         st = os.stat(path)
     31     except OSError:
     32         return False

TypeError: stat: path should be string, bytes, os.PathLike or integer, not NoneType

Pueden checarlo en Colab

josecannete commented 4 years ago

Hola!

Solo hemos subido la versión de PyTorch al S3 de Transformers, por lo que si quieres usar Tensorflow tendrás que descargar desde este repo el modelo manualmente.

Intentaré subir el modelo en Tensorflow al S3 de Transformers para que pueda usarse más fácilmente en el futuro, pero me tomará algo de tiempo (porque perdí mi clave para entrar a la página de modelos de HuggingFace 😅).

Avisaré por acá cuando pueda usarse de esa forma.

Saludos!

eduardofv commented 4 years ago

Muchas gracias José, me dí cuenta de eso justo ahora (estaba por cerrar el issue). El modelo que tienes en su repositorio para Tensorflow es un checkpoint pero parece que Huggingface lo necesita en SavedModel2:

OSError: Error no file named ['pytorch_model.bin', 'tf_model.h5'] found in directory ../cache/hug/beto/ or `from_pt` set to False

¿tendrás alguna referencia de como cargar el checkpoint? no lo he podido encontrar

josecannete commented 4 years ago

Hola, la verdad es que nunca he probado usarlo en Tensorflow.

Si encuentras la solución cuéntanos por favor!

eduardofv commented 4 years ago

Seguro! Gracias por tu apoyo... excelente el trabajo que han hecho con BETO!

eduardofv commented 4 years ago

Ya encontré cómo usar el modelo de Pytorch en Tensorflow. En realidad es mas simple de lo que creía. Se descarga el modelo de pytorch, config y vocab al mismo directorio y:


import torch
from transformers import *

config = BertConfig.from_json_file('../cache/hug/beto/tensorflow/config.json')
config
BertConfig {
  "architectures": null,
..etc..

model = TFBertForSequenceClassification.from_pretrained('../cache/hug/beto/pytorch/pytorch_model.bin', 
                                                        from_pt=True, 
                                                        config=config)
model 
<transformers.modeling_tf_bert.TFBertForSequenceClassification at 0x7fe1a04cfd30>

#El tokenizer se carga del mismo punto
t = BertTokenizer.from_pretrained('../cache/hug/beto/pytorch')
t.encode_plus(["hola"])
{'input_ids': [4, 1734, 5],
 'token_type_ids': [0, 0, 0],
 'attention_mask': [1, 1, 1]}

model.compile(loss="categorical_cross_entropy", optimizer="adam")
model.summary()
Model: "tf_bert_for_sequence_classification"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
bert (TFBertMainLayer)       multiple                  109850880 
_________________________________________________________________
dropout_37 (Dropout)         multiple                  0         
_________________________________________________________________
classifier (Dense)           multiple                  1538      
=================================================================
Total params: 109,852,418
Trainable params: 109,852,418
Non-trainable params: 0
_________________________________________________________________
josecannete commented 4 years ago

Gracias @eduardofv !