Pular para o conteúdo principal

Capítulo 1: O que são Embeddings?

Introdução​

Embeddings são representações vetoriais densas de texto que capturam o significado semântico. Eles permitem que computadores compreendam e comparem o significado de textos, e não apenas as palavras.

O Conceito​

Pense em embeddings como coordenadas em um "espaço de significados":

"happy" → [0.2, 0.8, -0.1, 0.5, ...]
"joyful" → [0.21, 0.79, -0.12, 0.48, ...] // Semelhante!
"sad" → [-0.3, 0.1, 0.7, -0.4, ...] // Diferente!

Significados semelhantes = Vetores semelhantes = Próximos no espaço

Como Embeddings Funcionam​

1. Texto para Vetor​

from openai import OpenAI

client = OpenAI()

# Texto vira um vetor
text = "Machine learning is fascinating"
response = client.embeddings.create(
input=text,
model="text-embedding-3-small"
)

embedding = response.data[0].embedding
# Resultado: [0.023, -0.891, 0.156, ..., 0.342]
# 1536 dimensões

2. Cálculo de Similaridade​

import numpy as np

def cosine_similarity(vec1, vec2):
"""Calculate cosine similarity between two vectors"""
dot_product = np.dot(vec1, vec2)
norm1 = np.linalg.norm(vec1)
norm2 = np.linalg.norm(vec2)
return dot_product / (norm1 * norm2)

# Exemplo
similarity = cosine_similarity(
embed("What is RAG?"),
embed("Explain Retrieval Augmented Generation")
)
# Resultado: ~0.92 (muito semelhante!)

similarity = cosine_similarity(
embed("What is RAG?"),
embed("How to cook pasta")
)
# Resultado: ~0.15 (não semelhante)

Dimensões do Embedding​

ModeloDimensõesTamanho do Vetor
text-embedding-3-small15366KB
text-embedding-3-large307212KB
Cohere embed-v310244KB
BGE-small3841.5KB
BGE-large10244KB

Por que as Dimensões Importam​

  • Mais dimensões = Representações mais detalhadas
  • Menos dimensões = Busca mais rápida, menos armazenamento
  • Trade-off entre qualidade e eficiência

Métricas de Similaridade​

Similaridade Cosseno​

Mais comum para embeddings de texto:

# Intervalo: -1 a 1
# 1 = mesma direção
# 0 = ortogonal (não relacionado)
# -1 = direção oposta

cosine_sim = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))

Distância Euclidiana​

Mede a distância em linha reta:

# Menor = mais semelhante
euclidean_dist = np.linalg.norm(a - b)

Produto Escalar​

Quando os vetores são normalizados:

# Para vetores normalizados, igual à similaridade cosseno
dot_product = np.dot(a, b)

Visualizando Embeddings​

from sklearn.manifold import TSNE
import matplotlib.pyplot as plt

# Reduz para 2D para visualização
texts = ["cat", "dog", "car", "truck", "happy", "sad"]
embeddings = [embed(t) for t in texts]

tsne = TSNE(n_components=2, random_state=42)
reduced = tsne.fit_transform(embeddings)

plt.scatter(reduced[:, 0], reduced[:, 1])
for i, text in enumerate(texts):
plt.annotate(text, (reduced[i, 0], reduced[i, 1]))
plt.show()

Clusters esperados:

  • "cat", "dog" → Cluster de animais
  • "car", "truck" → Cluster de veículos
  • "happy", "sad" → Cluster de emoções

Propriedades-Chave de Bons Embeddings​

PropriedadeDescrição
Similaridade SemânticaSignificados semelhantes → Vetores próximos
ComposicionalidadeFrases codificadas de forma significativa
Cross-lingualMesmo conceito semelhante entre idiomas
DensoTodas as dimensões carregam significado

Embeddings em RAG​

Resumo​

  • Embeddings convertem texto em vetores numéricos
  • Significados semelhantes produzem vetores semelhantes
  • Similaridade cosseno é a métrica padrão
  • Dimensões afetam qualidade versus eficiência
  • Embeddings permitem busca semântica em RAG

Próximos Passos​

Continue para Capítulo 2: Modelos de Embedding para explorar as opções disponíveis.