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
| Uso | Ejemplo |
|---|---|
| Búsqueda semántica | "comida italiana" encuentra "pizza" |
| Recomendaciones | Productos similares |
| RAG | Encontrar contexto relevante para LLMs |
| Clasificación | Agrupar textos por tema |
Modelos de embeddings
| Modelo | Dimensiones | Proveedor |
|---|---|---|
text-embedding-3-small | 1536 | OpenAI |
text-embedding-3-large | 3072 | OpenAI |
voyage-3 | 1024 | Voyage AI |
all-MiniLM-L6-v2 | 384 | HuggingFace (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:
| DB | Tipo | Ideal para |
|---|---|---|
| Pinecone | Cloud | Producción |
| Supabase pgvector | Cloud | Full-stack |
| ChromaDB | Local | Desarrollo |
🎯 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
| Caso | Input | Output |
|---|---|---|
| Detección de fraude | Historial + transacción nueva | Score de riesgo 0-100 |
| Scoring crediticio | Datos del perfil | Similitud con perfiles "buenos" |
| KYC automatizado | Documentos + comportamiento | Match de identidad |
| Segmentación | Historial de usuario | Cluster de comportamiento |
💡 Los embeddings capturan patrones que las reglas tradicionales no pueden detectar.