Medindo a Similaridade entre Embeddings
Entenda as métricas de distância e similaridade que alimentam a busca vetorial e como escolher a mais adequada.
Medindo a Similaridade entre Embeddings é uma aula grátis de LangChain / RAG / Vector DBs no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de LangChain / RAG / Vector DBs, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de LangChain / RAG / Vector DBs inclui 4 aulas no total.
Partes desta aula ainda não foram traduzidas e aparecem em inglês.
From Vectors to Meaning
An embedding maps text to a list of numbers in high-dimensional space. Texts with similar meaning land close together. To rank results we need a way to measure that closeness.
Cosine Similarity
Cosine similarity measures the angle between two vectors, ignoring their length. It ranges from -1 (opposite) to 1 (identical direction).
import numpy as np
def cosine(a, b):
a, b = np.array(a), np.array(b)
return a.dot(b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(cosine([1, 0], [1, 1])) # ~0.707Euclidean Distance
Euclidean (L2) distance is the straight-line distance between two points. Smaller means more similar. Unlike cosine, it is sensitive to magnitude.
import numpy as np
def l2(a, b):
return np.linalg.norm(np.array(a) - np.array(b))
print(l2([0, 0], [3, 4])) # 5.0Dot Product
The dot product multiplies matching dimensions and sums them. For normalized vectors it equals cosine similarity, which is why many stores normalize first.
import numpy as np
def dot(a, b):
return float(np.array(a).dot(np.array(b)))
print(dot([1, 2, 3], [4, 5, 6])) # 32.0Normalization
Dividing a vector by its length gives a unit vector. After normalization, dot product and cosine similarity become equivalent, simplifying the math.
import numpy as np
def normalize(v):
v = np.array(v, dtype=float)
return v / np.linalg.norm(v)
print(normalize([3, 4])) # [0.6 0.8]Choosing a Metric
Most modern text embedding models are trained for cosine similarity. Use cosine unless your provider documentation recommends otherwise.
- Cosine: direction matters, length ignored
- L2: absolute position matters
- Dot: cosine on normalized data
Similarity vs. Distance
Beware the inversion: higher cosine = more similar, but higher L2 = less similar. Vector stores expose this difference, sometimes returning a score you must interpret.
Why High Dimensions Help
Embeddings often have hundreds or thousands of dimensions. More dimensions give the model room to separate subtle differences in meaning, at the cost of more storage and compute.
Setting Metric in a Store
When creating a collection you declare the metric. Many libraries default to cosine.
import chromadb
client = chromadb.Client()
col = client.create_collection(
name="docs",
metadata={"hnsw:space": "cosine"}
)Ranking Search Results
Search computes the chosen metric between the query embedding and every stored vector, then returns the top-k closest. The metric directly shapes which documents win.
query_vec = embed("refund policy")
scored = [(cosine(query_vec, d.vec), d) for d in docs]
scored.sort(reverse=True)
top3 = scored[:3]Pitfall: Mixing Models
Vectors from different embedding models live in different spaces and are not comparable. Always embed your query with the same model you used to index the documents.
Quick Check
Test your grasp of similarity metrics.
Recap
You explored how similarity is measured:
- Cosine compares direction (most common for text)
- Euclidean compares position
- Dot product equals cosine on normalized vectors
- Always query and index with the same model
Perguntas Frequentes
A aula “Medindo a Similaridade entre Embeddings” é grátis?
Sim — o texto completo de “Medindo a Similaridade entre Embeddings” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de LangChain / RAG / Vector DBs, atualize para CoddyKit PRO. O curso de LangChain / RAG / Vector DBs inclui 4 aulas no total.
O que vou aprender em “Medindo a Similaridade entre Embeddings”?
Entenda as métricas de distância e similaridade que alimentam a busca vetorial e como escolher a mais adequada. Você pratica LangChain / RAG / Vector DBs com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar LangChain / RAG / Vector DBs?
Nenhuma experiência prévia é necessária. LangChain / RAG / Vector DBs no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Medindo a Similaridade entre Embeddings”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de LangChain / RAG / Vector DBs?
Sim. Cada aula de LangChain / RAG / Vector DBs inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Entendendo embeddings de texto
- Introdução aos bancos de dados vetoriais
- Armazenando e recuperando embeddings
- Medindo a Similaridade entre Embeddings