Ejercicio de topic modeling: preprocesado

| Última modificación: 10 de octubre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

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
ejercicio de topic modeling

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
ejercicio de topic modeling

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: 0idauthorinstance_idratingreview_bodyreview_datereview_headerreview_linkreview_votessentimentverified_purchase
0068Iluvkindlle103It’s ok. Doesn’t know mucho. Can’t answer most…2018 – 09 – 10It’s okhttps://amazon.com…0.00True
1170Ben Burger105So easy to use.2018 – 09 – 10Love ithttps://amazon.com…0.00True
2272Harry105Alexa es an entertaining assistant to have aro…2018 – 09 – 10Echo Dothttps://amazon.com…0.00True
33292Smart Shopper104Fun and addictive.2018 – 09 – 10Fun gadgethttps://amazon.com…0.00True
44594Niva T.104I think google home assist is much smarter and…2018 – 09 – 10Its good but prefer googlehttps://amazon.com…0.00False

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 ())
Ejercicio de topic modeling
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!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

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