Skip to content
BotServBotServ
OllamaEmbeddingsRAGnomic-embed-textbase de datos vectorial

Embeddings con Ollama

Crea Embeddings localmente con Ollama. Modelos, API REST, comparación con OpenAI y aplicaciones RAG.

S

schutzgeist

4 min read
Embeddings con Ollama

Embeddings con Ollama

Qué cubre este artículo sobre Ollama

  • Qué son los embeddings y para qué sirven.
  • Qué modelos de embedding ofrece Ollama.
  • Cómo generar embeddings a través de la API.
  • Cómo usarlos en Python.
  • Aplicaciones como RAG y búsqueda semántica.

Introducción: Embeddings con Ollama

Los embeddings son vectores numéricos que representan texto en un espacio multidimensional. Los contenidos con significado similar se encuentran próximos entre sí. Esta propiedad los hace esenciales para RAG, búsqueda semántica, agrupamiento de documentos y sistemas de recomendación. Ollama facilita ejecutar modelos de embedding localmente, sin depender de servicios en la nube.

Este artículo muestra qué modelos de embedding ofrece Ollama, cómo funciona la API y cómo utilizar los vectores en tus propios proyectos.

Términos clave

  • Embedding: Vector que representa texto u otros datos.
  • Modelo de embedding: Modelo especializado para generar vectores.
  • Espacio vectorial: Espacio matemático donde se miden similitudes.
  • Similitud coseno: Medida de proximidad entre dos vectores.
  • RAG: Retrieval-Augmented Generation, incluir documentos externos en prompts.
  • Base de datos vectorial: Almacenamiento para embeddings.

Modelos de embedding en Ollama

Ollama ofrece varios modelos de embedding. El más conocido es:

  • nomic-embed-text: 137 millones de parámetros, buen rendimiento, uso libre.
  • mxbai-embed-large: Modelo multilingüe más potente.
  • bge-m3: Multilingüe, adecuado para documentos más largos.

Los modelos se descargan igual que los modelos de lenguaje:

ollama pull nomic-embed-text
ollama pull mxbai-embed-large

Generar embeddings

A través de la API REST

curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": "Ollama es una herramienta para IA local."
}'

Respuesta:

{
  "model": "nomic-embed-text",
  "embeddings": [[0.12, -0.34, 0.56, ...]]
}

Múltiples textos

curl http://localhost:11434/api/embed -d '{
  "model": "nomic-embed-text",
  "input": [
    "Primer texto.",
    "Segundo texto.",
    "Tercer texto."
  ]
}'

Ejemplo en Python

import requests

def embed(texts, model="nomic-embed-text"):
    url = "http://localhost:11434/api/embed"
    payload = {"model": model, "input": texts}
    resp = requests.post(url, json=payload)
    return resp.json()["embeddings"]

vectors = embed(["Hola mundo", "Usar Ollama localmente"])
print(len(vectors), len(vectors[0]))

Calcular similitud

Con numpy puedes calcular la similitud coseno entre dos vectores:

import numpy as np

def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

v1 = np.array(vectors[0])
v2 = np.array(vectors[1])
print(cosine_similarity(v1, v2))

Comparación con OpenAI

CaracterísticaOllama localAPI OpenAI
CostoSolo electricidadPor token
PrivacidadPermanece localVa a la nube
VelocidadDepende del hardwareRápida
CalidadBuenaMuy buena
EscalabilidadLimitada por tu hardwareMuy escalable

Para muchas aplicaciones, los embeddings locales de Ollama son suficientes. Si necesitas máxima precisión o volúmenes muy grandes de datos, puedes complementar con modelos en la nube.

Aplicaciones

RAG

En un sistema RAG, los documentos se dividen en fragmentos pequeños, se convierten a embeddings y se guardan en una base de datos vectorial. Cuando haces una pregunta, también se convierte a vector y se buscan los fragmentos de documento más cercanos.

Búsqueda semántica

En lugar de buscar por palabras clave, encuentras contenido similar. Esto funciona incluso entre idiomas diferentes.

Clasificación y agrupamiento

Con embeddings puedes asignar textos a categorías o dividirlos automáticamente en grupos temáticos.

Bases de datos vectoriales

Los embeddings de Ollama funcionan bien combinados con bases de datos vectoriales locales:

  • ChromaDB: Fácil de usar, popular en Python.
  • Qdrant: Base de datos vectorial rápida y escalable.
  • Weaviate: Independiente del modelo, potente para empresas.
  • pgvector: Extensión vectorial para PostgreSQL.

Consejos

  • Divide los textos en fragmentos significativos.
  • Ajusta el tamaño del fragmento y el solapamiento según tu aplicación.
  • Elige un modelo de embedding adecuado para el idioma.
  • Almacena los embeddings de una vez, no los regeneres en cada solicitud.
  • Mide el recall y la precisión con consultas de prueba.

Problemas comunes

  • Modelo incorrecto: No todos los modelos sirven para embeddings.
  • Texto demasiado largo: Los textos más largos deben dividirse previamente.
  • Dimensiones variables: Modelos diferentes generan vectores de distinta longitud.
  • Sin normalización: La similitud coseno requiere vectores normalizados.
  • URL de API incorrecta: /api/embed es el endpoint de Ollama, no /v1/embeddings.

Enlaces y recursos adicionales

Preguntas frecuentes: Embeddings con Ollama

¿Qué modelo de embedding debo usar? nomic-embed-text es un buen punto de partida. mxbai-embed-large es más potente pero más grande.

¿Puedo incrustar documentos completos de una vez? Es mejor dividirlos en fragmentos.

¿Son los embeddings de Ollama conformes con privacidad? Sí, porque todo se procesa localmente.

¿Cómo almaceno embeddings? En una base de datos vectorial como ChromaDB, Qdrant o pgvector.

¿Qué medida de similitud usar? La similitud coseno es el estándar común.

Fuentes y lecturas recomendadas

Resumen: Embeddings con Ollama

Ollama te permite ejecutar modelos de embedding localmente y convertir textos en vectores. Esta es la base para RAG, búsqueda semántica y clasificación. nomic-embed-text es un modelo de entrada popular. Si divides los textos en fragmentos apropiados, almacenas los vectores en una base de datos vectorial local y mides similitudes con la distancia coseno, construirás rápidamente un sistema RAG local potente.

Volver al blog
Share:

Entradas relacionadas