Diferentes operaciones con topic modeling

Contenido del Bootcamp Dirigido por: | Última modificación: 2 de octubre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

En este artículo realizaremos algunas operaciones con topic modeling que nos servirán para entender un poco mejor cómo funciona este conjunto de técnicas. Estas sirven para descubrir estructuras semánticas comunes en un conjunto de documentos, también llamadas topics.

Operaciones con topic modeling

Topic dominante por texto

Dentro de los topics o temas podemos ver más información que la que nos brinda el número óptimo de topics en un topic modeling. En este caso veremos el topic dominante por texto.

#Operaciones con topic modeling
def format_topics_sentences (ldamodel, corpus, texts):
       #Init output
       sent_topics_df = pd.DataFrame ()
       
       #Get main topic in each document
       for i, row in enumerate (ldamodel [corpus]):
              row = sorted (row, key = lambda x: (x [1]), reverse = True)
              #Get the Dominant topic, Perc Contribution and Keywords for each document
              for j, (topic_num, prop_topic) in enumerate (row):
                     if j == 0: #dominant topic
                            wp = ldamodel.show_topic (topic_num)
                            topic_keywords = ",  ".join ([word for word, prop in wp])
                            sent_topics_df = sent_topics_df. append (pd.Series ([int (topic_num), round (prop_topic, 4), topic_keywords]), ignore_index = True)
                     else:
                            break
#Operaciones con topic modeling
       sent_topics_df. columns = ['Dominant_Topic', 'Perc_Contribution', 'Topic_Keywords']

       #Add original text to the end of the output
       contents = pd.Series (texts)
       sent_topics_df = pd.concat ([sent_topics_df, contents], axis = 1)
return (sent_topics_df)
#Operaciones con topic modeling
df_topic_sents_ keywords = format_topics_sentences (ldamodel = optimal_model, corpus = corpus, texts = processed_texts)

#Format
df_dominant_topic = df_topic_sents_keywords. reset_index ()
df_dominant_topic. columns = ['Document_No', 'Dominant_Topic', 'Topic_Perc_Contrib', 'Keywords', 'Text']

#Show
df_dominant_topic. head (10)
Operaciones con topic modeling

Aquí podemos ver que podemos saber cuál es el topic más dominante para cada una de las frases que tenemos. Vemos que en el texto #0 el topic dominante número 1; en el texto 1 se habla más del tema 2, y así sucesivamente podemos ir verificando por cada frase del texto cuál es el dominante.

Imaginemos, por ejemplo, un conjunto grande de datasets en el que vienen un montón de textos. Gracias a la primera de estas operaciones con topic modeling podemos hacer clasificación no supervisada de esos textos a partir de la información empírica con el modelado de textos que estamos haciendo.

En el texto 0 el topic dominante tiene un 90% de relevancia (0.9087), lo cual es un porcentaje muy alto, por tanto está muy claro de qué se habla. No obstante, en el segundo texto vemos que el más dominante es el segundo tema, pero el porcentaje es más bajo, apenas del 62% (0.6218).

Documento más representativo por topic

Aquí podemos ver otro tipo de análisis, que consiste en determinar el documento más representativo por topic, es decir, de todos los documentos que tenemos en el dataset, cuál es el más relevante para cada uno de los temas:

#Operaciones con topic modeling
sent_topics_ sorteddf_lda = pd.DataFrame ()

sent_topics_ outdf_grpd = df_topic_ sents_kwyrods.groupby ('Dominant_Topic')

for i, grp in sent_topics_ outdf_grpd:
      sent_topics _sorteddf_lda = pd.concat ([
            sent_topics _ sorteddf_lda,
            grp.sort_values (['Perc_Contribution'], ascending = [0]). head (1)],
            axis = 0)

#Operaciones con topic modeling
#Reset Index
sent_topics_sorteddf_ lda. reset_index (drop = True, inplace = True)

#Format
sent_topics_ sorteddf_lda. columns = ['Topic_Num', "Topic_Perc_Contrib", "Keywrods", "Text"]

#Show
sent_topics_ sorteddf_lda

Tenemos que, por ejemplo, para el topic 0 el documento más representativo es un documento con un 97% de contribución del topic número 0. Es decir, en ese documento se habla casi que exclusivamente de ese tema.

Así pues, podemos hacer análisis a posteriori.

Distribución de topics en el corpus

Luego podemos definir cuál es la distribución de cada uno de los topics en el corpus. Esta es una de las operaciones con topic modeling más visuales.

#Operaciones con topic modeling
#Number of Documents for Each Topic
topic_counts = df_topic_ sents_keywords ['Dominant_Topic']. value_counts ()

#Operaciones con topic modeling
#Percentage of Documents for Each Topic
topic_contribution = round (topic_counts / topic_counts.sum (), num_topics)
df_topic_ contribution = pd.DataFrame ({'topic': topic_contribution.index, 'contribution': topic_contribution})
df_topic_contribution. erset_index (drop = True, inplace = True)

#Show
df_topic_contribution

Vemos, por ejemplo, que los temas 1 y 2 tienen casi toda la contribución en cuanto a temáticas. Sin embargo, el topic 0 es de los que menos tenemos, en lo referente a cantidad.

Así, ya tienes algunas operaciones con topic modeling que podemos realizar.

Ahora que hemos visto algunas operaciones con topic modeling y hemos observado la gran cantidad de posibilidades que existen para trabajar con este conjunto de técnicas, podemos seguir avanzando en nuestro proceso formativo.

Para 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!

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

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