01-04-02 — Embeddings: a intuição geométrica

⏱ 15 min Fontes validadas em: 2026-04-29

TL;DR

Um embedding é um vetor de números reais que representa o significado de um token (ou frase, imagem, documento) em espaço multidimensional. Conceitos similares ficam próximos geometricamente. Isso é o que permite que modelos "entendam" analogias: rei − homem + mulher ≈ rainha. Embeddings são a base de busca semântica, RAG e sistemas de recomendação modernos.

O problema que embeddings resolvem

Token IDs são arbitrários: o ID 4523 para "gato" e 4524 para "cachorro" não dizem nada sobre a relação entre os conceitos. Um modelo que trata IDs como números absolutos não consegue generalizar.

A solução: mapear cada ID para um vetor denso em espaço de alta dimensão (tipicamente 768 a 4096 dimensões), onde a posição codifica significado semântico.

O que é um vetor de embedding

Imagine um espaço com 300 dimensões (simplificando para 3 no diagrama abaixo). Cada palavra ocupa uma posição nesse espaço. Palavras semanticamente relacionadas ficam próximas; palavras não relacionadas ficam distantes.

graph LR subgraph "Espaço de embeddings (simplificado 2D)" REI["👑 rei\n[0.8, 0.9]"] RAINHA["👑 rainha\n[0.2, 0.9]"] HOMEM["🧔 homem\n[0.8, 0.1]"] MULHER["👩 mulher\n[0.2, 0.1]"] GATO["🐱 gato\n[-0.9, -0.8]"] CÃO["🐶 cão\n[-0.7, -0.9]"] end REI -- "diferença: gênero" --- RAINHA HOMEM -- "diferença: gênero" --- MULHER REI -- "diferença: realeza" --- HOMEM RAINHA -- "diferença: realeza" --- MULHER GATO -- "animais domésticos" --- CÃO

Word2Vec: a prova de conceito histórica

Em 2013, pesquisadores do Google (Mikolov et al.) publicaram o Word2Vec — um modelo simples que demonstrou que embeddings treinados em texto capturam estrutura semântica e sintática:

💡 A equação famosa

vetor("rei") − vetor("homem") + vetor("mulher") ≈ vetor("rainha")

Isso funciona porque "realeza" é uma direção no espaço de embeddings. Subtrair "homem" e adicionar "mulher" navega nessa direção preservando o conceito de poder/realeza.

Mais exemplos que funcionam:

  • Paris − França + Itália ≈ Roma (capitais)
  • andar − anda + correr ≈ corre (conjugação verbal)
  • maior − grande + pequeno ≈ menor (comparativos)

Similaridade por cosseno

Para medir o quão similares dois embeddings são, usa-se a similaridade por cosseno — o cosseno do ângulo entre os dois vetores:

import numpy as np

def cosine_similarity(a, b):
    return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

# Resultado: 1.0 = idênticos, 0.0 = sem relação, -1.0 = opostos

# Exemplo com embeddings reais via OpenAI
from openai import OpenAI

client = OpenAI()

def get_embedding(text):
    response = client.embeddings.create(
        input=text,
        model="text-embedding-3-small"  # 1536 dimensões
    )
    return np.array(response.data[0].embedding)

rei    = get_embedding("rei")
rainha = get_embedding("rainha")
gato   = get_embedding("gato")

print(f"rei ↔ rainha: {cosine_similarity(rei, rainha):.3f}")  # ~0.85
print(f"rei ↔ gato:   {cosine_similarity(rei, gato):.3f}")   # ~0.15
⚠️ Atenção

Similaridade por cosseno mede direção, não magnitude. Dois vetores apontando na mesma direção têm similaridade 1.0 independente do tamanho. É por isso que ela funciona melhor que distância euclidiana para comparar significados.

Embeddings modernos vs. Word2Vec

CaracterísticaWord2Vec (2013)Embeddings de LLMs (2024+)
Dimensões50–300768–4096+
Uma representação por palavra?Sim (estática)Não (contextual)
"banco" (financeiro vs. assento)Mesmo vetorVetores diferentes por contexto
MultilínguePor idiomaModelos multilíngues unificados

Embeddings contextuais (BERT, text-embedding-3) são superiores porque a representação de uma palavra muda de acordo com a frase ao redor.

Onde embeddings são usados na prática

RAG — Retrieval-Augmented Generation

O padrão arquitetural mais importante para aplicações enterprise com LLMs. Você armazena seus documentos como embeddings num banco vetorial (Pinecone, pgvector, Azure AI Search). Na query, a pergunta do usuário vira embedding e você busca os trechos mais similares — aí passa esses trechos como contexto para o LLM responder.

flowchart LR DOC["📄 Documentos\n(manuais, contratos)"] CHUNK["✂️ Chunking\n(parágrafos)"] EMB_DOC["🔢 Embedding\n(texto → vetor)"] DB["🗄️ Vector DB\n(pgvector, Pinecone)"] QUERY["❓ Pergunta\ndo usuário"] EMB_Q["🔢 Embedding\n(query → vetor)"] SEARCH["🔍 Busca por\nsimilaridade"] LLM["🤖 LLM\n(responde com contexto)"] DOC --> CHUNK --> EMB_DOC --> DB QUERY --> EMB_Q --> SEARCH DB --> SEARCH --> LLM QUERY --> LLM

Busca semântica

Diferente de full-text search (que busca palavras exatas), busca semântica encontra documentos pelo significado. "contrato de trabalho encerrado" retorna resultados sobre "demissão" mesmo sem essa palavra.

Clustering e classificação

Agrupar tickets de suporte por similaridade semântica, classificar sentimento, detectar duplicatas.

🔷 Microsoft / Azure

Azure AI Search tem suporte nativo a busca vetorial com embeddings. Integrado ao Azure OpenAI, permite RAG enterprise sem montar infraestrutura de banco vetorial separada. Para projetos .NET, o SDK Azure.AI.OpenAI e Azure.Search.Documents cobrem o pipeline completo.

Modelos de embedding disponíveis

ModeloProvedorDimensõesCusto
text-embedding-3-smallOpenAI1536$0,02/1M tokens
text-embedding-3-largeOpenAI3072$0,13/1M tokens
text-embedding-ada-002OpenAI (legado)1536$0,10/1M tokens
all-MiniLM-L6-v2Hugging Face (open)384Grátis (local)
e5-large-v2Microsoft (open)1024Grátis (local)
🔗 Conexão

Agora você tem os dois blocos básicos: tokens (como texto vira IDs) e embeddings (como IDs viram vetores com significado). Com isso, você entende o que entra num Transformer. Os próximos módulos constroem sobre essa base para explicar como LLMs são treinados e como usá-los na prática.

Como isso se conecta

Fontes

  1. Mikolov et al. — Efficient Estimation of Word Representations in Vector Space (Word2Vec original, 2013)
  2. OpenAI — Embeddings guide (documentação oficial)
  3. Microsoft — Vector search in Azure AI Search (documentação oficial)
  4. Hugging Face — Getting Started With Embeddings
  5. Pinecone — What are Vector Embeddings? (guia prático)