nomic-embed-text: embeddings abiertos competitivos

Puntos de datos conectados en patrón de red azul representando espacio vectorial

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

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.

Entradas relacionadas