En este artículo iniciaremos con un ejercicio de topic modeling. Veremos cómo se hace el preprocesado y todo lo previo al entrenamiento del algoritmo que usaremos.
Recordemos que el topic modeling es un conjunto de técnicas para descubrir estructuras latentes semánticas comunes en un conjunto de documentos.
Ejercicio de topic modeling
Lo primero que haremos es instalar las dependencias que requerimos para nuestro ejercicio de topic modeling:
#Ejercicio de topic modeling
! wget https://transfer.sh/J4o169/requirements.txt
! pip install -r requirements.txt
pip install pyLDAvis == 3 . 2 . 1
Librerías necesarias
Para la generación de nuestro modelo LDA emplearemos Gensim. Gensim es una librería usada para hacer topic modeling. Dentro de esta funcionalidad vienen incluidos un montón de algoritmos que permiten crear este tipo de soluciones. Además de esto, viene con distintos corpus.
También usaremos otra librería, que es pyLDAvis. Se trata de una librería de visualización para topic modeling.
#Ejercicio de topic modeling
import random
import pandas as pd
import gensim
from gensim.corpora import Dictionary
from gensim.models import LdaModel, CoherenceModel
import pyLDAvis
import pyLDAvis.gensim
import matplotlib.pyplot as plt
Lectura de datos
Ahora lo que haremos es descargarnos los datos:
#Ejercicio de topic modeling
! wget https://transfer.sh/KWNxRn/datasets.zip
! wget https://transfer.sh/XoRKUW/utils.py
Luego los descomprimimos:
! unzip datasets.zip
Ahora vamos a ver las reviews que tenemos:
#Ejercicio de topic modeling
df = pd.read_csv ('./datasets/reviews:sample.csv')
df.head ()
Unnamed: 0 | id | author | instance_id | rating | review_body | review_date | review_header | review_link | review_votes | sentiment | verified_purchase | |
0 | 0 | 68 | Iluvkindlle | 10 | 3 | It’s ok. Doesn’t know mucho. Can’t answer most… | 2018 – 09 – 10 | It’s ok | https://amazon.com… | 0.0 | 0 | True |
1 | 1 | 70 | Ben Burger | 10 | 5 | So easy to use. | 2018 – 09 – 10 | Love it | https://amazon.com… | 0.0 | 0 | True |
2 | 2 | 72 | Harry | 10 | 5 | Alexa es an entertaining assistant to have aro… | 2018 – 09 – 10 | Echo Dot | https://amazon.com… | 0.0 | 0 | True |
3 | 3 | 292 | Smart Shopper | 10 | 4 | Fun and addictive. | 2018 – 09 – 10 | Fun gadget | https://amazon.com… | 0.0 | 0 | True |
4 | 4 | 594 | Niva T. | 10 | 4 | I think google home assist is much smarter and… | 2018 – 09 – 10 | Its good but prefer google | https://amazon.com… | 0.0 | 0 | False |
Si nos fijamos, son reviews o reseñas de Amazon. Aquí en la tabla se muestran variedad de características y aspectos a evaluar en las reviews, entre ellas el autor, el cuerpo, el enlace, el sentimiento, la compra, etc.
Hemos escogido cien ejemplos porque con estos es suficiente:
df.shape ()
(100, 12)
Mos vamos a quedar con el body específicamente, ya que con este es con el que vamos a procesar el texto.
Preprocesado
En este caso el preprocesado lo hacemos con Gensim, pero existen muchas otras opciones con las que lo podemos llevar a cabo.
Aquí vamos a generar una pequeña función para el preprocesado. En gGemsin viene con distintas utilidades, como la de simple_processing, cuya función es hacer de manera automática los preprocesados que antes realizábamos de forma manual. También nos convierte un documento de strings a tokens ya en minúsculas e ignorando los tokens que son muy cortos o muy largos. Esto nos eliminaría una buena cantidad de stopwords.
Por otro lado, en Gensim tenemos la variable de stopwords, que es una lista que el algoritmo ha considerado que son importantes:
#Ejercicio de topic modeling
def text_preprocessing (text):
r = [ ]
for token in gensim.utils.simple_preprocess (text):
#Filtrado por tamaño del token
if token not in gensim. parsing. preprocessing. STOPWORDS and len (token) > 3:
result.append (token)
return result
#Ejercicio de topic modeling
print ('Original text: \n{} \n \n'.format (df ['review_body'] [0]))
print ('Processed text: \n{}'.format (text_preprocessing (df ['review_body'] [0])))
Original text:
It’s ok. Doesn’t know much. CAn’t answer most of my questoins Should have gotten a google mini instead .
Processed text:
[‘know’, ‘answer’, ‘questions’, ‘gotten’, ‘mini’, ‘instead’]
processed_texts = [ ]
for text in df ['review_body']:
processed_texts.append (text_preprocessing (text))
print (processed_texts [10])
[‘like’, ‘simplicity’, ‘excellent’, ‘voice’, ‘recognition’, ‘capability’]
Diccionario id-palabra
Aquí vamos a importar otros módulos pertenecientes al Gensim y le vamos a pasar los hechos procesados. Nos generará un mapeo de los textos con su respectivo indicador único:
dictionary = Dictionary (processed_texts)
list (dictionary.items ())
len (dictionary)
467
Matriz documento-palabra
corpus = [dictionary.doc2bow (bow) for doc in processed_texts]
corpus [0]
[(0, 1), (1, 1), (2, 1), (3, 1), (4, 1), (5, 1), (6, 1)]
Para poder acceder a las opciones laborales del Big Data, una de las áreas en el mundo de la industria tech mejor pagadas, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación de alta calidad adquirirás los conocimientos imprescindibles para conseguir el trabajo de tus sueños en pocos meses. ¡No esperes más para impulsar tu futuro y pide información ahora!