Categories
Cleanup Methods Visualization

Outbreak Topics: Topic modeling of COVID-19

In this post, we will present another way to explore our dataset of tweets on Covid-19. We intend to detect emerging topics of interest for our study of the social narratives about the pandemic. For this, we will perform unsupervised machine learning using different Python libraries.

In this case, we work with data in Spanish, but the same processing can be applied to English data; only a few parameters will diverge.

“Cleaning is usually 80% of a data scientist’s time”

Working with big data usually involves spending most of the time cleaning and organizing the data (source). This case is no exception! Cleaning is crucial for text processing not only because it reduces a text making it easier to read by machine, but also because it can significantly improve the quality of the results.

Our first step is to filter stopwords and emojis. We used generic lists available in standard libraries (NLTK, emoji). Based on the results, we refresh the list of stopwords to eliminate noise (e.g., “retwitt”) or words that are too obvious (e.g., “covid19”).

Another important step of preprocessing is part of speech detection and lemmatization. We chose to use Stanza (from Stanford NLP) because it yields better results for Spanish lemmatization. Spacy could be a better choice for English, since it obtains good results with reduced morphology languages such as English. The processing time is also notably faster than with Stanza.

After preprocessing, we can tackle detection of the main topics of our Covid-19 corpus with machine learning using Gensim, a Python library for topic modeling. We will perform an unsupervised learning because we don’t know the content or quantity of our topics in advance. Then, we will train our models with LDA for 3 to 30 topics.

Topic coherence of the models measured with c_npmi, c_uci and u_mass for all the tweets in Spanish on April 25th

The topic coherence plots generated for the Spanish-language tweets from April 25th show that the conversation in our Covid-19 corpus was very focused, since the coherence drastically falls when the topic number grows. Given the opposite case (when topic coherence scores better for more topics), it is important to find an agreement between the results of the coherence scores and the number of topics interpretable by humans. It is hard to imagine a human analysis dealing with over a dozen topics for the same corpus.

Visualizing the results with graphics is very helpful for the analysis. A popular library for visualizing topic models is pyLDAvis, which shows the most frequent words of each topic in an interactive graphic.

7 topics model for all tweets in Spanish of covid19 on April 25th 2020

On the previous graphic, which shows seven topics for tweets from April 25th in all the locations of our sample (Argentina, Colombia, Ecuador, España, Florida, México, and Perú), we can observe the problem pointed out earlier: it becomes difficult for a human to understand the criteria used to group certain words under a certain topic. As the topic number increases, the topics are less interpretable, even if they have high coherence scores.

This problem is probably due to the size of our sample: aside from Covid-19, Twitter users of each Spanish-speaking location discuss different, largely unrelated subjects. We will compare the results for Argentina and Colombia to find out.

Topic coherence of the models measured with c_npmi, c_uci y u_mass for Argentina, best results for 3 and 5 topics
Topic coherence of the models measured with c_npmi, c_uci y u_mass for Colombia, best results for 3 and 7 topics

But first, a word on another type of visualization that we found very useful for topic modeling, Circle Pack. This type of graphic uses colors to represent different topics and spheres whose size is relative to word frequency. Let’s compare the Circle Pack for April 25th in Argentina and Colombia for three topics, given that both countries received high scores for this topic number.

Topics of covid19 tweets in Colombia on April 25th 2020

On the graphic for Colombia, the red circles represent a topic relating the pandemic to politics. It includes words as “government,” “president,” and “country”. The blue topic addresses public health issues, which includes “vaccine,” “virus,” and “test.” The green topic seems more related to daily statistics of case numbers, deaths, and infected people.

Topics of covid19 tweets in Argentina on April 25th 2020

In order to interpret the Circle Pack for Argentina, it is essential to dive into the latest news of that particular day. Doing so reveals controversy surrounding a baby named Ciro Covid who was born on April 24th in Santa Fé, The question “Who would name her/his baby Ciro Covid?” that flooded Argentinian Twitter the next day is not only clearly represented on the green topic but also invaded the tweets of daily reports of case and death numbers (red topic). With a remarkably smaller dimension, we can observe another trending topic in Argentina that day: the controversy of inmates leaving on probation as a preventative measure, represented in blue.

Once again, we confirm that the humanist approach of understanding data and its contexts is critical for assigning a meaning to the results of automatic processing.

For more details about the processing performed for topic modeling, download the notebook available on our project Github repository.

Categories
Herramientas Limpieza de datos Modelización Visualización

Los temas de la crisis: topic modeling sobre la COVID-19

En este post, presentaremos otra manera de explorar nuestro dataset de tweets sobre el Covid-19 con el objetivo de detectar temas o tópicos emergentes de interés para nuestro estudio de las narrativas sociales acerca de la pandemia. Para ello, realizamos un procesamiento de aprendizaje automático no supervisado con la ayuda de diferentes librerías para Python.

En este caso, trabajamos con material en español pero el mismo procesamiento puede aplicarse al corpus en inglés, con algunas diferencias en los parámetros de lengua.

“Preparar datos es 80% del trabajo de data science”

Ya es sabido (ver fuente) que cuando se trabaja con grandes corpus, la mayor parte del tiempo se dedica a limpiar y organizar los datos. ¡Y nuestro caso no es la excepción! Esta tarea es muy importante ya que no sólo reduce el volumen de los datos facilitando su procesamiento automático, sino que también tiene una enorme influencia en la calidad de los resultados.

En primer lugar, filtramos las stopwords y los emojis. Usamos listas genéricas disponibles en librerías standard (NLTK, emoji) que actualizamos continuamente con ítems específicos de nuestro corpus en base a los resultados obtenidos (‘retwitt’, ‘covid19’, etc.).

Otro paso importante del preprocesamiento es la detección de categorías (Part of Speech) y la lematización. Usamos Stanza (de Stanford NLP) porque da mejores resultados para tratar la morfología del español. En inglés, cuya morfología flexiva es más reducida, es posible usar Spacy con buenos resultados y un tiempo de procesamiento mucho menor.

Una vez que terminamos el preprocesamiento, podemos detectar automáticamente los tópicos predominantes en nuestro corpus con aprendizaje automático gracias a Gensim, una librería de Python para topic modelling. Realizamos un aprendizaje no surpervisado porque no tenemos manera de saber de antemano cuáles son los tópicos ni cuántos son. Entrenamos modelos con el algoritmo LDA para 3 a 30 tópicos.

Coherencia de los modelos evaluada con c_npmi, c_uci y u_mass para todos los tweets en español del 25 de abril

Los gráficos de coherencia de los tópicos generados para todos los tweets en español del 25 de abril nos muestran que la conversación en nuestro corpus de coronavirus se encuentra muy concentrada, ya que la coherencia disminuye marcadamente a medida que el número de tópicos aumenta. Si se diera el caso contrario (mayor índice de coherencia al aumentar el número de tópicos) sería importante encontrar un compromiso entre los resultados de los scores de coherencia y un número de tópicos al alcance de la interpretación humana, ya que resulta difícil imaginar un análisis humano que maneje más de una docena de tópicos para el mismo corpus.

La visualización de los resultados en gráficos es de gran ayuda para facilitar el análisis. Una forma de graficar los tópicos es usando pyLDAvis, una librería para visualizar de manera interactiva las palabras que conforman los tópicos configurados por los modelos.

En el gráfico precedente (click aquí para abrir el gráfico en una pestaña nueva) en el que se grafican 7 tópicos para el 25 de abril para los tweets en español en todos los países/regiones de nuestra muestra (Argentina, Colombia, Ecuador, España, Florida, México, Perú), podemos observar lo que señalamos más arriba: es difícil para un humano encontrar el criterio por el cual fueron agrupadas ciertas palabras como parte del mismo tópico. A medida que aumenta el número de tópicos, éstos se vuelven menos interpretables aunque tengan alto score de coherencia.

Probablemente, esto se deba a la amplitud de nuestra muestra: más allá del covid19, los usuarios de Twitter de cada país deben abordar diferentes temáticas que poco tienen que ver. Comparemos los resultados para Argentina y Colombia, por ejemplo.

Coherencia de los modelos evaluada con c_npmi, c_uci y u_mass para Argentina, mejores resultados para 3 y 5 tópicos
Coherencia de los modelos evaluada con c_npmi, c_uci y u_mass para Colombia, mejores resultados para 3 y 7 tópicos

Otro tipo de visualización útil para el topic modelling es el gráfico de Circle Pack, donde los colores representan los diferentes tópicos y el tamaño de las esferas la frecuencia de las palabras. Vamos a comparar el Circle Pack del 25 de abril de Argentina y Colombia para 3 tópicos porque ambos recibieron un score alto de coherencia para ese número.

Tópicos para tweets sobre el covid19 en Colombia el 25 de abril de 2020

En el gráfico de Colombia, vemos un tópico (color rojo teja) que relaciona la pandemia con la política, que incluye palabras como “gobierno”, “presidente”, “país”; otro tópico (color azul) que aborda cuestiones más vinculadas a lo sanitario, que incluye “vacuna”, “virus”, “prueba” y otro tópico (color verde) que parece más vinculado a las estadísticas diarias de números de casos, muertos y contagiados.

Tópicos para tweets sobre el covid19 en Argentina el 25 de abril de 2020

Para interpretar el Circle Pack de Argentina, es imprescindible conocer el tema de actualidad de ese día particular (ver noticia): un bebé de la ciudad de Santa Fé que fue nombrado Ciro Covid el 24 de abril. La pregunta “¿Quién va a ponerle de nombre a su bebé Ciro Covid?” que predominó en Twitter Argentina al día siguiente, no sólo está representada claramente en el tópico verde, sino que invadió también los tweets con partes diarios de números de nuevos casos y fallecidos (tópico color rojo teja). En una medida mucho menor, otro tema abordado ese día en ese país, fue la polémica sobre otorgar libertad condicional a presos como medida de prevención, representado por el color azul.

Una vez más, confirmamos que el aporte de una mirada humanista interesada en el conocimiento de los datos y su contextualización es de gran ayuda para asignar significados a los resultados del procesamiento automático.

Para más detalles sobre el procesamiento realizado para obtener los tópicos, descargue la notebook disponible en el repositorio de GitHub del proyecto.