Esta entrada de blog trata el concepto de embeddings y bases de datos vectoriales. En primer lugar se explica qué son los embeddings y cómo se utilizan en el campo del Natural Language Processing (NLP). A continuación, se ofrece una explicación de los vectores en un espacio con tres coordenadas y su extensión a vectores multidimensionales. Por último, se presenta ChromaDB, una base de datos vectorial especializada.

¿Qué es un embedding?

Un embedding es una técnica en el ámbito del aprendizaje automático y el procesamiento de datos que tiene como objetivo transformar objetos como palabras, frases o documentos en un espacio vectorial continuo. En este espacio vectorial, los objetos similares están representados por vectores similares, lo que significa que se encuentran próximos entre sí. Los embeddings se utilizan frecuentemente para capturar y analizar el significado semántico de los textos.

Vectores y el espacio numérico

Vectores en tres dimensiones

Un vector es una lista de números que pueden considerarse como coordenadas en un espacio. En la práctica, suelen conocerse tres dimensiones: x, y y z. Estas dimensiones pueden representarse fácilmente de forma visual:

  • x: eje horizontal

  • y: eje vertical

  • z: profundidad

Un punto en este espacio tridimensional puede describirse mediante un vector como (x, y, z). Por ejemplo, un punto podría representarse mediante el vector (1, 2, 3), lo que indica su posición en este espacio. En el espacio tridimensional, la palabra “Lebewesen” estaría ubicada más cerca de la palabra “Mensch” que de la palabra “Handball”.

Vectores multidimensionales

En matemáticas y en el aprendizaje automático se trabaja a menudo con espacios de alta dimensión, que tienen más de tres dimensiones. Cada dimensión adicional representa otra propiedad independiente o característica de los datos. Por ejemplo:

  • 4 dimensiones: (x, y, z, w)

  • 100 dimensiones: (x1, x2, x3, …, x100)

Aunque estas dimensiones adicionales no pueden imaginarse visualmente, ayudan a capturar con mayor precisión datos complejos y sus relaciones. Cada dimensión aporta un nuevo tipo de información a la representación global del punto (o palabra), p. ej. temperatura, peso, color, etc. En vectores multidimensionales, por tanto, las coordenadas x, y y z no se usan para la descripción espacial, sino para expresar la relación semántica entre las palabras.

Esta formulación deja claro que en espacios vectoriales de alta dimensión las dimensiones representan diferentes características o propiedades y no se limitan a descripciones espaciales. Las coordenadas muestran, en cambio, cómo se relacionan semánticamente las palabras entre sí.

Análisis de corpus de texto y embeddings

Para maximizar la eficiencia y precisión de la base de datos vectorial de ChromaDB, es imprescindible un análisis cuidadoso del corpus de texto. Este análisis sirve para preparar los textos y extraer características relevantes que luego se incrustan en el espacio vectorial. Mediante este proceso es posible capturar y aprovechar con mayor precisión las similitudes semánticas entre los textos, lo que mejora considerablemente el rendimiento de ChromaDB en la práctica. Este proceso incluye varios pasos:

  1. Preparación del corpus: recopilación y limpieza de textos.

  2. Tokenización: división del texto en palabras o frases.

  3. Normalización: unificación de las palabras (p. ej. minúsculas, stemming).

  4. Eliminación de stopwords: supresión de palabras frecuentes pero poco informativas.

  5. Extracción de características: métodos como Bag of Words o TF-IDF para ponderar las palabras.

  6. Modelado y análisis: uso de embeddings de palabras o modelado de temas para captar significados semánticos y temas.

ChromaDB

ChromaDB es una base de datos vectorial especializada diseñada para almacenar, gestionar y consultar vectores. Las bases de datos vectoriales son especialmente útiles en aplicaciones de NLP, donde es necesario capturar la similitud semántica entre textos. ChromaDB permite añadir documentos, convertirlos en vectores y realizar consultas basadas en estos vectores.

Ejemplo de ChromaDB

A continuación se muestra un ejemplo de cómo usar ChromaDB para añadir documentos y realizar una consulta. Nota: en Visual Studio Code surgieron numerosos bugs al ejecutar los ejemplos. En cambio, PyCharm funcionó sin problemas.

FeldBeschreibungWert
idsLista de las IDs de los documentos devueltos[[‘id1’, ‘id2’]]
distancesLista de las distancias entre la consulta y los documentos devueltos. Cuanto menor sea el valor, más similar.[[1.0404009819030762, 1.2430799007415771]]
metadatasLista de los metadatos de los documentos devueltos[[None, None]]
embeddingsIncrustaciones de los documentos. En este caso no incluidasNone
documentsLista de los textos reales de los documentos devueltos como resultado de la consulta[[‘This is a document about pineapple’, ‘This is a document about oranges’]]
urisURIs de los documentos devueltos. En este caso no incluidasNone
dataDatos adicionales, si los hubiera. En este caso no incluidosNone
includedLista de los campos que están incluidos en los resultados[‘metadatas’, ‘documents’, ‘distances’]

Medición de distancia para determinar la similitud entre vectores

Los valores de distancia en la salida representan la similitud entre la consulta y los documentos devueltos. ChromaDB utiliza modelos de incrustaciones para proyectar documentos en un espacio vectorial multidimensional, donde la similitud se mide mediante las distancias entre estos vectores.

La distancia entre vectores en un espacio multidimensional se calcula habitualmente mediante diferentes métodos métricos. Uno de los métodos más comunes es el cálculo de la distancia euclidiana. Otros métodos incluyen la similitud del coseno, la distancia Manhattan y otros.

Persistencia de las entradas