🧮

Embeddings

🧑‍🍳 Cocinero

Texto como vectores

Los embeddings convierten texto en números (vectores). Esto permite buscar por significado, no solo por palabras exactas.


¿Qué es un embedding?

"Hola mundo" → [0.12, -0.34, 0.56, ..., 0.78]
                     (1536 dimensiones)

Textos similares tienen vectores similares.


Casos de uso

UsoEjemplo
Búsqueda semántica"comida italiana" encuentra "pizza"
RecomendacionesProductos similares
RAGEncontrar contexto relevante para LLMs
ClasificaciónAgrupar textos por tema

Modelos de embeddings

ModeloDimensionesProveedor
text-embedding-3-small1536OpenAI
text-embedding-3-large3072OpenAI
voyage-31024Voyage AI
all-MiniLM-L6-v2384HuggingFace (local)

Ejemplo con OpenAI

import OpenAI from 'openai'

const openai = new OpenAI()

const response = await openai.embeddings.create({
  model: 'text-embedding-3-small',
  input: 'Tu texto aquí'
})

const vector = response.data[0].embedding
// [0.12, -0.34, 0.56, ...]

Similitud coseno

Mide qué tan similares son dos vectores (0 a 1):

function cosineSimilarity(a: number[], b: number[]): number {
  let dot = 0, normA = 0, normB = 0
  for (let i = 0; i < a.length; i++) {
    dot += a[i] * b[i]
    normA += a[i] * a[i]
    normB += b[i] * b[i]
  }
  return dot / (Math.sqrt(normA) * Math.sqrt(normB))
}

Bases de datos vectoriales

Para almacenar y buscar embeddings eficientemente:

DBTipoIdeal para
PineconeCloudProducción
Supabase pgvectorCloudFull-stack
ChromaDBLocalDesarrollo

🎯 Caso Real: Detección de Anomalías

Los embeddings son ideales para detectar comportamientos inusuales en fintech.

Ejemplo: Transacciones Sospechosas

// Vectorizar el comportamiento "normal" del usuario
const perfilNormal = await embedTransaction({
  montoPromedio: 150,
  horarioUsual: '9am-6pm',
  ubicaciones: ['Ciudad de México', 'Guadalajara'],
  comerciosFrecuentes: ['Amazon', 'Uber', 'Starbucks']
})

// Nueva transacción
const transaccion = await embedTransaction({
  monto: 5000,
  hora: '3:47am',
  ubicacion: 'Lagos, Nigeria',
  comercio: 'CryptoExchange_xyz'
})

// Calcular similitud
const similitud = cosineSimilarity(perfilNormal, transaccion)

if (similitud < 0.3) {
  await flagForReview(transaccion) // 🚨 Revisar manualmente
  await notifyUser('Detectamos actividad inusual')
}

Aplicaciones en Fintech

CasoInputOutput
Detección de fraudeHistorial + transacción nuevaScore de riesgo 0-100
Scoring crediticioDatos del perfilSimilitud con perfiles "buenos"
KYC automatizadoDocumentos + comportamientoMatch de identidad
SegmentaciónHistorial de usuarioCluster de comportamiento

💡 Los embeddings capturan patrones que las reglas tradicionales no pueden detectar.


Practica

Búsqueda Vectorial


Enlaces útiles