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.
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.
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.
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.
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):
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
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.