Entrenar un modelo LDA por medio de un ejercicio de topic modeling

| Última modificación: 12 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este post vamos a entrenar un modelo LDA por medio de un ejercicio de topic modeling que iniciamos en un post anterior. En el ejercicio previo empezamos instalando las dependencias necesarias; después, importamos algunas librerías que utilizaríamos para el modelo LDA, entre ellas el Gensim, utilizada principalmente para hacer topic modeling, y pyLDAvis, que se usa para hacer la visualización del topic modeling.

Acto seguido, hicimos la lectura de los datos, para lo cual los descargamos, descomprimimos y observamos las reviews (un total de 100 en nuestro caso) de Amazon que tenía el dataset. A continuación, hicimos la labor de preprocesado e importamos algunos otros módulos del Gensim.

Ahora lo que haremos es entrenar un modelo LDA para seguir este ejercicio de topic modeling.

Entrenar un modelo LDA

Para empezar vamos a poner que va a tener 8 topics, es decir, 8 categorías o temáticas diferentes. Luego vamos a instanciar lo que vendría a ser el objeto del modelo; le pasamos nuestro corpus, el diccionario (este es uno de los parámetros que hay que pasarle al modelo LDA), los identificadores de cada palabra, el número de topics, el número de veces que va a hacer iteraciones para el entrenamiento, los números de pases por iteración y el alpha, que es la métrica maximizada.

#Entrenar un modelo LDA: top modeling
num_topics = 8

lda_model = LdaModel (
       corpus = corpus,
       id2word = dictionary,
       num_topics = num_topics,
       iterations = 5,
       passes = 10,
       alpha = 'auto'
)

Ahora le preguntaremos al modelo cuántos y qué topics se han definido:

#Entrenar un modelo LDA: top modeling
lda_model. show_topics ()

Como vemos y definimos previamente, hay 8 temas. Este resultado nos ha mostrado cuál es el peso de cada palabra, de mayor a menor relevancia, para cada topic.

Si nos fijamos, en el topic 0 nos dice que las palabras más relevantes son “alexa”, “google”, “easy”, “apps”, etc. En el segundo, tenemos “awesome”, “excelent”, “alexa”, etc. Y así sucesivamente con todos los temas.

Ahora observemos cómo se visualizaría como un dataframe:

#Entrenar un modelo LDA: top modeling
word_dict = { };
       for i in range (num_topics):
              words = lda_model. show_topic (i, topn = 20)
              word_dict ['Topic #' + '{:02d}'.format (i + 1)] = [i [0] for i in words]
       pd.DataFrame (word_dict)

Vemos que para cada topic hay una columna.

Perplexity y coherence

Ahora vamos a verlo de una forma más interesante, vamos a representarlo.

Aquí lo que haremos es un cálculo de la perplexity, que es una métrica en los modelos de LDA para saber cómo de bueno es el modelo. Cuanto más bajo sea el valor de la perplexity, mejor, es decir, significa que hemos acertado más en el número de topics. Esta es una relación inversamente proporcional entre la perplexity y el número de topics.

Por otro lado, tenemos que calcular la coherencia, que nos dice cuánta coherencia tiene en el número de temas el resultado que nos haya dado. Con esto sabremos si el nivel de coherencia es óptimo para 8 topics o si debemos reducirlo o aumentarlo.

#Entrenar un modelo LDA: top modeling
#Perplexity
print ('\nPerplexity: ', lda_model. log_perplexity (corpus)) #Medida de lo bueno que es el modelo. Cuanto más bajo, mejor.

#Coherence Score
coherence_model_lda = CoherenceModel (model = lda_model, texts = processed_texts, dictionary = dictionary, coherence = 'c_v')
coherence_lda = coherence_model_lda. get_coherence ()
print ('\nCoherence Score: ', coherence_lda)

Perplexity: -6.523881833002428

Coherence Score: 0.43692917832309536

Ahora visualizamos los resultados:

#Entrenar un modelo LDA: top modeling
#Visualizar los topics
pyLDAvis.enable_notebook ()
vis = pyLDAvis.gensim.prepare (lda_model, corpus, dictionary)
vis
Entrenar un modelo LDA

Aquí vemos una visualización interactiva de los temas y las palabras más relevantes por topic. Como sabemos, lo más importante es mantener la distancia entre temáticas y evitar la colisión entre las mismas, para lo que es muy útil este modelo interactivo. Vemos que tenemos 8 topics y si nos paramos, por ejemplo, en el 1, nos dice cuáles son las palabras más relevantes en función de la frecuencia:

Así podemos hacer con cada uno de los números de topics generados.

#Entrenar un modelo LDA: top modeling
pyLDAvis.save_html (vis, './topics:vis_0.html')

¿Quieres seguir avanzando?

Ahora que hemos visto cómo entrenar un modelo LDA, podemos seguir adelante con nuestro proceso formativo. Para poder acceder a las opciones laborales del Big Data, una de las áreas en el mundo de la industria tecnológica mejor pagadas, tenemos para ti el Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp. Con esta formación intensiva e íntegra de alta calidad adquirirás los conocimientos imprescindibles para conseguir el trabajo de tus sueños en muy pocos meses. ¡No continúes esperando para impulsar tu futuro y pide más 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