AnÃĄlisis de sentimientos con BERT en Python (Tutorial)
āļāļąāļ
- āđāļāļĒāđāļāļĢāđāđāļĄāļ·āđāļ 19 āļ.āļĒ. 2024
- ðĨðĨAcademia OnlineðĨðĨ: cursos.codific...
ðĨðĨAsesorÃas y formaciÃģn personalizadaðĨðĨ: www.codificand...
En este video veremos cÃģmo usar BERT para clasificar sentimientos. Al final tendremos una inteligencia artificial que serÃĄ capaz de determinar si un comentario sobre una pelÃcula es positivo o negativo. Todo usando la librerÃa PyTorch.
â ÂŋNo quieres perderte ningÚn video? Pues sÃmplemente SUSCRÃBETE, ÂĄes GRATIS!: www.youtube.co...
â ÂĄSÃgueme en TWITTER!: / codificandobits
â ÂĄY tambiÃĐn en FACEBOOK!: / codificandobits
---------------------------
El cÃģdigo fuente de este tutorial:
ðŧ github.com/cod...
---------------------------
âķExplicaciÃģn detallada de BERT: âĒ BERT: el inicio de una...
ðĨðĨAcademia OnlineðĨðĨ: cursos.codificandobits.com/
ðĨðĨAsesorÃas y formaciÃģn personalizadaðĨðĨ: www.codificandobits.com/servicios/
Probablemente el mejor vÃdeo que he encontrado sobre BERT en el tiempo que llevo estudiÃĄndolo. He leÃdo y visto contenido en inglÃĐs que no se compara con lo que has venido haciendo, desde que explicaste las redes transformers, al video donde explicas cÃģmo funciona BERT y ahora este Tutorial. Felicidades, eres un excelente educador!
Me quito el sombrero, lo mejor que he visto , y eso que he visto muchos vÃdeos. Se nota un gran dominio en todos los aspectos. Para los que somos programadores, que aprendemos sobre temas desconocidos al programarlos, esto es una joya que vale la pena verla y reproducirla muchas veces. OjalÃĄ se pueda ver una demostraciÃģn en espaÃąol y otra en Twiter (anÃĄlisis de sentimiento). Felicitaciones.
Gracias por tu comentario DamiÃĄn. El saber que encuentras Útil este contenido anima a continuar desarrollando videos de gran calidad. Ya tomÃĐ nota de tu sugerencia de anÃĄlisis de sentimientos en Twitter, espero pronto hacer un video sobre el tema. Un saludo!
no sabes lo agradecido que estoy, esto me servirÃĄ para mi tesis, antes lo estaba haciendo con RNN pero me quedaba sin memoria GPU, acÃĄ se cumple el titulo del paper de transformers "Attention is all you need". Eres un grande!
Como siempre un crack. Muchas gracias!!!!!
tus videos me motivan :) , la gente interesada debe conocerte mÃĄs
A mi me motivan los comentarios de todos ustedes. Gracias por ser un fiel seguidor cristhIAn. Un saludo!
Diossss q buen video explicas paso a paso y por que se hacen las cosas es increible muchas gracias
Con gusto, un saludo!
Excelente video, uno de los mejores que he visto. Una consulta es necesario la columna label que generas en base a la columna sentiment que tenias en el archivo csv original?, ya que en el caso que quiero aplicar tengo una lista de comentarios en ingles pero no tengo ninguna columna adicional? Gracias de antemano por tu respuesta.
Excelente tutorial. MuchÃsimas gracias por montar esta clase de videos. Me encantarÃa que pudieras hacer uno aplicado a contestar preguntas en espaÃąol. Saludos.
Hola Gilbert, me leÃste la mente! El tema que propones es precisamente el tema del prÃģximo video! Un saludo!
@@codificandobits Excelente!!! EstarÃĐ atento. MuchÃsimas gracias por leer y responder.
Hola, me ha encantado el vÃdeo, pero en la secciÃģn de Entrenamiento, cuando declaras las Ãpocas me sale el siguiente error: TypeError: dropout(): argument 'input' (position 1) must be Tensor, not str. He intentado agregar algunos comando que he encontrado como ayudas, pero sigue sin funcionar. Te agradezco algÚn tipo de ayuda!
Me pasÃģ igual. Sucede porque HugginFace se actualizÃģ a la versiÃģn 4 recientemente. Para que te funciones debes agregar el parÃĄmetro "return_dict=False" al Modelo, es decir, en la secciÃģn 15 donde se define el modelo debes cambiar esta linea y dejarla asÃ: self.bert = BertModel.from_pretrained(PRE_TRAINED_MODEL_NAME,return_dict=False)
@@nicolasrodriguez5780 Gracias me funciono
@@nicolasrodriguez5780 Muchas gracias me funciono
@@nicolasrodriguez5780 Excelente me funcionÃģ, gracias
@@nicolasrodriguez5780 muchas gracias, no hubiera podido solucionarlo sin tu comentario
muy buen video, excelente la explicaciÃģn de cada parte felicitaciones
Gracias por tu comentario Camilo. Un saludo!
Excelente vÃdeo y excelente explicaciÃģn.
ð
Gracias por Compartir. Genial como SIEMPRE.
A ti JosÃĐ Manuel por seguir mis videos. Un saludo!
Muy bueno y didÃĄctico ejemplo! Te sigo
ð
Hola!! quiero agradecer por tan excelente y completo video Tutorial! He aprendido muchÃsimo y me gustarÃa saber si puedo utilizar DistilBERT con este mismo esquema?. Muchas gracias! y espero tu respuesta!
Excelente video, muy explicativo, saludos!
ð
Excelente contenido! Gracias
Hola Miguel, gracias por la explicaciÃģn, siempre tus videos son muy didÃĄcticos y he aprendido bastante gracias a ello, tengo una duda acerca de que si en la capa de salida puedo usar una funciÃģn de activaciÃģn sigmoidea ya que se puede interpretar como una clasificaciÃģn binaria. Gracias.
Me sirvio muchisimo, gracias!
Felicitaciones, muy claro
ð
Podrias hacer un tutorial para Clusterizar usando Bert, explicas bien tus temas.
BuenÃsimo el tutorial
Buen vÃdeo me encanta la inteligencia artificial!
Hola JosÃĐ, creo que estamos en la misma barca! Un saludo!
@@codificandobits Exactamente mi amigo, mi sueÃąo es crear una I.A con conciencia propia, aunque sea algo imposible realizarÃĐ muchos esfuerzos.
Muchas gracias!! Gran vÃdeo! :)
ð
Hola! Muchas gracias por el video. Tengo una pregunta. BERT solo procesa lenguaje ingles?
No, funciona prÃĄcticamente en cualquier idioma. Lo importante es que cuentes con un set de datos lo suficientemente grande para poderlo entrenar. En Hugging Face puedes encontrar varios modelos BERT entrenados para diferentes tareas en EspaÃąol. Un saludo!
Gracias son muy buenos tus turoriales
Gracias por tu comentario Juan Carlos. Te envÃo un saludo!
@@codificandobits Gracias a ti, por el esfuerzo que pones y lo que aportas
Hola, muy bueno el curso. ÂŋEs posible ajustarlo para tener mas clasificaciÃģnes, es decir muy malo, malo, regular, bueno y muy bueno?
Claro que sÃ, aunque en este caso deberÃas cambiar el set de entrenamiento para incluir esas nuevas categorÃas. Un saludo!
excelente material, me gustarÃa poder contactarlo para asesorÃa en alguno proyectos de investigaciÃģn,
Hola profe, donde puedo encontrar el CSV?
Gracias no pude completar el elercicio:
TypeError: dropout(): argument 'input' (position 1) must be Tensor, not str
Disculpa tal vez hubo alguna forma de arreglar el error?
quede asombrado con el tuturial...!!! tengo la siguiente duda... si yo quiero que analice comentarios en espaÃąol, debo tener el set de datos en espaÃąol? tengo que descargar de HUGGING FACE en espaÃąol? que debo hacer? GRACIAS
Hola. SÃ, el primer requisito es que el modelo que uses (puede ser uno entrenado por ti mismo, o descargado por ejemplo de Hugging Face) debe estar entrenado con un corpus en espaÃąol. Un saludo!
Hola, querÃa preguntarte como puedo acelerar la ejecuciÃģn del cÃģdigo sabiendo que tengo una tarjeta AMD Radeon (TM) RX Vega 10 Graphics, ya que tengo entendido que CUDA es para NVIDIA. Muchas gracias y Saludos.
Que puedo hacer para buscar la tasa de aprendizaje optima? por ejemplo, en este tutorial usas lr=2e-5, Âŋcomo se que ese valor es el Ãģptimo? Saludos
excelente video
Hola, serÃa fantÃĄstico si generases un vÃdeo usando BertForSequenceClassification en un problema de clasificaciÃģn multiclase.... Âŋte atreves con el reto?
Podemos hacer una demostraciÃģn con tÃĐcnicas previas a BERT?
Muy buen video! Muchas gracias, solo una pregunta si no estoy usando google colab hay alguna forma en la que pueda de igual manera desde el jupyter notebook obtener los dato? o en ese caso si tocaria descargarlos?
Buenas tardes el archivo de Excel de donde lo saca o si nos puede pasar
Me sale insistentemente este error y no se que hacer ya.
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
in ()
5 print('-------------------')
6 train_loss,train_loss = train_model(
----> 7 model, train_data_loader, loss_fn, optimizer, device, scheduler,len(df_train)
8 )
9 test_loss, test_loss = eval_model(
4 frames
/usr/local/lib/python3.6/dist-packages/torch/_utils.py in reraise(self)
426 # have message field
427 raise self.exc_type(message=msg)
--> 428 raise self.exc_type(msg)
429
430
RuntimeError: Caught RuntimeError in DataLoader worker process 0.
Original Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/worker.py", line 198, in _worker_loop
data = fetcher.fetch(index)
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/fetch.py", line 47, in fetch
return self.collate_fn(data)
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/collate.py", line 73, in default_collate
return {key: default_collate([d[key] for d in batch]) for key in elem}
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/collate.py", line 73, in
return {key: default_collate([d[key] for d in batch]) for key in elem}
File "/usr/local/lib/python3.6/dist-packages/torch/utils/data/_utils/collate.py", line 55, in default_collate
return torch.stack(batch, 0, out=out)
RuntimeError: stack expects each tensor to be equal size, but got [129] at entry 0 and [200] at entry 1
Hola, excelente video, me podria decir cual es la difrencias entre los algoritmos BERT, NER Y POT TAGGING y cuales funcionan mejor o peor uno del otro? por favor.
Hola RamÃģn. BERT es como tal un modelo de Deep Learning que permite analizar el lenguaje (acÃĄ en el canal encontrarÃĄs un video donde lo explico en detalle).
Por otra parte NER y POS (Part of Speech) Tagging son tareas propias del procesamiento del lenguaje natural. NER viene del inglÃĐs "Named Entity Recognition" que busca extraer del texto elementos como nombres de personas, nombres de organizaciones, ubicaciones, fechas, etc.; mientras que POS intenta encontrar los elementos que componen una frase escrita: verbo, adverbio, conjunciones, artÃculos. etc.
Un saludo!
Hola, hay alguna forma de subir este modelo a huggingface para utilizarlo con la librerÃa de transformers?
Es que lo estoy tratando de hace, pero dice que espera un archivo .bin y este es un archivo .pth
Excelente y felicitaciones por contenidos de valor como este y todos los videos :)
-> Me gustarÃa ver: como grabar el modelo y luego cargarlo para usarlo en producciÃģn (model.save/load)
se refiere a guardar los pesos? torch.save(model.state_dict(), 'BERT_sentimientos.pth') podria ser
Hola Javier, quÃĐ bueno saber de tÃ! SÃ, es algo parecido a como lo menciona ACECOM IA en el comentario de abajo. AcÃĄ mÃĄs informaciÃģn: pytorch.org/tutorials/beginner/saving_loading_models.html
Muchas gracias, como siempre ;)
ð
Vale, muchas gracias por tu ayuda, cuando ya tengo el resultado, como puedo hacer que el codigo me ayude con 100 reviews?
Excelente video. ÂŋPodrÃas usar spanberta? Y de paso entrenar con tu propio corpus?
Entrenar con set de data en espaÃąol, por favor.
En espaÃąol hay algÚn data set con muchos datos?
Torch seria muy bueno profe. Muchas gracias
Hola. Tienes razÃģn. Desde hace un tiempo tengo pensado un video sobre Pytorch, espero pronto poderlo publicar. Un saludo!
Melhor vÃdeo, parabÃĐns!!
hola, excelente material, es posible utilizar Bert par anÃĄlisis de sentimientos de varios sitios web la vez?
Claro que sÃ. El problema no es tanto BERT sino mÃĄs bien la interfaz que usarÃĄs. Es decir: debes usar una API que tome los datos de los sitios web y la envÃe a la API del servicio donde tengas montado BERT para hacer el anÃĄlisis de sentimientos. Un saludo!
@@codificandobits gracias mil por su respuesta, cÃģmo me podrÃa ayudar en un proceso investigativo? me interesa publicar y podrÃamos ser coatores, quedo atento
Buena tarde, estoy tratando de implementar este programa para practicar, practicamente todas las lÃneas corren bien, excepto la 44 que me muestra BrokenPipeError: [Errno 32] Broken pipe, de casualidad sabe por que?
Hola Miguel. Muy bueno su video. Le comento yo ando replicando uno igual para detectar maltrato de clientes. Sin embargo, no sÃĐ si la data la debo meter al espaÃąol o inglÃĐs?
Hola Diego. Todo depende del idioma que vayas a usar en la aplicaciÃģn final, que debe coincidir con el idioma que uses para entrenar el modelo. Un saludo!
Buenos dÃas una pregunta este modelo tambiÃĐn sirve para comentarios es espaÃąol
Hola Rafael. Realmente no, porque el modelo usado en el video estÃĄ entrenado especÃficamente para el idioma InglÃĐs.
Lo que debes hacer es usar un modelo en EspaÃąol (lo puedes encontrar en Hugging Face) y afinarlo con un set de datos con comentarios tambiÃĐn en EspaÃąol.
Un saludo!
Muchas gracias!
SerÃa posible hacer un ejemplo con espaÃąol.
Claro que sà AdriÃĄn. El prÃģximo video es un ejemplo con BETO (BERT en EspaÃąol). Un saludo!
Hola, ya estÃĄ publicado el video de beto?
yo todo esperanzado lo monte en mi 1050ti, memoria llena en cuda, menos hilos, xd tus 15min me esperanzaron falsamente, buen video jajaja
Realmente en Google Colab fueron casi 50 minutos. Aunque no tengo los datos de la GPU usada en el video. Un saludo!
buen dia, tengo una duda, quise hacer tokens de una frase en espaÃąol pero no la reconoce. sabe de alguna soluciÃģn?
Hola Hugo, Âŋme puedes compartir el cÃģdigo que estÃĄs desarrollando para entender mejor y poder responderte?
Hola, en primer lugar quiero felicitarte por tus vÃdeos. VerÃĄs he trabajado con embeddings, he creado redes neuronales y usado algoritoms de ML, pero hasta el momento no he usado transformers, y me piden en el pryecto que se empleen en diferentes idiomas (espaÃąol, inglÃĐs y chino). ÂŋHe entendido bien al pensar que BERT es multilingÞe? Porque... por otro lado he visto diferentes versiones de BERT, para francÃĐs, aleman, espaÃąol,.... y ya me entran dudas. Por cierto, ÂŋcÃģmo se podrÃa especificar el uso de una versiÃģn concreta? Gracias anticipadas.
JerÃģnimo
Hola JerÃģnimo y muchas gracias por tu comentario.
Con respecto hasta pregunta: el uso de BERT depende de las caracterÃsticas de tu proyecto. En tÃĐrminos generales puedes usar BERT para tareas como comprensiÃģn de texto, anÃĄlisis de sentimientos o pregunta respuesta (por ejemplo). Pero no funciona para generaciÃģn de texto.
En tÃĐrminos generales hay que mirar las necesidades de tu proyecto y escoger la variante de redes transformer que mÃĄs se adecÚe. En todo caso todas las variantes pueden ser entrenadas para que funcionen en diferentes idiomas.
Un saludo!
@@codificandobits Muchas gracias, y de nuevo felicidades
Hola, hay alguna red neuronal que haga lo mismo pero en idioma EspaÃąol?
Hola!, excelente video!, pero tengo unas dudas, me sale un pequeÃąo error, quÃĐ puedo hacer para resolverlo ?
dropout(): argument 'input' (position 1) must be Tensor, not str
Pudiste resolverlo? tambien me sale a mi
#Codificacion para introducir a BERT
encoding = tokenizer.encode_plus(
sample_txt,
max_length = 10,
truncation = True,
add_special_tokens = True,
return_token_type_ids = False,
#pad_to_max_length = True,
padding = 'max_length',#este corregido
return_attention_mask = True,
return_tensors ='pt'
)
#tambien
#DAta Loader:
def data_loader(df,tokenizer,max_len,batch_size,num_workers):
dataset = IMDBDataset(
reviews = df.review.to_numpy(),
labels = df.label.to_numpy(),
tokenizer = tokenizer,
max_len = MAX_LEN
)
return DataLoader(dataset,batch_size=BATCH_SIZE,num_workers = num_workers)
#tambien
train_data_loader = data_loader(df_train, tokenizer, MAX_LEN, BATCH_SIZE, num_workers=2)
test_data_loader = data_loader(df_test, tokenizer, MAX_LEN, BATCH_SIZE, num_workers=2)
#tambien
def eval_model(model, data_loader, loss_fn, device, n_examples):
model.eval()
losses = []
correct_predictions = 0
with torch.no_grad():
for batch in data_loader:
input_ids = batch['input_ids'].to(device)
attention_mask = batch['attention_mask'].to(device)
labels = batch['label'].to(device)
outputs = model(input_ids=input_ids, attention_mask=attention_mask)
_, preds = torch.max(outputs, dim=1)
loss = loss_fn(outputs, labels)
correct_predictions += torch.sum(preds == labels)
losses.append(loss.item())
return correct_predictions.double() / n_examples, np.mean(losses)
self.bert = BertModel.from_pretrained(PRE_TRAINED_MODEL_NAME,return_dict=False)
o inenta esto
buen dÃa, estoy entrando en el mundo de AI, y querÃa saber si despuÃĐs de entrenar un modelo con BERT, como el del video; como puedo acceder a ese modelo despuÃĐs de entrenado;
es decir, entreno el modelo y lo uso, si luego de un tiempo lo quiero volver a usar debo entrenar de nuevo o Âŋexiste alguna manera de guardar los resultados de ese entrenamiento?
De casualidad encontraste la respuesta?
puede usarse con 3 clases? positivo, neutro, negativo
SÃ claro. Lo importante es contar con un set de datos de entrenamiento/prueba/validaciÃģn que contenga esas 3 categorÃas. Un saludo!
Donde puedo acceder al dataset que usas para replicar tu codigo ?
En la descripciÃģn del video encuentras el enlace: github.com/codificandobits/Analisis_de_sentimientos_con_BERT
Un saludo!
Hola BERT , es capaz de analizar texto en espaÃąol?
Tengo un archivo de Excel de 500 comentarios como puedo clasificar esos comentarios ya hice este tutorial y excelente pero quiero tener los sentimientos de todos los 500 comentarios
Hola Daniel. Depende, si estÃĄn en InglÃĐs puedes usar el cÃģdigo que muestro en el video sin modificaciÃģn alguna. Simplemente debes llevar los comentarios de Excel a Python (usando por ejemplo la librerÃa Pandas) y preprocesarlos para que queden en el mismo formato requerido por el modelo.
Pero si estÃĄn en EspaÃąol debes: (1) usar un modelo BERT pre-entrenado en EspaÃąol (puedes descargar uno de Hugging Face); (2) afinarlo para anÃĄlisis de sentimientos; (3) usar el modelo afinado para generar predicciones sobre tu dataset. En el paso (2) necesitas usar tambiÃĐn un dataset en EspaÃąol.
Un saludo!
hubieses guardado los pesos y compartido :(
ðĪ ðĪ tienes razÃģn!