TechByteByByte

Embeddings and Representation Learning

Understand representation learning, embeddings, vector spaces and semantic similarity, and how these concepts power modern AI systems such as semantic search, RAG and vector databases.

#Machine Learning#Embeddings#Representation Learning#RAG#Vector Databases#AI

Begin with the central question

How can meaning and similarity become coordinates that software can search?

This question explains why Embeddings and Representation Learning deserves its own lesson. Each definition, calculation, and code example below will answer a specific part of it.

item → embedding model → dense vector → similarity comparison

Before you continue: three tools for this module

  • Embedding: a learned numeric representation.
  • Vector: an ordered list of coordinates.
  • Cosine similarity: a comparison of vector direction, usually higher when items are more similar.

You do not need to memorize these yet. Return to this small map whenever a term reappears.


What You Will Understand

  • Representation Learning: Discover how semantic meaning is projected onto high-dimensional vectors, moving beyond keyword matching.
  • Vector Spaces & Similarity: Learn the mathematics of Cosine Similarity, Euclidean Distance, and Dot Product, understanding which metric fits which vector type.
  • Modern AI Applications: See how embeddings form the foundation of vector search databases, semantic routing, and retrieval-augmented generation pipelines.

An embedding converts an item into coordinates learned by a model:

text / image / audio → embedding model → [0.12, -0.44, 0.81, ...]
                                               ↓ compare vectors
                                  nearby can mean similar under training

The individual numbers usually have no simple human label. Similarity is useful only in the context of the model, input type, distance metric, and evaluation for the real retrieval task.


Why Models Learn Representations Instead of Handwritten Features

Module 5 covered classical feature engineering: humans manually deciding which features matter and how to encode them. This works reasonably well for structured, tabular data — but for text, images, and audio, manually engineering good features is extraordinarily hard. How would you hand-craft a feature that captures “this sentence is sarcastic” or “these two product images look visually similar”?

Representation learning exists to let a model learn these features automatically, from data — and embeddings are the resulting numerical representations that make this learned understanding usable by other systems.


A Map Where Similar Meaning Lives Nearby

Imagine trying to describe your taste in music to a friend using just words — genre, tempo, mood — it’s clumsy and misses subtleties. Now imagine instead you could place every song you know on a giant map, positioned so that songs you’d rate as similar sit physically close together, and songs you’d consider totally different sit far apart.

That map is a useful picture of an embedding space: a learned coordinate system where distance can serve as a signal of similarity according to that model’s training. It is not a universal map of meaning. Results depend on the model, input type, similarity metric, language, domain, and the real task used to evaluate retrieval quality.


4. Core Concept

TermDefinition
Representation learningA model automatically learning useful numerical features from raw data, rather than a human hand-engineering them
Dense representationA representation where most/all values carry meaningful information (as opposed to one-hot encoding’s “sparse,” mostly-zero vectors)
EmbeddingA dense, learned numerical vector representing the meaning of some input (a word, sentence, document, image, etc.)
Vector spaceThe mathematical space embeddings live in — points (vectors) whose positions encode meaning
Semantic similarityHow close two pieces of content are in meaning — embeddings are specifically designed so this maps to spatial closeness
Distance metricA formula for measuring how “close” two vectors are (e.g., cosine similarity, Euclidean distance)
Cosine similarityA distance metric measuring the angle between two vectors, commonly used for embeddings

One-hot encoding vs. embeddings, concretely

One-hot encoding of words:      Embedding of words:

"king"  = [1, 0, 0, 0, ...]     "king"  = [0.21, -0.05, 0.88, ...]
"queen" = [0, 1, 0, 0, ...]     "queen" = [0.19, -0.02, 0.85, ...]
"apple" = [0, 0, 1, 0, ...]     "apple" = [-0.71, 0.44, 0.02, ...]

Distance("king", "queen")        Distance("king", "queen")
= same as ANY two words          = SMALL (genuinely similar meaning)
(one-hot treats every word       Distance("king", "apple")
as equally different from        = LARGE (genuinely unrelated)
every other word)

🧠 This is the whole point of embeddings: one-hot encoding (Module 5) treats every category as equally, arbitrarily different from every other — it carries zero information about how similar two things are. Embeddings are specifically learned so that distance in the vector space reflects genuine semantic similarity.

Semantic Vector Arithmetic

Because embeddings map semantic concepts onto numerical axes, we can actually perform vector arithmetic on concepts. The classic example is:

KingMan+WomanQueen\vec{\text{King}} - \vec{\text{Man}} + \vec{\text{Woman}} \approx \vec{\text{Queen}}

graph TD
    A["Concept: King<br>(High Royalty, High Masculinity)"] -->|Subtract 'Man' Vector| B["Concept: Ruler<br>(High Royalty, Neutral Gender)"]
    B -->|Add 'Woman' Vector| C["Concept: Queen<br>(High Royalty, High Femininity)"]

5. How It Works — Step by Step

1. Train a model on a large amount of data with a task that
   REQUIRES understanding relationships between items
   (e.g., "predict the next word," or "predict which words
   appear near each other," or self-supervised objectives
   from Module 2)
2. As a SIDE EFFECT of learning to perform this task well,
   the model develops internal numerical representations
   (embeddings) that capture meaningful relationships
3. Extract these internal representations — they ARE the embeddings
4. Use them for downstream tasks: similarity search, clustering
   (Module 11), classification, recommendation, RAG retrieval

🧠 Critical insight: embeddings usually aren’t the direct goal of training — they emerge as a useful byproduct of training a model to do something else well (like next-word prediction). A model that gets very good at predicting which word comes next necessarily has to develop an internal understanding of word relationships and meaning — and that internal understanding, extracted as vectors, is the embedding.

Cosine similarity, in depth

Cosine Similarity(a,b)=cos(θ)=abab=i=1Daibii=1Dai2i=1Dbi2\text{Cosine Similarity}(\mathbf{a}, \mathbf{b}) = \cos(\theta) = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \|\mathbf{b}\|} = \frac{\sum_{i=1}^{D} a_i b_i}{\sqrt{\sum_{i=1}^{D} a_i^2} \sqrt{\sum_{i=1}^{D} b_i^2}}

Where:

  • (\mathbf{a} \cdot \mathbf{b}) is the dot product of the vectors (multiply matching positions, then sum).
  • (|\mathbf{a}|) and (|\mathbf{b}|) are the Euclidean norms (L2 norms / magnitudes) of the vectors.
  • Dividing by the magnitudes means cosine similarity only cares about the angle (\theta) between vectors, not their length—two vectors pointing in exactly the same direction score 1.0, perpendicular vectors score 0.0, and opposite directions score -1.0.

🧠 Why cosine similarity specifically, rather than raw Euclidean distance, for embeddings? Embedding magnitude often isn’t meaningful on its own (it can vary for reasons unrelated to semantic content, like text length) — but the direction an embedding points in reliably captures its meaning.

Cosine similarity isolates exactly that directional information, ignoring magnitude, which is why it’s the standard choice for comparing embeddings specifically.


6. Mathematical Intuition

Read the mathematics as a story

item → embedding model → dense vector → similarity comparison

First identify the input, the operation, and the output. Then read the symbols as a shorter way to describe that same journey; do not begin by memorizing the formula.

A small, concrete worked example:

# Build a small, inspectable example of Embeddings and Representation Learning.
# Follow the data, learned values, predictions, and evaluation in order.
import numpy as np

king  = np.array([0.9, 0.1, 0.3])
queen = np.array([0.85, 0.15, 0.28])   # deliberately similar to "king"
apple = np.array([-0.5, 0.8, -0.2])    # deliberately different

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

print("king vs queen:", cosine_similarity(king, queen))
print("king vs apple:", cosine_similarity(king, apple))

Expected Output:

king vs queen: 0.9974
king vs apple: -0.4177

king and queen score extremely close to 1.0 (nearly identical direction — very similar meaning), while king and apple score negative (pointing in substantially different directions — dissimilar meaning). This numeric behavior is exactly what makes embeddings useful for retrieval: “find the most similar item” becomes “find the vector with the highest cosine similarity.”


7. Small Worked Example

Walk through the example

  1. Identify what each input number represents.
  2. Follow one operation at a time and keep the units or class meanings attached.
  3. Translate the result back into an ordinary sentence about the original problem.

The goal is not merely to obtain the answer; it is to expose the model’s decision process.

Imagine a simplified 2-dimensional embedding space (real embeddings have hundreds/thousands of dimensions, but 2D is easy to visualize):

      similarity axis 2

   queen • │ • king

  ─────────┼───────── similarity axis 1

           │           • apple

king and queen sit close together in this space — reflecting their related meaning. apple sits far away, in a completely different region — reflecting its unrelated meaning. A real embedding model learns positions like this automatically, across hundreds of dimensions simultaneously, purely from patterns in how words/sentences are actually used together in massive amounts of text.


8. Python Example

What the code will demonstrate

The following Embeddings and Representation Learning code turns the worked example into an experiment you can repeat. First predict the result; then prepare the small dataset, apply the technique, inspect the important intermediate values, and compare the actual output with your prediction.

Python and library symbols used below

  • NumPy (np) stores and calculates with numeric arrays.
  • pandas (pd) represents table-shaped data when it is used.
  • scikit-learn provides tested implementations with a consistent .fit(...) and .predict(...) workflow.
# Build a small, inspectable example of Embeddings and Representation Learning.
# Follow the data, learned values, predictions, and evaluation in order.
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

# Simulated sentence embeddings (in reality, produced by a real embedding model
# like OpenAI's text-embedding-3-small, or a Sentence-Transformers model)
sentences = [
    "The cat sat on the mat.",
    "A feline rested on the rug.",       # similar meaning to sentence 1
    "The stock market crashed today.",    # unrelated meaning
]

# Stand-in for a real embedding API call — deterministic "fake" embeddings for this demo
def fake_embed(text):
    np.random.seed(abs(hash(text)) % (10 ** 6))
    return np.random.rand(16)

embeddings = np.array([fake_embed(s) for s in sentences])

similarity_matrix = cosine_similarity(embeddings)
print("Similarity matrix:\n", np.round(similarity_matrix, 3))

# Find the most similar sentence to sentence 0
query_idx = 0
similarities = similarity_matrix[query_idx]
similarities[query_idx] = -1   # exclude comparing the sentence to itself
most_similar_idx = np.argmax(similarities)
print(f"\nMost similar to '{sentences[query_idx]}':")
print(f"-> '{sentences[most_similar_idx]}' (similarity: {similarities[most_similar_idx]:.3f})")

Expected Output (approximate — depends on the fake embedding function’s random output; a REAL embedding model would reliably rank sentence 1 as most similar to sentence 0):

Similarity matrix:
 [[1.    0.72  0.68]
 [0.72  1.    0.65]
 [0.68  0.65  1.   ]]

Most similar to 'The cat sat on the mat.':
-> 'A feline rested on the rug.' (similarity: 0.720)

How It Works

  • cosine_similarity from sklearn computes exactly the formula from Section 5, applied to every pair of embeddings at once, producing a full similarity matrix.
  • np.argmax finds the index of the highest similarity score — this exact operation (find the highest-scoring match) is the core mechanism behind every semantic search and RAG retrieval system: rank all candidates by similarity to the query, return the top matches.
  • Note: this example uses fake, randomly-generated embeddings for illustration — a real embedding model (which genuinely encodes meaning) would reliably score sentence 1 (“A feline rested on the rug”) as most similar to sentence 0, since they describe the same underlying situation using different words.

9. Real-World Example

A company builds a “find similar support tickets” feature: every incoming ticket is embedded using a text embedding model, and compared via cosine similarity against embeddings of all previously resolved tickets.

The system surfaces the most similar past tickets (and their resolutions) to support agents automatically — entirely powered by the fact that semantically similar ticket descriptions (“my payment failed” and “I can’t complete checkout”) end up with high cosine similarity, even though they share almost no exact words in common — something classical keyword-matching search would completely miss.


10. How This Is Used in AI

From mechanism to product

RAG systems embed queries and document chunks, search for compatible vectors, and give the retrieved text to an LLM. Vectors from incompatible embedding models should not be compared.

How this connects to LLMs

request → data or context preparation → model computation → evaluated output

An LLM may use this idea during training, or an AI application may use a separate ML component around the LLM. Those are different locations in the system, and the explanation below identifies which one applies.

🤖 How Is This Used in AI?

Direct relevance to Agentic AI: Extremely High. This module is the direct mechanical foundation of RAG, semantic search, and much of how agents retrieve and reason about information.

Concept from this moduleDirect AI application
EmbeddingsThe literal numerical representation of text (or images) used throughout LLM applications
Semantic similarityThe mechanism behind “find relevant documents” in RAG
Cosine similarityThe standard distance metric used in virtually every vector database
Vector spaceWhat a vector database actually stores and searches over
Representation learningThe training process behind embedding models themselves (e.g., text-embedding-3, Sentence-Transformers)

🧠 Connecting every dot from this course:

Self-supervised learning (Module 2)
        ↓ trains a model that, as a side effect, learns...
Representation learning (this module)
        ↓ producing...
Embeddings (dense vectors capturing meaning)
        ↓ compared using...
Cosine similarity / distance metrics
        ↓ which is mechanically identical to...
K-Nearest Neighbors search (Module 10)
        ↓ implemented at massive scale by...
Vector databases
        ↓ powering...
RAG retrieval, semantic search, recommendation systems

This single chain connects nearly every module in Part 3 and Part 4 of this course directly into the mechanism underneath modern AI retrieval systems — embeddings are genuinely the concept where “classical ML” and “modern generative AI” meet most directly and concretely.


11. How This Is Used in Agentic AI

Trace one agent step

goal + state → model proposes → runtime validates → tool or response → evaluation

The model produces a prediction or proposal. The agent runtime is ordinary software that manages tools, permissions, state, retries, and execution; it may use this ML concept directly, indirectly through an LLM, or not at all.

🤖 Every RAG-augmented agent’s retrieval step is, mechanically, exactly this module: embed the query, compute similarity against a store of document embeddings, retrieve the top matches.

Beyond retrieval, agent memory systems (allowing an agent to recall relevant past interactions) frequently work the same way — embedding past conversations or facts, and retrieving the most semantically similar ones when relevant context is needed for a new request.

Understanding embeddings deeply is arguably the single most practically useful piece of “classical ML” knowledge for anyone building RAG or memory-augmented agent systems.


12. Common Beginner Mistakes

⚠️ Mistake

Incorrect idea: Comparing embeddings from two DIFFERENT embedding models

Why it is incorrect: Embeddings from different models live in different, incompatible vector spaces — comparing an embedding from model A against an embedding from model B produces meaningless results, even though both are technically “vectors of numbers.” Always embed everything you intend to compare using the exact same model.

⚠️ Mistake

Incorrect idea: Using Euclidean distance instead of cosine similarity without understanding the difference matters

Why it is incorrect: As Section 5 explains, embedding magnitude often isn’t meaningful — Euclidean distance factors in magnitude, while cosine similarity doesn’t; using the wrong one can produce subtly worse retrieval results depending on the specific embedding model’s properties.

⚠️ Mistake

Incorrect idea: Assuming embeddings capture ALL relevant signal for a task

Why it is incorrect: Embeddings capture semantic similarity extremely well, but may miss other important signals (exact keyword matches, recency, source authority) — this is precisely why real RAG systems often combine embedding-based retrieval with additional reranking signals (Module 9’s tree-based models are a common practical choice here) rather than relying on embeddings alone.


13. Important Distinctions

One-Hot Encoding (Module 5)Embeddings
Sparse — mostly zerosDense — most values carry information
No notion of similarity between categoriesDistance directly reflects semantic similarity
Dimension grows with number of categoriesFixed dimension, regardless of vocabulary/content size
Hand-crafted, no learning involvedLearned automatically from data
Cosine SimilarityEuclidean Distance
Measures angle between vectors, ignores magnitudeMeasures straight-line distance, magnitude matters
Standard default for comparing embeddingsMore common for raw feature comparisons (e.g., classic KNN, Module 10)
Range: -1 to 1 (higher = more similar)Range: 0 to infinity (lower = more similar)

14. When Should You Use This?

  • Anytime you need to measure semantic similarity between pieces of text, images, or other unstructured content — embeddings are the standard, modern solution.
  • Building any RAG system, semantic search feature, recommendation engine, or content-deduplication system.
  • When keyword/exact-match search is insufficient because users phrase queries differently than your source content (a very common real scenario).

15. When Should You NOT Use This?

  • When exact keyword matching is genuinely what’s needed (e.g., searching for a specific error code or product SKU) — embeddings can sometimes under-perform simple exact-match search for these precise-lookup cases; many production systems combine both approaches (hybrid search).
  • For small, simple structured/tabular data problems where classical features (Module 5) already work well — embeddings add complexity that isn’t warranted when your data isn’t unstructured text/images to begin with.
  • When interpretability of why two things are similar is critical — embedding-space similarity, while highly effective, doesn’t naturally provide a human-readable explanation the way a rule-based or feature-based similarity score might.

16. Production Considerations

  • Embedding model consistency — if you ever change embedding models, you generally need to re-embed your entire existing dataset; mixing embeddings from different model versions in the same vector store produces unreliable results (recall Section 12).
  • Embedding cost and latency — calling an embedding API has real cost and latency at scale; batching embedding requests (Module 13 of the Python course — async/concurrent calls) is a common, practical optimization.
  • Storage and retrieval infrastructure — vector databases are purpose-built for storing and efficiently searching large volumes of embeddings (via approximate nearest neighbor techniques, referenced in Module 10) — a genuine infrastructure decision with real cost and performance trade-offs.
  • Monitoring retrieval quality over time — as your document collection grows or shifts, periodically re-evaluate whether retrieval quality (using precision/recall, Module 17) remains strong.

17. AI Engineer Takeaway

🎯 AI Engineer Takeaway: Embeddings are quite possibly the single most practically important ML concept for a modern AI engineer to understand deeply — they are the literal numerical substrate that RAG, semantic search, recommendation systems, and agent memory are built on.

The core mechanism is genuinely simple once you see it clearly: represent meaning as a vector, measure similarity with cosine similarity, and retrieve the closest matches — mechanically identical to K-Nearest Neighbors (Module 10), just applied to learned, semantically-meaningful vectors instead of raw hand-crafted features, and operating at a scale that requires specialized vector database infrastructure to serve efficiently.


18. Interview Questions

Basic Questions

Q: What is an embedding?

A: An embedding is a dense numerical vector representing the meaning of a piece of content (text, an image, etc.), learned automatically by a model — typically as a byproduct of training on some other task, like next-word prediction. Embeddings are specifically structured so that distance in the vector space reflects semantic similarity: content with similar meaning ends up with embeddings that are close together.

Q: Why is cosine similarity commonly used to compare embeddings, rather than simple Euclidean distance?

A: Cosine similarity measures the angle between two vectors, ignoring their magnitude — and embedding magnitude often isn’t a meaningful signal on its own (it can vary for reasons unrelated to actual semantic content). An embedding’s direction in the vector space is what reliably encodes meaning, so cosine similarity, which isolates exactly that directional information, is the standard choice for comparing embeddings.

Intermediate Questions

Q: Why can’t you directly compare an embedding produced by one model with an embedding produced by a different model?

A: Different embedding models are trained independently, and each develops its own internal vector space with its own arbitrary geometry — there’s no guarantee that “similar direction” means the same thing across two different models’ spaces. Comparing embeddings from different models is comparing coordinates from two unrelated maps, which produces meaningless results. All embeddings intended for comparison must come from the same model.

Q: How does the relationship between embeddings and K-Nearest Neighbors explain how RAG retrieval actually works?

A: RAG retrieval works by embedding a user’s query, then finding the documents whose embeddings are most similar (via cosine similarity) to the query’s embedding — mechanically, this is exactly K-Nearest Neighbors search: find the K closest points (documents) to a given point (the query) in a vector space. The main practical differences at RAG scale are that retrieval typically uses approximate (rather than exact) nearest- neighbor search for speed at scale, implemented via specialized vector database infrastructure, and cosine similarity rather than Euclidean distance as the typical distance metric.

Scenario-Based Questions

Q: A company wants semantic search over 10 million documents. Walk through how you’d approach this, from traditional ML through to RAG.

A: Thought process: This scenario is a great opportunity to walk through the full progression this module bridges — from why classical approaches fall short, to embeddings, to the infrastructure needed at real scale.

Investigation: A traditional keyword-matching search (e.g., simple text search) would fail to handle queries phrased differently than the source documents’ exact wording — missing genuinely relevant results due to vocabulary mismatch, not a lack of true relevance. The solution: generate embeddings for all 10 million documents using a consistent embedding model, and store them in a vector database purpose-built for efficient similarity search at this scale (since a naive brute-force K-Nearest Neighbors comparison against all 10 million documents per query would be far too slow). At query time, embed the incoming query, retrieve the top-K most similar document embeddings via the vector database’s approximate nearest neighbor search, and optionally apply a reranking step (Module 9’s tree-based models, or a more sophisticated reranking model) to refine the initial retrieval results before presenting them — or, if the goal extends beyond raw search into generating a synthesized natural-language answer, feed the retrieved documents into an LLM as context (the “generation” half of RAG).

Correct answer: Recommend an embedding-based semantic search pipeline backed by a vector database, rather than traditional keyword search alone — explaining explicitly that embeddings solve the vocabulary-mismatch problem that pure keyword matching cannot, and that vector database infrastructure (not classical KNN implementations) is required specifically because of the 10-million-document scale.

Production consideration: At this scale, real engineering decisions include: embedding model choice (cost, latency, quality trade-offs), whether to combine semantic search with traditional keyword search in a hybrid approach (often improves results, especially for exact-match needs like product codes or names), how often to re-embed documents as content changes, and whether a reranking step is worth the added latency for improved result quality — genuine trade-offs an AI engineer needs to navigate deliberately, not just “turn on embeddings and done.”


Next: Module 19 — Transfer Learning and Fine-Tuning — pretrained models, LoRA conceptually, and a practical decision framework for prompting vs. RAG vs. fine-tuning.

Author
TechByteByByte Editorial Team
Reviewed by
TechByteByByte Admin
Published
Last reviewed