Nomic AI liberó nomic-embed-text-v1 en febrero de 2024 como modelo de embeddings completamente abierto: pesos Apache 2.0, training data disclosed, código de entrenamiento público. Calidad cercana a text-embedding-3-small de OpenAI. Para equipos que quieren embeddings abiertos sin comprometer calidad, es una opción concreta y madura.
Qué ofrece
- 768 dimensiones (vs 1536 de OpenAI).
- Context length: 8192 tokens.
- MTEB: ~62.4 (similar a text-embedding-3-small ~62.3).
- Licencia Apache 2.0: sin restricciones comerciales.
- Reproducibilidad: training data y código publicados.
- Tamaño: ~500MB en disco.
Disponible en Hugging Face: nomic-ai/nomic-embed-text-v1.
Instalación y uso
Con sentence-transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("nomic-ai/nomic-embed-text-v1", trust_remote_code=True)
# Importante: prefijos para query vs document
query_emb = model.encode("search_query: ¿qué es RAG?")
doc_emb = model.encode("search_document: RAG combina retrieval con generación...")
Los prefijos (search_query, search_document, classification, clustering) le dicen al modelo el propósito — como Cohere Embed v3.
Con Ollama
Ollama tiene nomic-embed disponible:
ollama pull nomic-embed-text
Y API OpenAI-compatible:
from openai import OpenAI
client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")
response = client.embeddings.create(
model="nomic-embed-text",
input="Texto a embedir"
)
Ideal para desarrollo local o self-hosting ligero.
Benchmarks
Contra otros open embeddings y OpenAI:
| Modelo | MTEB avg | Dims | Licencia |
|---|---|---|---|
| text-embedding-3-large | 64.6 | 3072 | OpenAI |
| text-embedding-3-small | 62.3 | 1536 | OpenAI |
| nomic-embed-text-v1 | 62.4 | 768 | Apache 2.0 |
| BGE-large-en-v1.5 | 64.2 | 1024 | MIT |
| e5-large-v2 | 63.4 | 1024 | MIT |
| mxbai-embed-large-v1 | 64.7 | 1024 | Apache 2.0 |
Nomic es competitivo con text-embedding-3-small y openSource. mxbai-embed-large es algo mejor pero con 1024 dims.
Rendimiento inferencia
En hardware típico:
- CPU (servidor 16 cores): ~100 embeddings/s.
- GPU (RTX 4090): ~3000 embeddings/s.
- Apple Silicon (M2 Pro): ~500 embeddings/s via mps.
Para batch processing, considerable.
Integración con pgvector
Nomic a pgvector:
import psycopg
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("nomic-ai/nomic-embed-text-v1", trust_remote_code=True)
con = psycopg.connect("postgres://...")
# Schema
con.execute("""
CREATE TABLE docs (
id bigserial PRIMARY KEY,
content text,
embedding vector(768)
)
""")
con.execute("""
CREATE INDEX ON docs USING hnsw (embedding vector_cosine_ops)
""")
# Insert
emb = model.encode(f"search_document: {text}")
con.execute("INSERT INTO docs (content, embedding) VALUES (%s, %s)",
(text, emb.tolist()))
Cuándo elegir Nomic
Sí si:
- Quieres abiertas, sin dependency externa.
- Inglés es lenguaje principal.
- Necesitas residencia de datos / on-prem.
- Coste de API es factor.
- Valoras transparency de entrenamiento.
No si:
- Multilingüe serio (Cohere Embed v3 gana).
- Frontier quality absoluta (OpenAI large o mxbai).
- Context >8k tokens.
nomic-embed-text-v1.5
Variante con Matryoshka Representation Learning: puedes truncar dimensiones sin re-entrenar.
- 768 dim → 512 → 256 → 128 → 64 con degradación gradual.
- Similar a la feature de OpenAI text-embedding-3.
Para RAG con storage tight, útil.
Multilingüe: nomic-embed-text-v1-multilingual
Variante multilingüe con ~100 idiomas cubriendo español, francés, alemán y más.
- Misma calidad de infraestructura, entrenamiento multilingüe.
- Buena opción para RAG EU.
Integración con LangChain / LlamaIndex
Ambos soportan Nomic directamente:
from langchain_community.embeddings import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings(
model_name="nomic-ai/nomic-embed-text-v1",
model_kwargs={"trust_remote_code": True}
)
Atlas: plataforma de Nomic
Nomic Atlas es la plataforma comercial de Nomic:
- Visualizar tus embeddings en 2D interactive.
- Explore semantic structure de datos grandes.
- Search + clustering + filtering.
Útil para exploración y debugging de embeddings propios. Free tier generoso.
Consideraciones operacionales
- Model caching: descarga el modelo una vez, cache local.
- ONNX export: para mejor inferencia multiplatforma.
- Quantización: INT8 disponible, mínima pérdida.
- Batch size: ajustar según memoria GPU.
Conclusión
nomic-embed-text es la opción open-source sensata para embeddings inglés en 2024. Calidad cercana a text-embedding-3-small con libertad total, transparencia y disponibilidad on-prem. Para RAG serio sin querer dependencia OpenAI, es la elección por defecto. Para multilingüe usar la variante específica. Para casos donde frontier quality importa absolutamente, OpenAI large o mxbai. La democratización de embeddings open-source de calidad es buena noticia para el ecosistema.
Síguenos en jacar.es para más sobre embeddings, RAG y modelos abiertos.