En artículos pasados ya hemos iniciado un ejercicio de deep learning sobre análisis de sentimientos. Hemos llevado a cabo la carga y visualización de datos, el preprocesado y el entrenamiento que sigue. En este artículo, realizaremos este mismo ejercicio con deep learning para poder captar la diferencia entre los distintos procesos.
Ejercicio de DL: análisis de sentimientos
En este procedimiento utilizaremos deep learning, una RNN, una LSTM y una GRM para realizar el ejercicio de deep learning que antes realizamos de un modo distinto.
Vamos a utilizar keras para todo. En este caso, utilizaremos un módulo dentro de keras que contiene diversos datasets. También emplearemos el dataset de IMDb.
En lugar de hacer otra vez la carga de los datos, vamos a utilizar el de IMDb, que nos da los datos en split, lo que ya nos simplifica muchísimo el asunto. Así pues, cargamos los datos con unas cuantas líneas de código:
#Ejercicio de DL: análisis de sentimientos
from keras.datasets import imdb
vocabulary_size = 5000
(X_train, y_train), (X_test, y_test) = imdb.load_data (num_words = vocabulary_size)
print ("Loaded dataset with { } training sampmles, { } test samples".format (len (X_train), len (X_test)))
Es importante recordar que, cuando vamos a hacer la carga de datos, debemos mencionar el tamaño del vocabulario (en este caso son 5000 palabras).
Una vez generadas nuestras tuplas con los datos de entrenamiento, las etiquetas de entrenamiento y la parte de test correspondiente, podemos visualizarlo.
Esto puede ser un poco diferente a como nos hemos acostumbrado a visualizarlo hasta ahora. Son distintos los datos que nos brinda keras de base:
#Ejercicio de DL: análisis de sentimientos
print (" - - - Review - - - ")
print (X_train [0])
print (" - - - Label - - - ")
print (y_train [0])
Si nos fijamos, en la primera review nos muestra solo números. Estos números no son las bag of words que hemos calculado ni las frecuencias de las palabras, sino que son un diccionario, es decir, un mapeo a índices de cada una de las palabras del vocabulario. Es decir, a cada palabra del vocabulario le corresponde un número que la reemplaza en el índice.
No obstante, podemos utilizar la función get_word_index para convertir los números de los índices en palabras:
#Ejercicio de DL: análisis de sentimientos
word2id = imdb.get_word_index ()
id2word = {i: word for word, i in word2id.items ()}
print (" - - - Review (with words) - - - ")
print ([id2word.get (i, " ") for i in X_train [0]])
print (" - - - Label - - - ")
print (y_train [0])
Aquí vemos cómo hemos convertido cada una de las palabras que estaban clasificadas en el diccionario con un número.
Con esto ya tendríamos los datos tokenizados con las etiquetas. Cabe resaltar que tokenizar no es lo mismo que preprocesar, ya que aquí seguimos teniendo todas las stopwords, solo que ya lo tenemos todo separado en palabras.
Cuando vamos a trabajar con redes recurrentes, lo que tenemos que definir es el tamaño de entrada de la red. En este caso utilizaremos un tamaño de 500, lo que quiere decir que los datos de entrada para la predicción y análisis de sentimientos son 500 palabras.
#Ejercicio de DL: análisis de sentimientos
from keras.preprocessing import sequence
max_words = 500
X_train = sequence.pad_sentences (X_train, maxlen = max_words)
X_test = sequence.pad_sentences (X_test, maxlen = max_words)
Lo que haremos ahora es la construcción del modelo. Vamos a importar el modelo. Crearemos un modelo secuencia. Ya sabemos que hay dos formas de hacer modelos, la primera es utilizando un model y la segunda un sequential. En la primera se definen las capas por separado y luego se unen en un objeto único. En la segunda se crea el objeto y se le van añadiendo capas.
#Ejercicio de DL: análisis de sentimientos
from keras.models import Sequential
from keras.layers import Embedding, LSTM, Dense, Dropout, GRUV2, SimpleRNN
embedding_size = 32
model = Sequential ()
model.add (Embedding (vocabulary_size, embedding_size, input_length = max_words))
model.add (LSTM (100))
model.add (Dense (1, activation = 'sigmoid'))
print (model.summary ())
#Ejercicio de DL: análisis de sentimientos
model.compile (loss = 'binary_crossentropy', optimizer = 'adam', metrics = ['accuracy'])
#Ejercicio de DL: análisis de sentimientos
batch_size = 64
num_epochs = 1
X_valid, y_valid = X_train [:batch_size], y_train [:bach_size] #first batch_size samples
X_train2, y_train2 = X_train [:batch_size], y_train [:bach_size] #rest for training
model.fit (X_train2, y_train2,
validation_data = (X_valid, y_valid),
batch_size = batch_size, epochs = num_epochs)
Para acceder a las opciones laborales del Big Data, una de las áreas en el mundo de la industria tech mejor pagadas y con más demanda en la actualidad, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Esta es una formación de alta calidad e intensidad en la que, con la guía de profesionales en el sector, adquirirás los conocimientos imprescindibles para conseguir el trabajo de tus sueños en pocos meses. ¡No esperes más para impulsar tu carrera y solicita información ahora!