Skip to content
BotServBotServ
Modelos de Embeddingnomic-embed-textmultilingual-e5bge-m3RAGBúsqueda Semántica

Modelos de Embedding Comparados

Comparativa de modelos embedding para IA local. nomic-embed-text, multilingual-e5, bge-m3 para RAG y búsqueda semántica.

S

schutzgeist

5 min read
Modelos de Embedding Comparados

Modelos de Embedding en Comparativa

Qué cubre este artículo

  • Qué son los modelos de embedding y cómo funcionan.
  • nomic-embed-text, multilingual-e5, bge-m3 y otros en comparativa.
  • Qué modelo para cada idioma y caso de uso.
  • Requisitos de hardware y velocidad.
  • Ejemplos prácticos para RAG y búsqueda semántica.

Introducción: Modelos de embedding explicados

Los modelos de embedding convierten texto en números (vectores). Textos similares producen vectores similares. Esto permite la búsqueda semántica: en lugar de hacer coincidir palabras clave, el sistema encuentra textos con significado parecido. Los embeddings son la base para RAG, búsqueda semántica y clustering de documentos.

Este artículo va dirigido a usuarios que quieren elegir modelos de embedding para RAG o búsqueda. Los fundamentos los encuentras en Embeddings y RAG Local.

¿Por qué necesito modelos de embedding?

Imagina que buscas “solicitud de vacaciones” y quieres encontrar también documentos que contengan “pedir vacaciones” o “solicitud de permiso”, aunque las palabras sean diferentes. Los embeddings entienden el significado, no solo las palabras. Esta es la base para RAG y la búsqueda inteligente.

Modelos de embedding en comparativa breve

Los modelos de embedding convierten texto en vectores (por ejemplo, 768 números). Textos similares tienen vectores similares. nomic-embed-text es un buen todoterreno, multilingual-e5 para multilingüismo, bge-m3 para documentos largos.

La idea central es: Texto → Números → Encontrar similitud.

A quién va dirigido este artículo

  • Desarrolladores RAG, que necesitan embeddings para búsqueda de documentos.
  • Constructores de motores de búsqueda, que implementan búsqueda semántica.
  • Analistas de datos, que agrupan y clasifican textos.
  • Usuarios autohospedados, que crean embeddings localmente.

Conocimientos previos en RAG son útiles.

Términos importantes

  • Embedding - Texto a vector. Cuándo útil: para búsqueda semántica.
  • RAG - Retrieval-Augmented Generation. Cuándo útil: la aplicación principal.
  • Base de datos vectorial - Almacenamiento de embeddings. Cuándo útil: para búsqueda.
  • Búsqueda semántica - Significado en lugar de palabras clave. Cuándo útil: para resultados mejores.
  • Ollama - Servidor de modelos. Cuándo útil: para embeddings.
  • Cosine Similarity - Medida de similitud. Cuándo útil: para comparaciones.

Cómo funcionan los embeddings

Texto: "Der Hund spielt im Garten"
         │
         ▼
Embedding-Modell
         │
         ▼
Vector: [0.23, -0.45, 0.78, ..., 0.12]  (768 Dimensionen)

Texto similar: "Ein Hund spielt draußen"
         │
         ▼
Vector: [0.21, -0.43, 0.81, ..., 0.15]  (¡similar!)

Texto diferente: "Die Katze schläft auf dem Sofa"
         │
         ▼
Vector: [-0.67, 0.89, -0.23, ..., 0.45]  (diferente)

Los modelos en comparativa

ModeloDesarrolladorDimensionesIdiomasLongitud máx.Mejor para
nomic-embed-textNomic AI768Inglés8KRAG general
multilingual-e5Microsoft1024100+512RAG multilingüe
bge-m3BAAI1024100+8KDocumentos largos
bge-large-enBAAI1024Inglés512Textos en inglés
gte-Qwen2Alibaba1536Multilingüe32KDocumentos muy largos
mxbai-embed-largeMixedbread1024Inglés512RAG en inglés

Comparativa detallada

1. nomic-embed-text (Nomic AI)

Fortalezas:

  • Embedding estándar en Ollama
  • Buena calidad para textos en inglés
  • Rápido y eficiente
  • Bien documentado

Debilidades:

  • Solo inglés (subóptimo para alemán)
  • 768 dimensiones (menos que otros)

Recomendación: Usa nomic-embed-text para documentos en inglés.

2. multilingual-e5 (Microsoft)

Fortalezas:

  • Más de 100 idiomas incluyendo alemán
  • Muy buena calidad
  • Estándar para aplicaciones multilingües
  • multilingual-e5-large: mejor versión

Debilidades:

  • Solo 512 tokens de contexto (textos cortos)
  • Más grande que nomic

Recomendación: Usa multilingual-e5 para documentos en alemán o multilingües.

3. bge-m3 (BAAI)

Fortalezas:

  • Multilingüe (más de 100 idiomas)
  • Contexto de 8K (documentos largos)
  • Muy buena calidad
  • Híbrido: Dense + Sparse + Multi-Vector

Debilidades:

  • Más grande y lento
  • Más complejo (3 modos)

Recomendación: Usa bge-m3 para documentos largos y multilingües.

4. gte-Qwen2 (Alibaba)

Fortalezas:

  • Contexto de 32K (documentos muy largos)
  • Multilingüe
  • Muy buena calidad
  • Basado en Qwen

Debilidades:

  • 1536 dimensiones (más memoria)
  • Menos extendido

Recomendación: Usa gte-qwen2 para documentos muy largos.

Comparativa por idiomas

ModeloAlemánInglésMultilingüeNota
nomic-embed-text⭐⭐⭐⭐⭐⭐⭐⭐Solo inglés
multilingual-e5⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐100+ idiomas
bge-m3⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐100+ idiomas
gte-Qwen2⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐Multilingüe

Comparativa de longitud de contexto

ModeloTokens máx.Para qué
multilingual-e5512Textos cortos, oraciones
bge-large-en512Textos cortos
nomic-embed-text8KDocumentos de longitud media
bge-m38KDocumentos largos
gte-Qwen232KDocumentos muy largos

Ejemplo práctico: Embeddings con Ollama

import requests

# Crear embedding
def get_embedding(text, model="nomic-embed-text"):
    response = requests.post(
        "http://ollama:11434/api/embeddings",
        json={
            "model": model,
            "prompt": text
        }
    )
    return response.json()["embedding"]

# Ejemplo
text = "Der Hund spielt im Garten"
embedding = get_embedding(text)
print(f"Dimensiones: {len(embedding)}")
# Output: Dimensiones: 768

Ejemplo práctico: Pipeline RAG

import chromadb
import requests

# 1. Embeddar documentos y guardarlos
chroma = chromadb.HttpClient(host="chromadb", port=8000)
collection = chroma.get_or_create_collection("dokumente")

documents = [
    "Der Hund spielt im Garten.",
    "Katzen schlafen gerne auf dem Sofa.",
    "Vögel fliegen am Himmel."
]

for i, doc in enumerate(documents):
    embedding = get_embedding(doc)
    collection.add(
        ids=[f"doc_{i}"],
        documents=[doc],
        embeddings=[embedding]
    )

# 2. Búsqueda semántica
query = "Welches Tier spielt draußen?"
query_embedding = get_embedding(query)

results = collection.query(
    query_embeddings=[query_embedding],
    n_results=1
)

print(results["documents"][0])
# Output: ["Der Hund spielt im Garten."]

Ejemplo práctico: Documentos en alemán

# multilingual-e5 para documentos en alemán
def get_german_embedding(text):
    response = requests.post(
        "http://ollama:11434/api/embeddings",
        json={
            "model": "multilingual-e5",
            "prompt": text
        }
    )
    return response.json()["embedding"]

# Documentos en alemán
docs = [
    "Der Mitarbeiter beantragt Urlaub.",
    "Die Rechnung ist fällig.",
    "Das Meeting findet morgen statt."
]

for doc in docs:
    emb = get_german_embedding(doc)
    # Guardar en base de datos vectorial

Notas de seguridad

  • Los embeddings no son reversibles: No puedes reconstruir el texto original a partir del vector. Pero pueden contener información sensible.
  • Embeddings locales: Con Ollama todos los embeddings se quedan localmente. Con APIs en la nube los textos se envían.
  • Sesgo: Los modelos de embedding tienen sesgos. Para aplicaciones críticas, prueba a fondo.
  • Dimensiones: Más dimensiones = más memoria, pero no siempre mejor.

Errores comunes

  • Modelo incorrecto para el idioma: nomic-embed-text para documentos en alemán es subóptimo. Usa multilingual-e5.
  • Contexto demasiado corto: Los documentos largos deben dividirse en fragmentos. bge-m3 o gte-Qwen2 para textos extensos.
  • Modelo de embedding para generación: Los modelos de embedding no generan texto. Solo crean vectores.
  • Comparación sin normalización: Cosine Similarity requiere vectores normalizados.
  • Demasiadas dimensiones: 1536 dimensiones consumen más memoria y no siempre mejoran la calidad.

Enlaces relacionados

Puntos clave:

  • Los embeddings convierten texto en vectores para búsqueda semántica.
  • nomic-embed-text = estándar para inglés.
  • multilingual-e5 = mejor para alemán y multilingüe.
  • bge-m3 = mejor para documentos largos.
  • gte-Qwen2 = para documentos muy largos (32K).
  • Para RAG en alemán: multilingual-e5 o bge-m3.

Preguntas frecuentes

¿Qué es un modelo de embedding?

Un modelo que convierte texto en números (vectores). Textos similares tienen vectores similares. Esto permite búsqueda semántica: significado en lugar de palabras clave.

¿Qué modelo de embedding para alemán?

multilingual-e5 o bge-m3. Ambos soportan alemán muy bien. nomic-embed-text está optimizado solo para inglés.

¿Qué significan las dimensiones?

La cantidad de números en el vector. 768 (nomic), 1024 (e5, bge), 1536 (gte). Más dimensiones = más memoria, pero no siempre mejor calidad.

¿Cuán largo puede ser el texto?

multilingual-e5: 512 tokens. bge-m3: 8K tokens. gte-Qwen2: 32K tokens. Textos más largos deben dividirse en fragmentos.

¿Modelo de embedding o LLM?

Propósitos diferentes. Los modelos de embedding crean vectores para búsqueda. Los LLMs generan texto. Para RAG necesitas ambos: embeddings para recuperación, LLM para generación.

¿Puedo crear embeddings con Ollama?

Sí, a través de la API Embeddings de Ollama: POST /api/embeddings con modelo y texto. Soporta nomic-embed-text, multilingual-e5 y más.

¿Qué es búsqueda híbrida?

Combinación de búsqueda semántica (embeddings) y búsqueda por palabras clave (BM25). Los resultados se combinan para mejores coincidencias. bge-m3 soporta ambas.

¿Cuánto cuesta hacer embeddings?

Local: solo costos de hardware. Ollama + multilingual-e5 son gratuitos. Las APIs en la nube (OpenAI, Cohere) cobran por millón de tokens.

Referencias y lecturas recomendadas

Volver al blog
Share:

Entradas relacionadas