00-03-01 — Vetores, Embeddings e Atenção — Intuição sem Cálculo

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

TL;DR

Modelos representam tudo como vetores — listas de números onde a posição carrega significado. Embeddings são vetores onde proximidade = similaridade semântica (rei e rainha são vizinhos; rei e banana não). Atenção é o mecanismo que decide quais partes do contexto são relevantes para cada palavra — é o que faz "banco" em "sentei no banco do parque" apontar para assento, não financeiro. Esses três conceitos são 80% do que você precisa para entender Transformers.

O Problema de Representar Linguagem para Computadores

Antes de chegar a embeddings e atenção, precisamos do problema que eles resolvem. Computadores trabalham com números — mas palavras e frases não são números. Como você transforma "gato" em algo que um computador pode processar matematicamente?

A abordagem mais simples seria um índice: gato=1, cachorro=2, carro=3. Mas isso cria um problema imediato: para o computador, gato (1) é mais "próximo" de cachorro (2) do que de felino (4512), mesmo que semanticamente gato e felino sejam quase sinônimos. A representação não captura significado.

O insight central do ML moderno: em vez de um único número, use uma lista de números (um vetor) onde a posição de cada número carrega informação sobre o significado da palavra. E aprenda esses vetores a partir de dados, não defina manualmente.

Vetores: o Espaço onde o Significado Mora

Um vetor é simplesmente uma lista ordenada de números. Em geometria, um vetor 2D é um ponto no plano — [3, 4] significa 3 no eixo X, 4 no eixo Y. Modelos de linguagem trabalham com vetores de centenas ou milhares de dimensões, mas a intuição geométrica é a mesma.

O que importa para IA: a distância e direção entre vetores. Dois vetores próximos no espaço multidimensional representam conceitos similares. Dois vetores distantes representam conceitos diferentes.

Analogia concreta: imagine que você tem um mapa de cidades. Se Rio de Janeiro e São Paulo estão próximos no mapa, eles compartilham características (Brasil, costa, metrópole). Se você souber que "Paris é para França o que X é para Brasil", você pode encontrar X calculando direções no mapa. Embeddings funcionam exatamente assim — mas com palavras em vez de cidades, e em centenas de dimensões.

💡
A famosa analogia: rei - homem + mulher ≈ rainha. Subtrair o vetor de "homem" do vetor de "rei" e adicionar o vetor de "mulher" te leva ao vetor de "rainha". Isso funciona em embeddings reais — o modelo Word2Vec demonstrou isso em 2013 e o campo nunca mais foi o mesmo.

Embeddings: Vetores que Aprendem Significado

Dado o contexto de vetores, embeddings são vetores aprendidos a partir de dados que capturam relacionamentos semânticos. Cada palavra, frase, ou documento é representado como um ponto em um espaço de alta dimensão, onde a proximidade geométrica reflete similaridade de significado.

Como eles são aprendidos: o modelo é treinado em textos massivos com uma tarefa simples — prever qual palavra vem antes ou depois de uma determinada palavra. Para fazer isso bem, o modelo precisa aprender que "gato" aparece em contextos similares a "felino" e "bichano", mas raramente perto de "carro" ou "balancete". Essa co-ocorrência de contextos vira o vetor.

Embeddings modernos (OpenAI text-embedding-3, Azure text-embedding-ada) representam textos inteiros como vetores de 1536 ou 3072 dimensões. Eles são a base do RAG — você computa o embedding da pergunta do usuário, busca os documentos cujos embeddings são mais próximos, e usa esses documentos como contexto.

🏢
Na Stack Microsoft: O modelo text-embedding-3-large via Azure OpenAI gera embeddings de 3072 dimensões. Azure AI Search armazena e busca esses vetores eficientemente. Em Semantic Kernel, ITextEmbeddingGenerationService abstrai a geração de embeddings com qualquer modelo configurado.

Atenção: o Mecanismo que Dá Contexto

Embeddings resolvem a representação de palavras individuais — mas linguagem é relacional. "Banco" significa coisas completamente diferentes em "o banco faliu" e "sentei no banco do jardim". Para entender "banco" no contexto correto, o modelo precisa olhar para as outras palavras da frase e decidir quais são relevantes.

Esse é exatamente o que o mecanismo de atenção faz. Para cada palavra, a atenção calcula um score de relevância para todas as outras palavras no contexto, e usa esses scores para criar uma representação contextualizada da palavra. Em "o banco faliu", "banco" presta atenção principalmente em "faliu" e ajusta sua representação para o sentido financeiro. Em "sentei no banco", presta atenção em "sentei" e ajusta para o sentido de assento.

A palavra "atenção" não é metáfora — é o nome técnico do mecanismo. O paper original (Vaswani et al., 2017) se chama "Attention is All You Need", e demonstrou que atenção sozinha, sem RNNs ou CNNs, era suficiente para superar o estado da arte em tradução automática.

💡
Atenção multi-head: Transformers usam múltiplas "cabeças" de atenção em paralelo. Cada cabeça aprende a prestar atenção em aspectos diferentes — uma pode focar em relações sintáticas (sujeito-verbo), outra em referências (pronome-antecedente), outra em semântica. O resultado de todas as cabeças é combinado.

Como os Três Conceitos se Conectam

Vetores, embeddings e atenção não são conceitos independentes — eles formam o pipeline de processamento de um Transformer:

  1. Input: texto bruto → tokens (palavras ou pedaços de palavras)
  2. Embeddings: cada token → vetor de alta dimensão (representação inicial)
  3. Atenção: para cada token, calcula scores de relevância para todos os outros tokens → cria representações contextualizadas (o embedding de "banco" muda com o contexto)
  4. Camadas de atenção empilhadas: repete o processo, refinando representações
  5. Output: representações finais → probabilidades sobre o próximo token
⚠️
Não confunda embeddings de input com embeddings de busca: Modelos de linguagem têm embeddings internos (os vetores que passam entre camadas). Modelos de embedding para busca (text-embedding-ada, etc.) são modelos treinados especificamente para gerar vetores de documentos. São tecnologias relacionadas mas não idênticas.

Embeddings na Prática: Busca Semântica em C#

// Semantic Kernel: gerar embedding e fazer busca semântica
var embeddingService = kernel.GetRequiredService
    <ITextEmbeddingGenerationService>();

// Gerar embedding de um documento
var docEmbedding = await embeddingService.GenerateEmbeddingAsync(
    "Política de reembolso de despesas de viagem da Impar");

// Gerar embedding da query do usuário
var queryEmbedding = await embeddingService.GenerateEmbeddingAsync(
    "como faço para ser reembolsado por hotel?");

// Similaridade de cosseno: próximo de 1.0 = muito similar
// (Azure AI Search faz isso automaticamente — aqui é só a intuição)
float similarity = CosineSimilarity(docEmbedding, queryEmbedding);
// → ~0.87 (alta similaridade — a política de reembolso é relevante)

// Na prática, você não calcula manualmente — usa vector search:
var results = await collection.VectorizedSearchAsync(queryEmbedding,
    new VectorSearchOptions { Top = 5 });
// Retorna os 5 documentos mais próximos semanticamente da query