Ejercicio de DL sobre análisis de sentimientos. P1: carga y visualización de datos

Autor: | Última modificación: 16 de abril de 2024 | Tiempo de Lectura: 3 minutos
Temas en este post: ,

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este artículo te mostraremos un ejercicio de deep learning sobre análisis de sentimientos. En este apartado resolveremos la primera parte, que hace referencia a la carga y visualización de datos e importación de librerías y complementos necesarios.

Ejercicio de DL: carga y visualización de datos

Obtención de datos

! wget http://ai.stanford.edu/~amaas/data/sentiment/aclImdb_v1.tar.gz
! tar -xf aclImbdb_v1.tar.gz 
Ejercicio de DL sobre análisis de sentimientos: carga y visualización de datos

Exploración de datos

Para la lectura de los datos hemos hecho la función read_imdb_data con IMDb:

#Ejercicio de DL sobre análisis de sentimientos: carga y visualización de datos
import os
import glob

def read_imdb_data (data_dir = './aclImdb'):
       " " " Read IMDb movie reviews from given directory.
       
       Directory structure expected:
       -  data/
              -  train/
                     -  pos/
                     -  neg/
              -  test
                     -  pos/
                     -  neg/

       " " "

       #Datos y etiquetas que se devolverán en dict anidadas replicando la estructura de directorios
       data = { }
       labels = { }

       #Asumimos 2 subdirectorios: train y test
       for data_type in ['train', 'test']:
              data [data_type] = { }
              labels [data_type] = { }

              #Asumimos 2 subdirectorios por sentimiento (etiqueta): pos, neg
              for sentiment in ['pos', 'neg']:
                     data [data_type] [sentiment] = [  ]
                     labels [data_type] [sentiment] = [  ]

                     #Recogemos los ficheros por directorio
                     path = os.path.join (data_dir, data_type, sentiment, '*.txt')
                     files = glob.glob (path)

                     #Leemos los datos y los asignamos a su etiqueta
                     for f in files:
                            with open (f) as review:
                                   data [data_type] [sentiment].append (review.read ())
                                   labels [data_type] [sentiment].append (sentiment)

                     assert len (data [data_type] [sentiment]) == len (labels [data_type] [sentiment]), \ "{ } / { } datasize does not match labels size".format (data_type, sentiment)

              #Devolvemos los datos y etiquetas en diccionarios anidados
              return data, labels


data, labels = read_imdb_data ()
print ("IMDb reviews: train = { } pos / { } neg, test = { } pos / { } neg".format (
len (data ['train']  ['pos'], len (data ['train'] ['neg']),
len (data ['test']  ['pos'], len (data ['test'] ['neg'])))
Ejercicio de DL sobre análisis de sentimientos. P1: carga y visualización de datos

Aquí vemos que tenemos 12500 positivos y otros 12500 negativos.

Ahora veamos qué estructura tiene el dataset:

#Ejercicio de DL sobre análisis de sentimientos: carga y visualización de datos
data ["train"] ["pos"] [0]
Ejercicio de DL sobre análisis de sentimientos. P1: carga y visualización de datos
data ["train"] ["neg"] [0]
Ejercicio de DL sobre análisis de sentimientos. P1: carga y visualización de datos

La diferencia entre estos textos y los que hemos visto es que, en este caso, el texto no está limpio, es decir, tiene todos los accesorios con los que viene desde la página de IMDb.

Lo primero que haremos, por tanto, es una visualización y exploración de datos:


#Ejercicio de DL sobre análisis de sentimientos: carga y visualización de datos
! pip install wordcloud
Ejercicio de DL sobre análisis de sentimientos. P1: carga y visualización de datos

En este caso la visualización se hará con WordCloud, una parte para las reviews positivas y otra para las negativas:

#Ejercicio de DL sobre análisis de sentimientos: carga y visualización de datos
import matplotlib.pyplot as plt
%matplotlib inline

from wordcloud import WordCloud, STOPWORDS

sentiment = 'pos'

#Combinamos las reviews para el sentimiento deseado
combined_text = "  ".join ([review for review in data ['train' [sentiment]])

#Inicializamos el wordcloud
wc = WordCloud (background_color = 'white', max_words = 50,
                #Actualizamos las stopwords para incluir palabras comunes del tema
                stopwords = STOPWORDS.update (['br', 'film', 'movie']))

plt.imshow (wc.generate (combined_text))
plt.axis ('off')
plt.show ()
Ejercicio de DL sobre análisis de sentimientos. P1: carga y visualización de datos

Vemos que para el caso de las reviews positivas, quitando las palabras más obvias, son palabras que a lo mejor sí tienen relación con el tema en cuestión.

#Ejercicio de DL sobre análisis de sentimientos: carga y visualización de datos
import matplotlib.pyplot as plt
%matplotlib inline

from wordcloud import WordCloud, STOPWORDS

sentiment = 'neg'

#Combinamos las reviews para el sentimiento deseado
combined_text = "  ".join ([review for review in data ['train' [sentiment]])

#Inicializamos el wordcloud
wc = WordCloud (background_color = 'white', max_words = 50,
                #Actualizamos las stopwords para incluir palabras comunes del tema
                stopwords = STOPWORDS.update (['br', 'film', 'movie']))

plt.imshow (wc.generate (combined_text))
plt.axis ('off')
plt.show ()
Ejercicio de DL sobre análisis de sentimientos. P1: carga y visualización de datos

A pesar de ser review negativa, no tiene tantas palabras con connotaciones malas. Esto evidencia que no son solo las palabras las implicadas en las reviews, sino el contexto.

¿Qué sigue?

Ahora que hemos visto nuestro ejercicio de DL sobre análisis de sentimientos y hemos hecho la carga y visualización de datos, podemos seguir aprendiendo acerca de una de las disciplinas más demandadas y mejor pagadas de la actualidad. Para esta finalidad tenemos a tu disposición el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp, una formación intensiva, en la que, en solo 8 meses, aprenderás todo lo necesario para incursionar en este mundillo tan amplio. ¡Anímate a cambiar tu futuro y solicita más información ahora mismo!

Artículos ms leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado