Pular para o conteúdo principal

Capítulo 3: Escolhendo o Modelo de Embedding Certo

Introdução​

Selecionar o modelo de embedding adequado depende dos seus requisitos específicos: qualidade, custo, latência, suporte a idiomas e restrições de deployment.

Estrutura de Decisão​

Benchmarks MTEB​

O Massive Text Embedding Benchmark (MTEB) é o padrão para comparar modelos de embedding:

Ranking (Melhores Modelos)​

PosiçãoModeloScore MédioDimensões
1text-embedding-3-large64.593072
2Cohere embed-v364.471024
3BGE-large-en-v1.564.231024
4E5-large-v262.251024
5text-embedding-3-small62.261536

Desempenho por Tarefa​

ModeloRecuperaçãoSTSClassificação
text-embedding-3-large59.265.471.2
Cohere embed-v358.964.870.1
BGE-large57.863.969.5

Análise de Custos​

Por Milhão de Tokens​

def calculate_monthly_cost(
docs_per_month: int,
avg_tokens_per_doc: int,
model: str
):
prices = {
"text-embedding-3-small": 0.02,
"text-embedding-3-large": 0.13,
"cohere-embed-v3": 0.10,
"self-hosted": 0.0 # Infrastructure costs separate
}

total_tokens = docs_per_month * avg_tokens_per_doc
millions = total_tokens / 1_000_000

return millions * prices[model]

# Example: 1M documents, 500 tokens each
cost = calculate_monthly_cost(1_000_000, 500, "text-embedding-3-small")
# Result: $10/month for embedding

Comparação de Custos Totais​

EscalaOpenAI SmallOpenAI LargeSelf-Hosted
100K docs$1$6.50~R$50/mês (infra)
1M docs$10$65~R$100/mês
10M docs$100$650~R$200/mês

Considerações de Latência​

Latência da API​

ModeloLatência MédiaLatência P99
text-embedding-3-small50ms150ms
text-embedding-3-large80ms200ms
Cohere embed-v360ms180ms
Self-hosted (GPU)10ms30ms

Estratégia de Batching​

import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI()

async def batch_embed(texts, batch_size=100):
"""Efficient batching for large datasets"""
embeddings = []

for i in range(0, len(texts), batch_size):
batch = texts[i:i + batch_size]
response = await client.embeddings.create(
input=batch,
model="text-embedding-3-small"
)
embeddings.extend([e.embedding for e in response.data])

return embeddings

Suporte a Idiomas​

Modelos Multilíngues​

ModeloIdiomasQualidade
text-embedding-3100+Excelente
Cohere multilingual100+Excelente
BGE-m3100+Excelente
paraphrase-multilingual50+Boa

Específicos por Idioma​

# For specific languages, dedicated models may be better
models_by_language = {
"en": "BAAI/bge-large-en-v1.5",
"zh": "BAAI/bge-large-zh-v1.5",
"multilingual": "BAAI/bge-m3"
}

Opções de Deployment​

Opção 1: API (Recomendado para a maioria)​

# Pros: No infrastructure, always updated
# Cons: Ongoing cost, latency, data leaves your network

from langchain.embeddings import OpenAIEmbeddings
embeddings = OpenAIEmbeddings()

Opção 2: Self-Hosted​

# Pros: No per-token cost, lower latency, data stays internal
# Cons: Infrastructure cost, maintenance

from sentence_transformers import SentenceTransformer

model = SentenceTransformer('BAAI/bge-large-en-v1.5')
# Load once, use many times

Opção 3: Híbrido​

# Use self-hosted for high volume, API for edge cases
def get_embeddings(texts, use_api=False):
if use_api or len(texts) < 10:
return api_embeddings.embed_documents(texts)
else:
return local_model.encode(texts)

Checklist de Seleção​

FatorPerguntaRecomendação
OrçamentoQual o orçamento mensal?>$100: API, <$100: Self-host
VolumeDocumentos/mês?>10M: Considere self-host
LatênciaPrecisa de tempo real?<20ms: Self-host necessário
IdiomasMultilíngue?Use modelos multilíngues
PrivacidadeDados sensíveis?Self-host se for crítico
QualidadePrecisão é crítica?Pague pelo melhor modelo

Matriz de Recomendações​

Caso de UsoModelo Recomendado
Startup / MVPtext-embedding-3-small
Enterprise (qualidade)text-embedding-3-large
Enterprise (custo)BGE-large (self-hosted)
MultilíngueCohere multilingual
Edge / Offlineall-MiniLM-L6-v2
Máxima qualidadeCohere embed-v3

Resumo​

  1. Comece com API (OpenAI small) para prototipação
  2. Avalie os scores MTEB para seu tipo de tarefa
  3. Calcule os custos para o seu volume esperado
  4. Considere self-hosting para alto volume
  5. Teste com seus dados antes de decidir

Próximos Passos​

Teste seu conhecimento com o Quiz do Módulo 3!