En esencia, una base de datos vectorial es un sistema diseñado específicamente para almacenar y recuperar datos en forma de vectores. En este contexto, un vector es un conjunto ordenado de valores numéricos que puede representar desde coordenadas espaciales hasta atributos de características, como ocurre en machine learning y ciencia de datos, donde los vectores suelen representar las características de los objetos. La base de datos vectorial puede almacenar y recuperar estos vectores de características de forma eficiente.
Un embedding vectorial es el proceso de representar objetos, como palabras, frases o entidades, como vectores en un espacio continuo. Esta técnica se usa habitualmente para convertir datos de alta dimensionalidad y categóricos en vectores continuos de menor dimensión, que los algoritmos de machine learning pueden aprovechar con mayor eficacia. Los embeddings vectoriales son especialmente populares en procesamiento del lenguaje natural (NLP), donde se emplean para representar palabras o expresiones.
La idea principal detrás de los embeddings es capturar las relaciones semánticas entre objetos. En el caso de los word embeddings, por ejemplo, las palabras con significados similares se representan con vectores más cercanos entre sí en el espacio vectorial. Esto permite que los modelos de machine learning comprendan mejor las relaciones contextuales y semánticas entre palabras.
Partiendo del concepto de embeddings, los Large Language Models (LLMs) aprovechan estas representaciones numéricas para abordar tareas complejas de comprensión y generación de lenguaje.
LLMs y embeddings vectoriales
Como ejemplo concreto, la arquitectura subyacente del modelo de chat GPT utiliza vectores. El modelo procesa entradas, como texto, convirtiéndolas en vectores numéricos.
Estos vectores capturan la información semántica y contextual de la entrada, lo que permite al modelo entender y generar respuestas coherentes y relevantes. La arquitectura Transformer, sobre la que se construye GPT-3.5, utiliza mecanismos de self-attention para ponderar la importancia de diferentes palabras en una secuencia, mejorando aún más la capacidad del modelo para captar relaciones y contexto.
Self-attention hace referencia a la capacidad del modelo para asignar distintos grados de importancia a las palabras dentro de la secuencia de entrada.
En resumen, el modelo GPT-3.5 opera sobre representaciones vectorizadas del lenguaje para realizar diversas tareas de comprensión y generación. Este enfoque basado en vectores es una de las claves de su éxito en un amplio abanico de aplicaciones relacionadas con el lenguaje.
Navegando por los vectores: un recorrido práctico con PG Vector
PG Vector es una búsqueda de similitud vectorial de código abierto para Postgres. Vamos al grano y creemos una base de datos con Docker. Crea un archivo llamado docker-compose.yml y, en la línea de comandos, ejecuta: docker-compose up -d
services:
db:
hostname: db
image: ankane/pgvector
ports:
- 5432:5432
restart: always
environment:
- POSTGRES_DB=vectordb
- POSTGRES_USER=testuser
- POSTGRES_PASSWORD=testpwd
- POSTGRES_HOST_AUTH_METHOD=trustCon la tecnología de
El siguiente paso es crear una tabla; en este ejemplo, vamos a catalogar recursos de aprendizaje de DataCamp: cursos, blogs, tutoriales, pódcasts, chuletas, code alongs y certificaciones.
CREATETABLE resource (
id serialCONSTRAINT"PK_resource"PRIMARYKEY,
name varcharNOTNULL,
content textNOTNULL,
slug varcharNOTNULL,typevarcharNOTNULL,
embedding vector,CONSTRAINT"UQ_resource"UNIQUE(name,type));Con la tecnología de
La columna embedding se generará a partir de un objeto JSON en forma de cadena que representa los atributos del recurso { name, content, slug, type }. Para crear este embedding vectorial, usaremos un modelo de embedding.
Uno de los modelos disponibles en AWS Bedrock es amazon.titan-embed-text-v1. La configuración de Bedrock no se trata en este artículo; es solo un ejemplo entre muchos modelos de embedding capaces de lograr resultados similares. El objetivo principal es tomar una entrada de texto, usar un modelo de embedding para generar embeddings vectoriales y almacenarlos en la columna embedding.
// typescriptconst client =newBedrockRuntimeClient({region: process.env.AWS_REGION});const response =await client.send(newInvokeModelCommand({modelId:"amazon.titan-embed-text-v1",contentType:"application/json",accept:"application/json",body:JSON.stringify({inputText:JSON.stringify(resource),}),}));const{ embedding }=JSON.parse(newTextDecoder().decode(response.body));Con la tecnología de
# python
client = boto3.client("bedrock-runtime", region_name=region)
response = client.invoke_endpoint(
EndpointName="amazon.titan-embed-text-v1",
ContentType="application/json",
Accept="application/json",
Body=json.dumps({"inputText": json.dumps(resource)}))
embedding = json.loads(response["Body"].read().decode("utf-8"))["embedding"]Con la tecnología de
Operaciones y búsquedas vectoriales
Al poder almacenar datos junto con sus embeddings vectoriales, desbloqueamos todo el potencial de las bases de datos vectoriales: podemos interactuar con la base de datos en lenguaje natural y recuperar resultados con sentido sin esfuerzo.
Formula cualquier pregunta que quieras «hacerle a tus datos» y aplica el mismo embedding a ese texto. La consulta SQL sería así:
SELECT
name,
content,type,
slug,1-(embedding <=> $1)AS similarity
FROM
resource
WHERE1-(embedding <=> $1)> $2ORDERBY
similarity DESC;Con la tecnología de
Esta consulta emplea una búsqueda por similitud coseno. El parámetro $1 representa el embedding del texto de tu pregunta, mientras que el parámetro $2 actúa como umbral de similitud y conviene ajustarlo mediante pruebas. Su valor óptimo depende del tamaño de tu dataset y del nivel de relevancia que busques, lo que determina la granularidad de la información recuperada.
Con todo esto en marcha, crear una interfaz de chat es bastante directo. Los detalles de implementación quedan fuera del alcance de este artículo, pero aquí tienes algunos ejemplos usando mi dataset de DataCamp, que incluye más de 600 registros:
Conclusión y lecturas recomendadas
En este artículo hemos explorado el potente mundo de las bases de datos vectoriales, aprovechando PG Vector para mejorar nuestras capacidades de almacenamiento y recuperación. Si te animas a profundizar en los embeddings vectoriales, todavía hay mucho por descubrir. Para saber más sobre PG Vector, consulta su readme, que entra en detalle e incluye enlaces a clientes para tu lenguaje de programación favorito.
Una evolución natural tras entender los embeddings es la Retrieval Augmented Generation (RAG). Consiste en inyectar datos contextuales en los LLMs. Al hacerlo, RAG aporta al modelo conocimiento externo a sus datos de entrenamiento, permitiendo respuestas más informadas y relevantes al contexto.
También encontrarás una variedad de recursos de DataCamp que cubren otros aspectos de las bases de datos vectoriales, entre ellos:
Una guía completa sobre las mejores bases de datos vectoriales. Domina el almacenamiento de datos de alta dimensión, descifra información no estructurada y aprovecha las incrustaciones vectoriales para aplicaciones de IA.
Explora el intrincado mundo de las bases de datos de grafos con nuestra guía para principiantes. Comprende las relaciones entre datos, profundiza en la comparación entre bases de datos de grafos y relacionales, y explora casos prácticos de uso.
Descubre cómo mejorar PostgreSQL con capacidades de búsqueda vectorial utilizando pgvector. Este tutorial te guía a través de la instalación, las operaciones básicas y la integración con herramientas de IA.
En este tutorial, aprenderás sobre las máquinas de vectores de soporte, uno de los algoritmos de machine learning supervisado más populares y utilizados.
Descubra la potente fusión de estadística y aprendizaje automático. Explore cómo las técnicas estadísticas sustentan los modelos de aprendizaje automático, permitiendo la toma de decisiones basada en datos.
¡Desbloquea aplicaciones de IA más avanzadas, como la búsqueda semántica y los motores de recomendación, utilizando el modelo de incrustación de OpenAI!
¿Qué son las bases de datos vectoriales?
En esencia, una base de datos vectorial es un sistema diseñado específicamente para almacenar y recuperar datos en forma de vectores. En este contexto, un vector es un conjunto ordenado de valores numéricos que puede representar desde coordenadas espaciales hasta atributos de características, como ocurre en machine learning y ciencia de datos, donde los vectores suelen representar las características de los objetos. La base de datos vectorial puede almacenar y recuperar estos vectores de características de forma eficiente.
Imagen de Gary Alway
Embeddings vectoriales
Un embedding vectorial es el proceso de representar objetos, como palabras, frases o entidades, como vectores en un espacio continuo. Esta técnica se usa habitualmente para convertir datos de alta dimensionalidad y categóricos en vectores continuos de menor dimensión, que los algoritmos de machine learning pueden aprovechar con mayor eficacia. Los embeddings vectoriales son especialmente populares en procesamiento del lenguaje natural (NLP), donde se emplean para representar palabras o expresiones.
La idea principal detrás de los embeddings es capturar las relaciones semánticas entre objetos. En el caso de los word embeddings, por ejemplo, las palabras con significados similares se representan con vectores más cercanos entre sí en el espacio vectorial. Esto permite que los modelos de machine learning comprendan mejor las relaciones contextuales y semánticas entre palabras.
Partiendo del concepto de embeddings, los Large Language Models (LLMs) aprovechan estas representaciones numéricas para abordar tareas complejas de comprensión y generación de lenguaje.
LLMs y embeddings vectoriales
Como ejemplo concreto, la arquitectura subyacente del modelo de chat GPT utiliza vectores. El modelo procesa entradas, como texto, convirtiéndolas en vectores numéricos.
Estos vectores capturan la información semántica y contextual de la entrada, lo que permite al modelo entender y generar respuestas coherentes y relevantes. La arquitectura Transformer, sobre la que se construye GPT-3.5, utiliza mecanismos de self-attention para ponderar la importancia de diferentes palabras en una secuencia, mejorando aún más la capacidad del modelo para captar relaciones y contexto.
Self-attention hace referencia a la capacidad del modelo para asignar distintos grados de importancia a las palabras dentro de la secuencia de entrada.
En resumen, el modelo GPT-3.5 opera sobre representaciones vectorizadas del lenguaje para realizar diversas tareas de comprensión y generación. Este enfoque basado en vectores es una de las claves de su éxito en un amplio abanico de aplicaciones relacionadas con el lenguaje.
Navegando por los vectores: un recorrido práctico con PG Vector
PG Vector es una búsqueda de similitud vectorial de código abierto para Postgres. Vamos al grano y creemos una base de datos con Docker. Crea un archivo llamado
docker-compose.ymly, en la línea de comandos, ejecuta:docker-compose up -dEl siguiente paso es crear una tabla; en este ejemplo, vamos a catalogar recursos de aprendizaje de DataCamp: cursos, blogs, tutoriales, pódcasts, chuletas, code alongs y certificaciones.
La columna embedding se generará a partir de un objeto JSON en forma de cadena que representa los atributos del recurso { name, content, slug, type }. Para crear este embedding vectorial, usaremos un modelo de embedding.
Uno de los modelos disponibles en AWS Bedrock es
amazon.titan-embed-text-v1. La configuración de Bedrock no se trata en este artículo; es solo un ejemplo entre muchos modelos de embedding capaces de lograr resultados similares. El objetivo principal es tomar una entrada de texto, usar un modelo de embedding para generar embeddings vectoriales y almacenarlos en la columna embedding.Operaciones y búsquedas vectoriales
Al poder almacenar datos junto con sus embeddings vectoriales, desbloqueamos todo el potencial de las bases de datos vectoriales: podemos interactuar con la base de datos en lenguaje natural y recuperar resultados con sentido sin esfuerzo.
Formula cualquier pregunta que quieras «hacerle a tus datos» y aplica el mismo embedding a ese texto. La consulta SQL sería así:
Esta consulta emplea una búsqueda por similitud coseno. El parámetro $1 representa el embedding del texto de tu pregunta, mientras que el parámetro $2 actúa como umbral de similitud y conviene ajustarlo mediante pruebas. Su valor óptimo depende del tamaño de tu dataset y del nivel de relevancia que busques, lo que determina la granularidad de la información recuperada.
Con todo esto en marcha, crear una interfaz de chat es bastante directo. Los detalles de implementación quedan fuera del alcance de este artículo, pero aquí tienes algunos ejemplos usando mi dataset de DataCamp, que incluye más de 600 registros:
Conclusión y lecturas recomendadas
En este artículo hemos explorado el potente mundo de las bases de datos vectoriales, aprovechando PG Vector para mejorar nuestras capacidades de almacenamiento y recuperación. Si te animas a profundizar en los embeddings vectoriales, todavía hay mucho por descubrir. Para saber más sobre PG Vector, consulta su readme, que entra en detalle e incluye enlaces a clientes para tu lenguaje de programación favorito.
Una evolución natural tras entender los embeddings es la Retrieval Augmented Generation (RAG). Consiste en inyectar datos contextuales en los LLMs. Al hacerlo, RAG aporta al modelo conocimiento externo a sus datos de entrenamiento, permitiendo respuestas más informadas y relevantes al contexto.
También encontrarás una variedad de recursos de DataCamp que cubren otros aspectos de las bases de datos vectoriales, entre ellos:
¡Feliz programación y que tus proyectos basados en vectores sean tan reveladores como gratificantes!