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ção | Modelo | Score Médio | Dimensões |
|---|---|---|---|
| 1 | text-embedding-3-large | 64.59 | 3072 |
| 2 | Cohere embed-v3 | 64.47 | 1024 |
| 3 | BGE-large-en-v1.5 | 64.23 | 1024 |
| 4 | E5-large-v2 | 62.25 | 1024 |
| 5 | text-embedding-3-small | 62.26 | 1536 |
Desempenho por Tarefa
| Modelo | Recuperação | STS | Classificação |
|---|---|---|---|
| text-embedding-3-large | 59.2 | 65.4 | 71.2 |
| Cohere embed-v3 | 58.9 | 64.8 | 70.1 |
| BGE-large | 57.8 | 63.9 | 69.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
| Escala | OpenAI Small | OpenAI Large | Self-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
| Modelo | Latência Média | Latência P99 |
|---|---|---|
| text-embedding-3-small | 50ms | 150ms |
| text-embedding-3-large | 80ms | 200ms |
| Cohere embed-v3 | 60ms | 180ms |
| Self-hosted (GPU) | 10ms | 30ms |
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
| Modelo | Idiomas | Qualidade |
|---|---|---|
| text-embedding-3 | 100+ | Excelente |
| Cohere multilingual | 100+ | Excelente |
| BGE-m3 | 100+ | Excelente |
| paraphrase-multilingual | 50+ | 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
| Fator | Pergunta | Recomendação |
|---|---|---|
| Orçamento | Qual o orçamento mensal? | >$100: API, <$100: Self-host |
| Volume | Documentos/mês? | >10M: Considere self-host |
| Latência | Precisa de tempo real? | <20ms: Self-host necessário |
| Idiomas | Multilíngue? | Use modelos multilíngues |
| Privacidade | Dados sensíveis? | Self-host se for crítico |
| Qualidade | Precisão é crítica? | Pague pelo melhor modelo |
Matriz de Recomendações
| Caso de Uso | Modelo Recomendado |
|---|---|
| Startup / MVP | text-embedding-3-small |
| Enterprise (qualidade) | text-embedding-3-large |
| Enterprise (custo) | BGE-large (self-hosted) |
| Multilíngue | Cohere multilingual |
| Edge / Offline | all-MiniLM-L6-v2 |
| Máxima qualidade | Cohere embed-v3 |
Resumo
- Comece com API (OpenAI small) para prototipação
- Avalie os scores MTEB para seu tipo de tarefa
- Calcule os custos para o seu volume esperado
- Considere self-hosting para alto volume
- Teste com seus dados antes de decidir
Próximos Passos
Teste seu conhecimento com o Quiz do Módulo 3!