Clasificación de Texto

El objetivo de este curso es capacitar al lector para crear crear modelos de texto multilenguaje aplicables a grandes volúmenes de información. Sobre estos modelos, el lector será capaz de aplicar algoritmos de aprendizaje supervisado para diferentes dominios de aplicación, como por ejemplo, clasificadores de polaridad, determinar la autoría basado en el texto, determinar la temática de un texto, entre otras.

Introducción

Se empieza con una introducción a la minería de texto, al problema específico de categorización de texto que estaremos trabajando en todo el curso y a las tareas de categorización de texto.

Para llevar acabo esta introducción realizarán lecturas a diferentes revistas que publican trabajos científicos relacionados a la minería de texto y lecturas a diferentes artículos de investigación, recientes, relacionados al tema de categorización de texto.

Las lecturas a las diferentes revistas nos dará una idea global de lo que es minería de texto y se podrá generar una opinión propia con orígenes científicos; por otro lado, la lectura a los artículos científicos nos dará una idea global de lo que se verá en el curso a detalle.

A continuación se listan algunas revistas que publican artículos sobre minería de textos, se pusieron solo aquellas donde se pudo leer la editorial de su primer número, pero vale la pena comentar que la revista de Pattern Recognition tiene sus orígenes en 1968. Este módulo tiene el objetivo de dar una introducción al problema específico de clasificación (categorización) de texto y tareas relacionadas como análisis de sentimientos, emociones entre otras, las cuales estaremos trabajando en todo el curso.

 Data Mining and Knowledge Discovery

Esta revista que tuvo su primer ejemplar en marzo de 1997 describe en la Editorial de su primer volumen escrito por Usama M. Fayyad el objetivo de la revista y la razones que se tuvo para seleccionar el nombre.

Es importante también leer el Aims and Scope de la revista donde se puede leer lo siguiente:

Data Mining Methods: including classification, clustering, probabilistic modelling, prediction and estimation, dependency analysis, search, and optimization.

 Information Retrieval Journal

Revista de 1999 con foco en la recuperación de información y en los algoritmos necesarios llevar acabo esta tarea.

Statistical Analysis and Data Mining

Empezando en febrero de 2008 esta revista nos platica en su Editorial del primer número sobre el análisis de datos en el siglo 21 y los retos que enfrentan los algoritmos de minería de datos, los cuales desde nuestra opinión son vigentes a la fecha.

Data Mining and Knowledge Discovery

Esta revista, que tuvo su primer número en 2011, nos plantea en su primera editorial una categorización de tópicos siendo de interés de esta asignatura las tecnologías.

 IEEE Transactions on Big Data

Esta revista de reciente creación (2015) nos proporciona un panorama general sobre los temas alrededor de Big Data y en su introducción se pueden observar elementos comunes a los tratados en las revistas mencionadas anteriormente y con el tema de minería de texto.

Introducción a Categorización de Texto

Categorización de texto se puede modelar como un problema de aprendizaje supervisado donde se aprende de un conjunto de pares, texto y categoría. De manera más formal se tiene un conjunto $\mathcal X = \{ (x_1, c_1), \ldots, (x_N, c_N )\}$ que se denomina conjunto de entrenamiento, $x_i$ corresponde al texto, $c_i$ es la etiqueta asociada al texto del i-ésimo ejemplo.

Generalmente, este problema se ataca utilizando algoritmos de aprendizaje y para tener una idea general de lo que se ha hecho en el área se debe de leer la siguiente revisión del estado del arte

De manera específica en el área de clasificación de emociones (análisis de sentimientos) y detección de odio se recomienda leer las siguientes revisiones del estado del arte.

Ejercicio: opinión sobre minería de texto y categorización de texto

Después de haber leído las editoriales de las revistas y el estado del arte de aprendizaje computacional en categorización automática de textos, haga un ensayo sobre el tema de minería de texto y categorización de texto, en máximo una cuartilla.

Representación de bases de conocimiento

Categorización de texto se puede modelar como un problema de aprendizaje supervisado donde se aprende de un conjunto de pares, texto y categoría. De manera más formal se tiene un conjunto $\mathcal X = \{ (x_1, c_1), \ldots, (x_N, c_N )\}$ que se denomina conjunto de entrenamiento, $x_i$ corresponde al texto, $c_i$ es la etiqueta asociada al texto del i-ésimo ejemplo. En este contexto, aprendizaje supervisado se entiende como el proceso de encontrar una función $h^*$ que se comporta similar a la relación, $f$, texto y categoría expresada en el conjunto de entrenamiento. Para tal efecto se utiliza $\mathcal X$; el conjunto de hipótesis (funciones), $\mathcal H$, que se considera pueden aproximar $f$; una función de error, $L$; y el error empírico $E(h | \mathcal X) = \sum_{x, c \in \mathcal X} L(c, h(x))$. Utilizando estos elementos la función buscada es: $h^* = \textsf{argmin}_{h \in \mathcal{H}} E(h | \mathcal X)$.

En general, la mayoría de los algoritmos de aprendizaje supervisado, $h \in \mathcal{H}$, tienen la forma de $h: (x_1, x_2, \ldots, x_d) \rightarrow c$ donde $x_i \in \mathbb R$ y $c \in \{0, 1\}$ en clasificación binaria, $c \in \{0, 1\}^K$ en clasificación multi-clase o multi-etiqueta y $c \in \mathbb R$ para regresión. En resumen los algoritmos de aprendizaje supervisado aprender por lo general en un espacio vectorial donde cada característica es una coordenada de este espacio.

La característica, descrita anteriormente, de los algoritmos de aprendizaje supervisado hace que el procedimiento para atacar el problema de categorización de texto sea utilizando una función, $m$, que transforma el texto a un espacio vectorial, es decir, $m: \text{texto} \rightarrow \mathbb R^d$. Con esta notación la función buscada es: $h^* = \textsf{argmin}_{h \in \mathcal{H}} E(h \circ m | \mathcal X)$. En este capítulo se presentarán diferentes formas para generar la función ( m ).

Bolsa de palabras

Probablemente la manera mas sencilla y directa para representar un texto en un espacio vectorial es creando una bolsa de palabras. Para este efecto se empieza con un vocabulario, $\mathcal V$, donde cada palabra, $v \in \mathcal V$, de este tiene asociada a un vector base, $\mathbf v$, (e.g., un vector coordenada). Utilizando estos elementos un documento se representa como la suma pesada de todos los vectores base asociados a cada palabra en el documento.

Por ejemplo, sea $\mathcal V=\{Aguascalientes, buenos, ciudad, días, estado\}$ y $\mathbf v_i$ el vector base asociado al i-ésimo elemento de $\mathcal V$. Usando estos componentes el texto “buenos días desde la ciudad de Aguascalientes en el estado de Aguascalientes” se representa como $w_2 \mathbf v_2 + w_4 \mathbf v_4 + w_3 \mathbf v_3 + w_1 \mathbf v_1 + w_5 \mathbf v_5 + w_1 \mathbf v_1$. Se puede observar que varias palabras, ie desde, la, de, en, y el, no forman parte del vocabulario, entonces no tiene una representación en el espacio vectorial. Otra característica que se puede observar es que Aguascalientes en un momento es ciudad y en otro es estado, pero en la representación vectorial esto queda representado como $2w_1 \mathbf v_1$.

En el video anterior hubo un error en la creación del grafo la línea correcta es graph.edge(a, b, len=str(d)).

Con el objetivo de profundizar en la representación de datos en espacios vectoriales se recomienda el siguiente artículo: A vector space model for automatic indexing

Pesado de términos

El pesado de términos es un tema de investigación actual donde se han ocupado varias técnicas tratando de identificar cuál es el mejor mecanismo para pesar los términos dada una tarea específica. Por ejemplo véase el siguiente artículo: Term-weighting learning via genetic programming for text classification.

 Preprocesamiento

El preprocesamiento es un tema que interesa a la comunidad científica, dado que los métodos de aprendizaje parten de los datos y un mejor tratamiento de los datos implica una mejora directa al rendimiento del algoritmo de aprendizaje utilizado. Por ejemplo, en este artículo científico se presenta un estudio de diferentes técnicas de preprocesamiento para textos informales en español.

Ejercicio: agrupando usuarios

Una manera de realizar un preprocesamiento de los datos es pesar la importancia de las características del vector, una forma de hacerlo es mediante la presencia o ausencia de términos (pesado binario), frecuencia de los términos (TF) mide la importancia local al documento, o frecuencia de términos con el inverso de la frecuencia de los documentos (TF-IDF) que es una combinación de una importancia local y global al conjunto de documentos.

Realizar un agrupamiento de usuarios que implemente un pesado TF-IDF de las características del vector.

Generar en un python notebook, que muestre la implementación del TF-IDF hecha por ustedes, los grupos generados y los primeros 10 representantes de cada grupo.

 Espacios semánticos - DeepEmoji

Como se ha visto existen diferentes maneras de representar un texto en un espacio vectorial, en el siguiente artículo se propone un esquema de aprendizaje a distancia.

Using millions of emoji occurrences to learn any-domain representations for detecting sentiment, emotion and sarcasm.

Aprendizaje a distancia se puede ver como un problema de aprendizaje supervisado, en este caso categorización de texto, donde la clase es identificada automáticamente en la colección, utilizando alguna heurística y una vez identificada se prosigue como cualquier problema de aprendizaje supervisado.

La manera en que se realiza el aprendizaje a distancia, en el artículo mencionado, es mediante la clasificación de emoji dado un texto. El procedimiento seguido es recolectar una cantidad significativa de tweets e identificar los emoji presentes en cada tweet, el emoji se quita del texto y se asocia como la clase del texto, esto se realiza para cada emoji encontrado en cada texto.

Una vez de haber creado el conjunto de entrenamiento se procede como cualquier problema de aprendizaje supervisado, en particular un problema donde se tienen 64 clases. Es importante recalcar que en este modelado lo importante es la probabilidad de cada clase, emoji, asociada al texto dado, de esta manera lo que se obtiene es que un texto es representado como un vector de 64 dimensiones.

Tomando esta idea como base realizamos nuestra implementación de DeepEmoji donde el conjunto de datos se construyó haciendo una muestra aleatoria de tweets recolectados desde diciembre de 2015 a la fecha. Solamente se dejaron aquellos tweets que tenían un tipo de emoji, en total, por clase se recolectaron 50,000 tweets y con eso se creo el conjunto de entrenamiento.

Se recolectaron 50,000 tweets por cada clase, el modelo de texto se creo con 128, 000 tweets aleatorios. Además, Se balanceó cada clase para tener la misma cantidad de elementos.

Una vez creado el conjunto de entrenamiento cada texto fue transformado a un espacio vectorial utilizando b4msa el cual se creó con 128, 000 tweets utilizando los siguientes parámetros

  from b4msa.textmodel import TextModel
  TextModel([x['text'] for x in data[:128000]],
             del_diac=True, num_option='group',
             usr_option='group', url_option='group',
             emo_option='delete', lc=True,
             del_dup=True, token_list=[-2, -1, 2, 3, 4])

Se realizó un entrenamiento uno contra todos donde la clase positiva tenía 50,000 elementos y las otras clases tenían 793 elementos cada una, como clasificador se usó una máquina de soporte vectorial con kernel lineal.

Espacios Semánticos - Word Embeddings

Recientemente, ha habido un auge en aplicar enfoques distribucionales del significado de las palabras en los textos, donde se asume que las palabras que co-occurren en el mismo contexto tienden a tener el mismo significado.

Lo que ha llevado al desarrollo del modelado semántico distribucional, modelos que implementan la semántica distribucional incluyen LSA (Latent Semantic Analysis) y enfoques de word embeddings como Global Vectors (GloVe) y Word2Vec.

La idea básica en las word embeddings es recolectar grandes cantidades de información y codificar en vectores de alta dimensión cómo se distribuyen las palabras de acuerdo a su contexto, aquí se asume que los vectores construidos contienen información semántica y sintáctica de la palabra codificada por medio de dichos vectores, esto es, cada palabra es representada como un vector de dimensión fija, por ejemplo de dimensión 300 como lo usa Word2Vec

Los parámetros en los que difieren los modelos incluyen el tipo de contexto (palabras, caracteres, o partes de la oración: sustantivo, adjetivo), contexto de la ventana (tamaño), pesado (frecuencia, entropía, información mutua, etc.), reducción de la dimensionalidad y medidas de similitud.

Este tipo de información se ha usado de forma genérica en tareas como identificación de Analogías donde se puede realizar operaciones con vectores como vector(Rey)- vector(Hombre)+ vector(Mujer), aplicando las operaciones se obtiene un vector cercano a la representación de vector(Reyna).

Para más detalles de las representaciones leer los siguientes artículos:

Linguistic Regularities in Continuous Space Word Representations.

Existen modelos preentrenados donde ya se tienen calculados los word embeddings para millones de palabras, por ejemplo, se tienen disponibles modelos para muchos lenguajes, entre ellos español, revisar en artículo:

Learning Word Vectors for 157 Languages.

 Ejercicio: espacios semánticos (Word Embeddings)

Dado el conjunto de datos (politicos.json) que contienen los textos de un usuario, modelar a los usuarios transformando sus textos a un espacio semántico por medio de la herramienta fasttext. Con la nueva representación semántica de cada usuario realizar un agrupamiento de dichos usuarios.

La especificación de uso de fasttext se puede ver en:

https://​fasttext.​cc/​docs/​en/​crawl-​vectors.​html

Generar un notebook con el modelado donde se haga explícito el uso de fasttext y una impresión del gráfica del modelado.

Uso de algoritmos de aprendizaje

Como se había mencionado, aprendizaje supervisado es encontrar una función $h^*$, que se comporta similar a una función generadora, $f$, la cuál se desconoce, utilizando un conjunto de entrenamiento, $\mathcal X=\{x_t, y_t\}_t^N$, donde $x_t$ representa un objeto y asociado a el está su respuesta $y_t=f(x_t)$. Tomando en cuenta que las entradas en el problema que se está estudiando son texto, entonces el problema de aprendizaje supervisado se modela como encontrar $h^* = \textsf{argmin}_{h \in \mathcal{H}} E(h \circ m | \mathcal X)$, donde $m$ es una función que transforma el texto a un vector, i.e., $m: \text{texto} \rightarrow \mathbb R^d$. Previamente, se han mostrado diferentes funciones transformadoras, $m$, y en esta lección se analizará el desempeño de diferentes clasificadores utilizando las funciones transformadoras vistas.

Se analizará el comportamiento de la mayoría de algoritmos de clasificación implementados en la librería sklearn utilizando como problemas de prueba las conjuntos presentados en el SemEval 2018 Task 1 Affect in Tweets, referente a intensidad de una emoción en los tres idiomas de la competencia, árabe, español e ingles.

Antes de iniciar esta comparación se requiere decidir cuales funciones de rendimiento serán utilizadas y qué metodología se seguirá para la evaluación. Empezando por la metodología dado que la competencia SemEval 2018 provee de conjunto de datos de entrenamiento y prueba, entonces se medirá el rendimiento de los clasificadores utilizando el conjunto de prueba y el conjunto de entrenamiento será utilizando para optimizar los parámetros del clasificador. Es importante recalcar que en la fase de entrenamiento el conjunto de prueba no se observa de ninguna manera.

Cabe mencionar que en el caso que solamente se cuente con el conjunto de entrenamiento una estrategia es utilizar validación cruzada, por ejemplo seguir un k-fold cross-validation.

 Rendimiento de Clasificadores

En el tema de medir el rendimiento de un clasificador encontramos diferentes medidas las cuales se pondrán su nombre en inglés su traducción es complicada para algunas de ellas.

Estas medidas son sensibles a conjuntos de datos desbalanceados. Es decir donde las clases no están igualmente representadas. Es fácil ejemplificar el esta limitación. Supóngase que se tiene un clasificador que siempre responde como clase positiva independientemente de la entrada, en un problema donde el 90% de los elementos son positivos ese clasificador tiene un accuracy de .90, lo cual haría pensar en un muy buen desempeño lo cual evidentemente no es cierto.

Con el objetivo de tener un mayor conocimiento sobre diferentes medidas de rendimiento de clasificadores ver el siguiente artículo: An Axiomatically Derived Measure for the Evaluation of Classification Algorithms

Posición de algoritmos

Dando una vista complementaria a la tabla de rendimiento de diferentes algoritmos de clasificación en problemas distintos, se puede ver la posición promedio de estos mediante un boxplot.

Esta visualización da una vista rápida que ayuda a la comparación de los diferentes clasificadores y en caso de que exista un algoritmo evidentemente superior este es fácilmente identificable.

 Ejercicio: comparación de algoritmos

Comparar los diferentes clasificadores utilizando la representación de Emoji Space, que se vio en la sesión de Espacios Semánticos.

Es decir la representación de fastText que se usa en el video se cambia por la representación de Emoji Space.

  1. Generar el boxplot para macro-F1, macro-Recall y macro-Precision de todos los clasificadores y tareas propuestas, siguiendo los pasos del video.
  2. Comparar el rendimiento de todos los clasificadores utilizando las dos representaciones.
  3. Compara el rendimiento del mejor clasificador de cada representación.

Técnicas de incorporación de conocimiento

Hasta este momento han sido utilizadas tres diferentes representaciones para crear un modelo de texto, estas representaciones son:

En particular, las dos últimas representaciones fueron utilizadas en diferentes clasificadores y se midió su rendimiento en diferentes problemas de categorización de texto, además se tienen todos los elementos para conocer cuál es la combinación que daría un mejor resultado. También se ha podido observar, en las mediciones de rendimiento de las diferentes representaciones, que estas no presentan un comportamiento equivalente entre ellas, habiendo ocasiones donde una representación es más adecuada para un cierto problema. Basado en lo anterior, es factible imaginar que la combinación de diferentes representaciones podrían dar como resultado un mejor clasificador. En el resto del documento se plantean diferentes formas para combinar estas representaciones.

Unión simple de representaciones

Posiblemente la forma más simple de unir las diferentes representaciones es mediante la unión directa de estas. Es decir, sea $X$ la representación del texto utilizando Word Embeddings; $X_e$ es la representación utilizando DeepEmoji; y $X_b$ la representación con una bolsa de palabras. Utilizando esta notación, la combinación de las representaciones sería: $D = X \cup X_e \cup X_b$.

En el siguiente video se muestra el procedimiento para generar un clasificador que utilice esta representación.

Ensamble

Recordando que un clasificador se puede ver como $h^* = \textsf{argmin}_{h \in \mathcal{H}} E(h \circ m | \mathcal X)$, donde $m$ es una función que transforma el texto a un vector. $m$ puede tomar diferentes formar, sea $m_b$ la transformación que corresponde a la bolsa de palabras; $m_f$ la transformación de word embeddings; y $m_e$ la transformación de DeepEmoji.

Utilizando estas tres representaciones se pueden entrenar tres clasificadores, uno por cada representación, es decir, $h^*_b$, $h^*_f$ y $h^*_e$. A cada clasificador se le pregunta sobre la clase a la que pertenece un texto y el resultado es una votación simple de sus repuestas.

Dada la cantidad de clases y clasificadores es probable que cada clasificador indique que pertenece a una clase y no se tengan elementos para llegar a un consenso, por este motivo es más practico utilizar las funciones de decisión de cada clasificador para hacer esta votación. Sea $d$ la función de decisión entonces la clase estaría dada por $\textsf{argmax} f(h^*_b, x) + f(h^*_f, x) + f(h^*_e, x)$, donde $x$ representa el texto.

Stack Generalization

Se puede observar que al utilizar la regla $\textsf{argmax} f(h^*_b, x) + f(h^*_f, x) + f(h^*_e, x)$ para realizar la predicción final se está asumiendo que todos los clasificadores aportan la misma información. Una manera de tomar en cuenta cada clasificador es utilizando otra función que reciba como entrada la salida de los clasificadores y tome una decisión en base a estas decisiones individuales. Es decir, se estaría buscando un función $s(f(h^*_b, x), f(h^*_f, x), f(h^*_e, x)$ que de la predicción final.

El procedimiento utilizado es describe en: Stacked generalization

 Ejercicion: Stack Generalization

Realizar una comparación en rendimiento (macro - F1) entre el método de Stack Generalization (tal como es presentó en el video) y la representación que se obtiene con la bolsa de palabras. Para esta comparación utilizar todos los problemas del SemEval2018

Conclusiones

En este curso se presentón una introducción al problema de categorización de texto en particular tomando como ejemplos problemas de análisis de sentimientos de la competencia SemEval 2018 Task 1 Affect in Tweets.

El curso presentó diferentes técnicas para representar textos como son bolsa de palabras y espacios semánticos. Utilizando esta representación se explicaron conceptos de aprendizaje supervisado y medidas de rendimiento de algoritmos de clasificación. Finalmente, se introdujeron diferentes técnicas para incorporar conocimiento de diferentes fuentes, en particular, fueron diferentes clasificadores y representaciones lo que se mostró.

En ingeotec hemos desarrollado varias herramientas (ver http://github.com/ingeotec) para la clasificación de texto las cuales son:

Autores

Mario Graff

Investigador Cátedras CONACYT asignado a INFOTEC

112 Circuito Tecnopolo Norte Col. Tecnopolo Pocitos II,
C.P. 20313, Aguascalientes, Ags, México.

Tel. +52 (555) 624 28 00 Ext. 6315
email: mario.graff at infotec.mx

Sabino Miranda Jiménez

Investigador Cátedras CONACYT asignado a INFOTEC

112 Circuito Tecnopolo Norte Col. Tecnopolo Pocitos II,
C.P. 20313, Aguascalientes, Ags, México.

Tel. +52 (555) 624 28 00 Ext. 6384
email: sabino.miranda at infotec.mx