Recientemente analicé con éxito datos basados en texto usando transformadores de oraciones basados en el modelo BERT. Inspirado en el libro de Kulkarni et al. (2022), mi código se veía así:
# Import SentenceTransformer
from sentence_transformers import SentenceTransformer
# use paraphrase-MiniLM-L12-v2 pre trained model
sbert_model = SentenceTransformer('paraphrase-MiniLM-L12-v2')
# My text
x='The cat cought the mouse'
# get embeddings for each question
sentence_embeddings_BERT= sbert_model.encode(x)
Me gustaría hacer lo mismo usando el modelo DeBERTa pero no puedo hacerlo funcionar. Logré cargar el modelo, pero ¿cómo aplicarlo?
import transformers
from transformers import DebertaTokenizer, AutoTokenizer, AutoModel
tokenizer = AutoTokenizer.from_pretrained("microsoft/deberta-v3-base")
model = AutoModel.from_pretrained("microsoft/deberta-v3-base")
sentence_embeddings_deBERTa= model(x)
La última línea no se ejecuta, el mensaje de error es:
AttributeError: el objeto 'str' no tiene atributo 'tamaño'
¿Algún usuario experimentado de DeBERTa por ahí?
gracias pat
Solución del problema
Bienvenido a SO;) Cuando llamas encode()al método, sería tokenizela entrada, luego la codificaría en los tensores que espera un modelo de transformador y luego la pasaría a través de la arquitectura del modelo. Cuando lo estés usando transformersdebes hacer los pasos manualmente.
from transformers import DebertaTokenizer, DebertaModel
import torch
# downloading the models
tokenizer = DebertaTokenizer.from_pretrained("microsoft/deberta-base")
model = DebertaModel.from_pretrained("microsoft/deberta-base")
# tokenizing the input text and converting it into pytorch tensors
inputs = tokenizer(["The cat cought the mouse", "This is the second sentence"], return_tensors="pt", padding=True)
# pass through the model
outputs = model(**inputs)
print(outputs.last_hidden_state.shape)
Por último, debe saber con qué tipo de salida se supone que debe trabajar.
No hay comentarios:
Publicar un comentario