Capítulo 03 · Embeddings · 10 min

O espaço do significado

Palavras em um espaço geométrico. Rei − Homem + Mulher = Rainha, e outros milagres vetoriais.

Uma equacao que nao deveria funcionar

Considere esta operacao:

rei − homem + mulher ≈ rainha

E uma equacao aritmetica, como 5 − 2 + 4 = 7. So que fala de palavras.

E funciona. Nao porque alguem programou "rei" e "rainha" para se parecerem. Mas porque cada palavra foi transformada em uma lista de numeros — um vetor — e a algebra do significado vira algebra mesmo.

E uma das ideias mais contraintuitivas dos LLMs, e tambem uma das mais poderosas.

Do token a posicao

No capitulo anterior vimos que o texto vira uma sequencia de token IDs — inteiros como 5234 ou 91. Mas um inteiro sozinho nao tem estrutura. O token 5234 nao esta "perto" nem "longe" do token 5235. Eles so estao numerados.

Para que um modelo consiga calcular com palavras, ele precisa de uma representacao mais rica. A solucao: associar a cada token um vetor de cerca de 768, 1024 ou 4096 numeros reais. E isso que chamamos de embedding.

No inicio do treinamento, esses vetores sao aleatorios. Pouco a pouco, ao prever milhoes de proximas palavras, o modelo aprende a organiza-los para que palavras de significado proximo tenham vetores proximos.

Ninguem escreveu essa regra. Ela emerge da tarefa de predicao.

Por que funciona

Pense no que significa prever bem a palavra depois de "O rei falou com sua...". Boas respostas sao filha, esposa, mae, rainha — nao motor ou algoritmo. Um modelo que prediz bem essas continuacoes precisa saber que essas palavras sao substituiveis naquele contexto.

A forma mais economica de memorizar essa equivalencia, quando voce tem bilhoes de parametros e bilhoes de frases, e agrupar "filha", "esposa", "mae", "rainha" na mesma regiao do espaco vetorial. O gradiente empurra nessa direcao a cada iteracao, sem que nenhum humano precise rotular nada.

Embeddings nao sao projetados. Sao o rastro geometrico da tarefa de predicao.

Manipule o espaco

O espaco abaixo e uma caricatura em duas dimensoesembeddings reais tem centenas. Mas as propriedades essenciais estao ali: clusters semanticos, vizinhanca, aritmetica vetorial.

Cada ponto é uma palavra projetada em um espaço de significado. Os vizinhos compartilham um tema — não uma ortografia. A seta mostra a aritmética vetorial que torna possível Rei − Homem + Mulher = Rainha.

Tres coisas para observar:

  • Os clusters aparecem sem que tenham sido nomeados. Passe por gato e voce vera cachorro, rato, leao. Passe por alegria e vera amor, medo, tristeza. As categorias nao existem nos dados — existem na geometria.
  • Algumas direcoes tem sentido. O vetor que vai de homem a mulher e mais ou menos o mesmo que vai de rei a rainha, ou de pai a mae. Essa regularidade permite a aritmetica.
  • As distancias sao relativas, nao absolutas. Que gato esteja a distancia 0.32 de cachorro nao significa nada sozinho. O que importa e que esteja mais perto de cachorro do que de pao ou raiva.

A ilusao 2D

Em modelos reais, um embedding geralmente tem entre 768 e 4096 dimensoes. Por que tantas?

Porque em 2D somos obrigados a fazer compromissos. gato precisa ficar perto de cachorro (animais domesticos), de rato (mamiferos), de tigre (felinos), de passaro (animal). Todas essas "proximidades" puxam em direcoes diferentes — e em 2D entram em conflito.

Com 768 dimensoes, cada faceta do significado pode ter sua propria direcao. A palavra gato pode ficar perto de cachorro no eixo "animal domestico", perto de tigre no eixo "felino", perto de rato no eixo "pequeno mamifero". O espaco e grande o suficiente para essas relacoes coexistirem sem serem esmagadas.

Humanos acham que nao da para visualizar 768 dimensoes. Embeddings nao pedem isso: eles apenas as usam para organizar categorias sem colisao.

Medir a proximidade: similaridade cosseno

Quando dizemos que duas palavras estao "proximas" no espaco dos embeddings, como medimos isso na pratica? Nao com a distancia euclidiana classica. Com a similaridade cosseno.

A ideia: olhar para o angulo entre os dois vetores, nao para o comprimento deles. Dois vetores apontando na mesma direcao tem similaridade cosseno 1, independentemente da magnitude. Dois vetores ortogonais dao 0. Dois opostos, −1.

cos(u, v) = (u · v) / (||u|| × ||v||)

Por que essa medida e nao outra? Porque a norma de um embedding (seu comprimento) varia por razoes que nao tem relacao com o significado — frequencia da palavra, profundidade da camada. A direcao, sim, codifica o significado. A similaridade cosseno isola o que importa.

E tambem essa medida que move toda a busca semantica moderna: bases de dados vetoriais (Pinecone, pgvector, Chroma...) indexam milhoes de vetores e encontram os mais proximos de uma consulta em um piscar de olhos. Voltaremos a isso no capitulo 10 (RAG).

Consequencias

Essa representacao geometrica tem efeitos surpreendentes:

  • Erros ortograficos sao robustos. bom dia e bom dai podem ter embeddings proximos, entao o modelo os "entende" quase do mesmo jeito, embora no nivel dos tokens sejam diferentes.
  • Vieses se encaixam. Se no corpus de treinamento enfermeira aparece mais no feminino e medico no masculino, a aritmetica dos embeddings refletira isso. medico − homem + mulher pode dar enfermeira. Muito trabalho entra na correcao desses vieses — voltaremos a isso no capitulo 8.
  • Tudo se torna calculavel. Depois que o significado vira vetor, podemos somar, projetar, medir angulos. E exatamente o que o mecanismo seguinte faz.

O proximo passo

Sua palavra virou um vetor. A palavra ao lado tambem. E a anterior. Como o modelo, a partir dessa sequencia de vetores, decide que em "O medico mandou a enfermeira para casa dela porque **ela**...", o pronome ela se refere a enfermeira e nao ao medico?

A resposta esta no proximo capitulo: a atencao, o mecanismo que permite a cada token olhar para todos os outros antes de decidir quem importa.

Atualizado em

Embeddings: o espaço geométrico do significado · Step by Token