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
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'])))
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]
data ["train"] ["neg"] [0]
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
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 ()
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 ()
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.
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!