El modelo Bag-of-Words (BoW) es una técnica comúnmente utilizada en el procesamiento del lenguaje natural (NLP) y la minería de texto para convertir texto en una forma que se pueda ser analizada y procesada por algoritmos de aprendizaje automático.
El modelo BoW trata cada documento como una 'bolsa' de palabras, ignorando completamente el orden de las palabras y enfocándose únicamente en la frecuencia (o presencia) de palabras. Representa los documentos como vectores en los cuales cada dimensión corresponde a una palabra del vocabulario, y el valor puede representar la frecuencia de esa palabra en el documento.
Tokenización: Divide el texto en palabras o 'tokens'.
Construcción de Vocabulario: Crea un vocabulario de todas las palabras únicas presentes en el conjunto de datos.
Vectorización: Cada documento se convierte en un vector, donde cada dimensión representa una palabra del vocabulario, y el valor en esa dimensión representa la frecuencia de esa palabra en el documento (o simplemente la presencia/ausencia de la palabra).
Por ejemplo:
Tomemos un pequeño corpus de tres frases para ilustrar cómo funciona:
Primero, realizamos la tokenización (en este caso, palabras) y construimos un vocabulario con todas las palabras únicas en nuestro corpus:
Vocabulario: {el, gato, juega, en, jardín, perro, duerme, casa, niño, con}
Tenemos 10 palabras únicas en nuestro vocabulario. Por tanto, cada frase puede ser representada como un vector de 10 dimensiones. Es decir, cada palabra del vocabulario es un vector de 10 dimensiones, donde todas las dimensiones son cero excepto la dimensión correspondiente a la palabra, que es 1.
el | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
---|---|---|---|---|---|---|---|---|---|---|
gato | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
juega | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
en | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 |
jardín | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
perro | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
duerme | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
casa | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
niño | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 |
con | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
Ahora, representamos cada frase como un vector en este espacio de vocabulario donde el vector resultante se obtiene sumando los vectores de las palabras que aparecen en la frase, como se muestra a continuación:
"El gato juega en el jardín."
"El perro duerme en la casa."
"El niño juega con el perro."
En la primera frase el primer número representa la cantidad de veces que aparece la palabra "el", el segundo número representa "gato", el tercero "juega", y así sucesivamente según el orden del vocabulario que hemos establecido. Por ejemplo, en la tercera frase, "el" aparece dos veces, "juega" una vez, "perro" una vez, "niño" una vez y "con" una vez, lo que se refleja en el vector correspondiente.
Este proceso convierte las frases en vectores numéricos que pueden ser utilizados en varias tareas de NLP, como la clasificación de texto, la recuperación de información, etc. Espero que esto te ayude a entender mejor cómo funciona el modelo Bag-of-Words!
Simplicidad: Es fácil de entender e implementar.
Eficiencia: Es computacionalmente menos intensivo en comparación con modelos más complejos.
Pérdida de Información: Al ignorar el orden de las palabras, se puede perder información importante sobre el contexto y la semántica.
Dimensionalidad Alta: Puede resultar en vectores de dimensión muy alta si el vocabulario es grande, lo que puede aumentar los requerimientos computacionales.
Problemas con Palabras Infrecuentes: Palabras con baja frecuencia pueden no aportar mucho a la similitud entre documentos y pueden incluso introducir ruido.
La similitud del coseno es una métrica utilizada para determinar el parecido entre dos vectores en un espacio multidimensional. Es calculada como el coseno del ángulo formado entre dos vectores, lo que permite medir la orientación, más que la magnitud, para determinar la similitud. Matemáticamente, se calcula utilizando la fórmula:
Similitud del coseno=A⋅B||A||⋅||B||donde:
El valor resultante estará en el rango de -1 a 1, donde 1 indica que los vectores son idénticos, 0 indica que son ortogonales (sin similitud) y -1 indica que están opuestos. Esta métrica es ampliamente utilizada en análisis de texto, recuperación de información, y ciencia de datos para medir la similitud entre documentos o elementos en general.
Utilizando BoW y la similitud del coseno podemos calcular la similitud entre documentos. Supongamos que queremos medir el parecido entre diferentes frases (o documentos). Podemos utilizar el modelo BoW para convertir cada frase en un vector y luego medir la similitud entre los vectores utilizando una métrica de similitud como la distancia euclidiana o la similitud del coseno. Esto puede ser útil en tareas como la recuperación de información, la clasificación de texto, etc.
Veamos un ejemplo sencillo. Supongamos que tenemos un corpus de cuatro frases:
Ahora nuestro vocabulario será:
Vocabulario: {el, gato, juega, en, jardín, perro, duerme, casa, niño, con, coche, es, azul}
Por tanto, nuestros nuevos vectores de frases serán:
1. Similitud entre Frase (A) y Frase (B):
2. Similitud entre Frase (A) y Frase (C):
3. Similitud entre Frase (A) y Frase (D):
Adquirir experiencia práctica en el cálculo de la similitud entre documentos utilizando el método de bag-of-words, la métrica de similitud del coseno y la utilización de funciones de PyTorch.
Se proporciona un conjunto de 12 documentos relacionados con tecnología móvil y vehículos eléctricos. En el conjunto, algunos documentos tratan solo de tecnología móvil, otros solo de vehículos eléctricos, y hay documentos que abordan ambos temas simultáneamente.
Preprocesamiento de datos:
Construcción de bag-of-words:
Cálculo de la similitud del coseno:
cosine_similarity
de PyTorch.Análisis:
(Opcional) TF-IDF: