Los vectores embebidos representan un formato fundamental de datos en aplicaciones de aprendizaje automático e inteligencia artificial. El sistema SonnetDB soporta de forma nativa el tipo de dato VECTOR(n) y facilita su manipulación mediante la sintaxis de literales con corchetes [v0, v1, ..., vn].
Definición del tipo VECTOR
Al crear tablas, se especifica la dimensión del vector mediante VECTOR(n):
-- Tabla para almacenar vectores de texto embebido
CREATE TABLE text_embeddings (
timestamp TIMESTAMP NOT NULL,
text_id TAG,
chunk_id TAG,
vec VECTOR(512),
word_count BIGINT
);
-- Tabla para características de imágenes
CREATE TABLE image_vectors (
timestamp TIMESTAMP NOT NULL,
img_key TAG,
features VECTOR(768),
category VARCHAR
);
Los vectores insertados deben coincidir exactamente con la dimensión declarada durante la creación de la tabla.
Sintaxis de literales con corchetes
La sinatxis [valor1, valor2, ...] permite representar vectores en consultas:
-- Inserción de vector de 4 dimensiones
INSERT INTO text_embeddings (timestamp, text_id, chunk_id, vec, word_count)
VALUES ('2024-11-15T08:30:00Z', 'text-005', 'seg-01', [0.45, -0.12, 0.72, 0.68], 192);
-- Inserción de vector de 512 dimensiones (ejemplo real)
INSERT INTO text_embeddings (timestamp, text_id, chunk_id, vec, word_count)
VALUES ('2024-11-15T08:30:00Z', 'text-006', 'seg-02', [0.08, 0.33, -0.04, 0.21, 0.55, -0.11 /* 512 elementos */], 210);
Inferencia de tipo en literales
El sistema determina automáticamente si el vector es entero o flotante según los valores proporcionados:
-- Vector de enteros
INSERT INTO image_vectors (timestamp, img_key, features)
VALUES ('2024-11-15T09:15:00Z', 'img-102', [128, 0, 255, 64]);
-- Vector de flotantes (recomendado)
INSERT INTO image_vectors (timestamp, img_key, features)
VALUES ('2024-11-15T09:15:00Z', 'img-103', [128.0, 0.0, 255.5, 64.2]);
Inserción masiva de datos vectoriales
Soporta inserción simultánea para escenarios de procesamiento masivo:
INSERT INTO text_embeddings (timestamp, text_id, chunk_id, vec, word_count)
VALUES
('2024-11-15T08:30:00Z', 'text-005', 'seg-01', [0.45, -0.12, 0.72, 0.68], 192),
('2024-11-15T08:30:00Z', 'text-005', 'seg-02', [-0.08, 0.45, 0.12, 0.33], 185),
('2024-11-15T08:30:00Z', 'text-005', 'seg-03', [0.67, -0.21, 0.05, 0.78], 203);
Ejemplos de funciones de distancia
Una vez almacenados los vectores, se pueden aplicar funciones de similitud:
-- Búsqueda por similitud coseno
SELECT text_id, chunk_id, word_count,
cosine_similarity(vec, [0.45, -0.12, 0.72, 0.68]) AS similarity
FROM text_embeddings
ORDER BY similarity DESC
LIMIT 5;
-- Búsqueda por distancia L2
SELECT img_key, timestamp,
l2_distance(features, [128.0, 200.0, 64.0, 32.0]) AS dist
FROM image_vectors
ORDER BY dist
LIMIT 10;
Recomendaciones de rendimiento
- Selección óptima de dimensiones: Para texto, 512-768 dimensiones; para imágenes, 768-1024. Ajustar según necesidades específicas.
- Índices HNSW: Implementar para búsquedas masivas (>100k registrso).
- Normalización: Preprocesar vectores antes de almacenar para mejorar precisión en distancias coseno.