Literales VECTOR: Manipulación de vectores embebidos con sintaxis [v0, v1, ...]

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.

Etiquetas: vector-database embeddings SQL-syntax HNSW-index vector-dimensions

Publicado el 9-21 03:47