Embeddings y su aplicación a análisis de texto

  • Artículos
  • Data Science & IA

Continuando con la temática del blog anterior de Variable Latente, en este blog se va a profundizar el concepto de vectorización de datos de entrada y representación semántica, aplicándolo específicamente al uso de embeddings en Machine Learning (ML) para el procesamiento de texto.

Introducción

Para utilizar ML en la estimación de una característica en base a atributos, estos deben ser representables como un vector o un punto en el espacio. En muchos casos, el input que debe recibir el modelo es intuitivo y claro. Por ejemplo, al predecir la calidad de un vino basándose en sus características, los valores numéricos como la acidez o la concentración de alcohol se pueden representar fácilmente como un vector de entrada.

Sin embargo, en casos donde los datos no se pueden representar directamente como vectores, como en el caso del texto, la definición de la entrada para el modelo es más compleja. El texto es un tipo de dato no estructurado, lo que dificulta la aplicación directa de ML. Para tareas como predecir el autor o hacer análisis de sentimientos de un texto, se pueden aplicar diversas metodologías para transformar cada documento en un vector que el modelo pueda utilizar. En este blog, se va a explorar cómo aplicar ML al texto y las diferentes formas de vectorizarlo, como los embeddings.

Métodos clásicos: Bag of words

Una de las formas más tradicionales de abordar el problema de ML aplicado a texto es la técnica bag of words (Harris, 1954, Qader et. al., 2019). Para aplicar esta técnica se debe primero tokenizar el texto, que es separar el documento en unidades llamadas tokens, donde en este caso cada palabra es un token distinto. Luego, cada documento se representa como un vector donde cada índice corresponde a un token único, y su valor es el número de veces que aparece el token en el documento (Figura 1). Con esta metodología, los datos de entrada corresponden a una matriz donde cada fila es un documento distinto y cada columna es un token único del diccionario de todos los tokens presentes en los documentos a clasificar.

Esta técnica permite obtener relativamente buenos resultados en tareas simples, como el análisis de sentimientos (Medhat et. al., 2014). Sin embargo, presenta al menos dos problemas que dificultan el entrenamiento de modelos. En primer lugar, el tamaño del vector que representa cada documento está dado por el número de palabras en el documento, que puede tener una extensión muy elevada. Si se tiene un diccionario de 50 mil palabras, la dimensión de cada vector será de 50 mil. En segundo lugar, los documentos pueden tener pocas palabras, generalmente muchas menos que el diccionario, causando que cada vector tenga mayoritariamente ceros (sparse).

Figura 1: Ejemplo de vectorización de texto realizada al entrenar un modelo de bag of words. Adaptado de Wasnik, 2020.

Existen formas de lidiar con estos problemas. Por ejemplo, es común eliminar palabras que carecen de sentido por sí solas (denominadas stopwords, por ejemplo: de, a, te, yo, ha, etc.) y palabras presentes en una fracción muy pequeña de los documentos, ya que no aportan mucha información al modelo. También se aplican técnicas como la normalización y lematización de las palabras que permiten agrupar diferentes conjugaciones de un mismo verbo, diminutivos y otras derivaciones. Con estos métodos se puede reducir en gran medida el tamaño del diccionario y por lo tanto los vectores de cada documento.

Sin embargo, incluso mediante la lematización, pueden encontrarse palabras similares o con el mismo significado (sinónimos) presentes en diferentes columnas, lo que provoca que el modelo las trate como distintas. También, a pesar de la reducción del tamaño del diccionario, la dimensión de los vectores puede continuar siendo elevada, dificultando el entrenamiento de un modelo y provocando overfitting.

Word embeddings

Una manera con la que se pueden resolver los problemas que presentan las técnicas como bag of words es utilizar word embeddings. Estos son representaciones vectoriales densas de tamaño arbitrario que representan la semántica de cada palabra. De esta forma, palabras sinónimas o derivadas (plurales, diminutivos, conjugaciones, etc.) tendrán embeddings similares, evitando la problemática de representar cada palabra distinta con una columna diferente. De esta forma, al aplicar esto a ML, la representación vectorial de cada documento podría derivarse de los embeddings de las palabras que lo componen. Por ejemplo, este podría ser el promedio o el máximo de los vectores de cada palabra del documento, resolviendo los problemas de tamaño y sparcity (exceso de ceros). Esto se debe a que la dimensión de los word embeddings es considerablemente más baja que los vectores de bag of words.

Pero ¿cómo se obtienen estas representaciones? Los word embeddings se pueden obtener utilizando técnicas de ML. Existen distintos métodos para esto. Un método denominado Continuous Bag-Of-Words Model (CBoW) (Wang et. al., 2017) consiste en entrenar una red neuronal que, dado un contexto, prediga una palabra (Figura 2). Se podría considerar como contexto las 2 palabras anteriores y las 2 siguientes a la palabra a predecir. En base a la oración “Los primeros modelos atómicos consideraban básicamente tres tipos de partículas subatómicas: protones, electrones y neutrones” se tienen las siguientes combinaciones:

Figura 2: Explicación de CBoW. A la izquierda se muestran las diferentes entradas y salidas que el modelo utiliza para aprender los word embeddings para una frase determinada. A la derecha se muestra un diagrama del modelo para la primera fila de la tabla.

Específicamente, se concatenan los embeddings de las cuatro palabras de contexto y se usan como entrada de una red neuronal, cuya salida se busca que sea lo más similar al embedding de la palabra objetivo. En el proceso de entrenamiento, se ajustan tanto los pesos de la red como los embeddings de todas las palabras observadas, de forma tal que palabras presentes en contextos similares adquieran embeddings similares. Un aspecto primordial de los modelos como CBoW es que, para obtener buenos resultados, es necesario usar millones de datos para entrenarlos.

En primera impresión, la complejidad del entrenamiento de embeddings empeora el panorama de clasificación de texto, ya que aumenta la dificultad de la tarea. Sin embargo, una de las propiedades más favorables de los word embeddings es que estos pueden ser utilizados para distintas tareas y no necesitan ser reentrenados para cada una. Así, existen diccionarios con word embeddings pre-entrenados y listos para usar en otras aplicaciones. Un ejemplo de embeddings pre-entrenados es el paquete GloVe (Pennington et. al., 2014). Al usarlos, se está utilizando información previa referente al significado de los términos. Haciendo el símil con la tarea de lectura humana, esto es equivalente a saber leer antes de aprender una temática nueva de un libro, lo cual es posible, ya que el significado de las palabras en general es invariante al contexto. De esta forma, los embeddings sólo se deben entrenan una vez y luego pueden ser aplicados a otras tareas.

Propiedades de los word embeddings

Los word embeddings tienen propiedades que resultan muy útiles para ML (Jang & Myaeng, 2017, Almeida & Xexéo, 2019). En primer lugar, se tiene la propiedad ya mencionada de que palabras que aparecen en contextos similares adquieren representaciones similares, por lo que quedan cerca en el espacio vectorial (Figura 3, izquierda).

En segundo lugar, las palabras se distribuyen de manera tal que es posible hacer operaciones algebraicas para obtener analogías. En otras palabras, se observa que la relación semántica de las palabras se ve reflejada en la relación entre sus vectores. A modo de ejemplo, la parte derecha de la Figura 3 muestra que la relación semántica entre España y Madrid es similar a la relación entre el Reino Unido y Londres y múltiples otros pares país/ciudad, ya que en todos los casos la segunda palabra es la ciudad capital de la primera palabra, por lo que la relación semántica es la misma. De esta forma, se cumpliría semánticamente que: Pekin – China + Rusia = Moscú, y esto ocurre también con sus embeddings.

En tercer lugar, este tipo de representaciones permite que modelos entrenados con ellas generalicen mejor que modelos entrenados con otro tipo de representaciones. Por ejemplo, si un modelo de clasificación fue entrenado con frases como “Me gusta leer revistas”, este podría ser capaz de asignarle la misma etiqueta que a frases como “Me encanta leer libros” incluso si las palabras “encanta” y “libros” no estén en los documentos usados para entrenar el modelo, siempre que se usen embeddings pre-entrenados.

Figura 3: Visualizaciones de proyección lineal de word embeddings mediante PCA. A la izquierda, visualización de 38 palabras distintas, mostrando agrupaciones según temáticas similares. A la derecha, visualización de países y ciudades mostrando una relación lineal similar entre ciudades y su país de origen. Adaptados de Li et. al., 2019 y de Torregrossa et. al., 2021, respectivamente.

Embeddings de sub-palabras

Hasta ahora se ha visto ML aplicado a texto considerando una palabra por token. Sin embargo, existe más de una forma de tokenizar un documento. Una de estas involucra separar las palabras en sub-palabras y considerar cada una como un token distinto con su propio embedding. Para entender la utilidad de esto se puede analizar el proceso humano de comprensión lingüística.

Se puede notar que, al menos en idiomas como el español e inglés, entender el significado de una palabra usualmente involucra leerla en sub-palabras. Las palabras “Casa”, “Casas” y “Casita” todas comparten término “Cas” seguido de los sufijos “a”, “as”, “ita” e “itas”. El significado principal de la palabra está vinculado al prefijo (o raíz) “Cas” mientras que el sufijo realiza una leve modificación al significado de la palabra al indicar que se trata de un plural (sufijo “as”) o un diminutivo (sufijo “ita”). Así, para aprender a leer no es necesario memorizarse todas las variantes de palabras, sino que basta con aprender las raíces como “Cas” y entender las reglas gramaticales para las diferentes conjugaciones, derivaciones y el significado de los prefijos y sufijos.

La tokenización de sub-palabras emula este proceso, siendo más robusto que la tokenización de palabras, ya que cada token se observa una mayor cantidad de veces. Se obtiene un mayor entendimiento a la estructura de las palabras y el lenguaje, permitiendo entender palabras no observadas en el entrenamiento e incluso errores gramaticales.

Existen múltiples posibilidades de tokenización por sub-palabras. Por ejemplo, la palabra “Comidita” podría tokenizarse como “Co” “mi” “di” “ta”, o “Com” “id” “ita” y una cantidad muy alta de posibilidades. Uno de los métodos más populares para tokenizar subpalabras es el byte pair encoding (BPE). El BPE (Sennrich et. al., 2015), es una técnica derivada de algoritmos de compresión que involucra el siguiente procedimiento para agrupar y tokenizar sub-palabras (Khanna et. al., 2021):

  • Se comienza con 1 token por carácter
  • Se itera hasta que la lista de tokens distintos supera a un valor deseado:
  1. Se cuenta la frecuencia de tokens contiguos
  2. Se agrupan los tokens contiguos con mayor frecuencia en un mismo token
  3. Se remplaza el nuevo token en todas las instancias posibles
  • Se retorna la lista de tokens

En base a la lista de tokens es posible tokenizar cualquier texto buscándolos exhaustivamente en el texto, comenzando primero por los más grandes y luego los más pequeños hasta llegar a los tokens compuestos por 1 solo carácter.

Para obtener los embeddings de estas sub-palabras se pueden usar los mismos métodos que para word embeddings como CBoW o Skip-gram (Bojanowski et. al., 2017). La forma más común en que los embeddings de sub-palabras se entrenan es en el proceso mismo de entrenamiento de modelos generativos autosupervisados de gran capacidad y profundidad como BERT o GPT. Estos modelos buscan entender la estructura y semántica de términos, palabras y frases al intentar recomponerlas comprimiendo la información utilizando vectores de dimensión reducida llamado variable latente (para más información, ver el blog de Variable latente). Al producir una comprensión semántica profunda, logran decodificar la inflexión del significado que produce cada sub-palabra

Conclusiones

En este blog, se abordaron temáticas relacionadas a ML aplicado a texto, todas las problemáticas asociadas a esta área y cómo los embeddings (de palabras o sub-palabras) son una posible solución. Es necesario notar que esta solución pudo ser desarrollada gracias al avance del Deep Learning y, más adelante, el GenIA (para más información, ver el blog de IA aplicada, capítulo 4). Esto a su vez responde a un avance tecnológico que está fuertemente ligado a las mejoras en capacidad de cómputo. Por esto, es muy posible que la forma en que se aborda esta problemática cambie significativamente en los próximos años acorde a los avances en estas áreas. De todas formas, el enfoque de embeddings es un avance significativo y cuya utilidad es tal que se ha extendido a múltiples áreas de ML, incluyendo análisis de imágenes, algoritmos de recomendación, etc. Por esto, los embeddings probablemente seguirán siendo una metodología pivotal en problemas de ML sobre datos complejos por varios años más.

Referencias

  1. Almeida, F., & Xexéo, G. (2019). Word embeddings: A survey. arXiv preprint arXiv:1901.09069.
  2. Bojanowski, P., Grave, E., Joulin, A., & Mikolov, T. (2017). Enriching word vectors with subword information. Transactions of the association for computational linguistics, 5, 135-146.
  3. Harris, Z. S. (1954). Distributional structure. Word10(2-3), 146-162.
  4. Jang, K. R., & Myaeng, S. H. (2017, April). Elucidating conceptual properties from word embeddings. In Proceedings of the 1st Workshop on Sense, Concept and Entity Representations and their Applications (pp. 91-95).
  5. Khanna, C. (2021). Byte-Pair Encoding: Subword-based tokenization algorithm. Medium. https://towardsdatascience.com/byte-pair-encoding-subword-based-tokenization-algorithm-77828a70bee0
  6. Li, D., Zhang, J., & Li, P. (2019, May). Tmsa: a mutual learning model for topic discovery and word embedding. In Proceedings of the 2019 SIAM International Conference on Data Mining(pp. 684-692). Society for Industrial and Applied Mathematics.
  7. Medhat, W., Hassan, A., & Korashy, H. (2014). Sentiment analysis algorithms and applications: A survey. Ain Shams engineering journal5(4), 1093-1113.
  8. Pennington, J., Socher, R., & Manning, C. D. (2014, October). Glove: Global vectors for word representation. In Proceedings of the 2014 conference on empirical methods in natural language processing (EMNLP) (pp. 1532-1543).
  9. Qader, W. A., Ameen, M. M., & Ahmed, B. I. (2019, June). An overview of bag of words; importance, implementation, applications, and challenges. In 2019 international engineering conference (IEC) (pp. 200-204). IEEE.
  10. Sennrich, R., Haddow, B., & Birch, A. (2015). Neural machine translation of rare words with subword units. arXiv preprint arXiv:1508.07909.
  11. Torregrossa, F., Allesiardo, R., Claveau, V., Kooli, N., & Gravier, G. (2021). A survey on training and evaluation of word embeddings. International journal of data science and analytics11(2), 85-103.
  12. Wang, Q., Xu, J., Chen, H., & He, B. (2017, May). Two improved continuous bag-of-word models. In 2017 international joint conference on neural networks (IJCNN) (pp. 2851-2856). IEEE.
  13. Wasnik, A. (2020). Creating Bag of Words Model from Scratch in python. Ask Python. https://www.askpython.com/python/examples/bag-of-words-model-from-scratch