An embedding layer is a trainable lookup table that maps tokens to dense vectors. Learn how it works, how it differs from an embedding model, and how to build one.

Updated August 2026
An embedding layer is the part of a neural network that turns words into numbers. More precisely, it turns any discrete symbol, a word, a product ID, a category, into a dense vector the rest of the network can work with. What makes it more than a translation table is that it learns. During training it nudges the vectors so related items end up close together, and that learned geometry is what lets the model find meaning in text and categories.
Quick answer: An embedding layer is a trainable lookup table that maps discrete tokens, such as words or category IDs, to dense fixed-size vectors. Each token has a row in a weight matrix; the layer returns that row and adjusts it during training so related tokens land near each other in vector space. It is a lookup rather than a matrix multiplication, which makes it efficient over large vocabularies, and it is usually the first layer in a model that reads text or categorical data.
An embedding layer is a layer in a neural network that converts discrete inputs into dense vector embeddings. Its job is to give every item in a vocabulary, every word or ID, a compact list of numbers that the network can compute with and learn from.
The alternative it replaces is one-hot encoding, where each item is a long vector of zeros with a single 1. One-hot vectors are huge, sparse, and carry no relationships: "cat" and "dog" are as far apart as "cat" and "car." An embedding layer instead assigns each item a short dense vector, a few dozen to a few hundred numbers. It learns the values, so items used in similar ways drift close together. That shift from sparse-and-meaningless to dense-and-learned is the whole point.
This content was generated with the assistance of AI. Our AI prompt chain workflow is carefully grounded and preferences .gov and .edu citations when available. All content is reviewed by a Telnyx employee to ensure accuracy, relevance, and a high standard of quality.

An embedding layer works as a lookup into a weight matrix. The matrix has one row per item in the vocabulary and one column per embedding dimension, so a vocabulary of 30,000 words with 128-dimensional vectors is a 30,000-by-128 table. When a token comes in as an integer index, the layer simply returns that row. No multiplication, just a lookup by row number.
To make it concrete, picture a vocabulary of four words with three-dimensional embeddings, a 4-by-3 table. The word "cat" might sit at index 2, with the row [0.8, -0.1, 0.3]. Feed the layer the index 2 and it returns exactly those three numbers. After training, the row for "dog" would sit near "cat"'s and the row for "car" would sit elsewhere. The numbers mean nothing on their own; what matters is which rows end up close.
How many dimensions to use is a design choice. A larger embedding dimension gives each token more room to encode distinctions, at the cost of more parameters and more data to train them well. Common sizes run from a few dozen for small vocabularies to hundreds or thousands in large models.
In practice the layer handles a whole sequence at once. The sentence "the cat sat" is first tokenized to indices, say [5, 2, 40], and the layer returns three rows, one vector per token, stacked into a matrix that the next layer reads. A longer sequence just returns more rows.
The payoff of the learned geometry is that relationships turn into directions. The classic example from word embeddings is arithmetic: the vector for "king" minus "man" plus "woman" lands closest to "queen." Nobody told the layer about gender or royalty; it inferred those directions from how the words are used, and that is exactly the kind of structure a downstream model can exploit.
Those rows start as random numbers and become meaningful through training. The layer's weights are adjusted by backpropagation like any other layer, so each time a token appears, the gradient nudges its vector in a direction that lowers the loss. Over many examples, word embeddings for words that appear in similar contexts converge on similar vectors. Only the rows for tokens that actually appear in a batch get updated, which is part of why the lookup is efficient.
An embedding layer and an embedding model are related but not the same. An embedding layer is a component inside a larger network, a lookup table trained end to end for that network's task. An embedding model is a standalone model whose whole job is to produce embeddings, usually general-purpose ones for search, clustering, or retrieval.
The practical difference is scope and reuse. An embedding layer's vectors are tuned to one model and one task, and they mean little outside it. An embedding model, such as a sentence or text embedding model, is trained so its output vectors are useful across many tasks, which is why they power retrieval and semantic search. When a system needs embeddings it can store and compare later, it calls an embedding model; when a network needs to represent its own inputs, it uses an embedding layer.
Semantic search is the clearest example of the difference. To build it, you run documents through an embedding model, store the resulting vectors in a database, and at query time embed the question and find the nearest stored vectors. That workflow needs a standalone embedding model whose vectors carry meaning on their own. An embedding layer buried inside a classifier could not be reused this way, because its vectors only make sense to the network that trained them.
An embedding layer is used wherever a model has to read discrete input, and its most common home is natural language processing. In an NLP model, it is the first layer: it turns each token into a vector before a recurrent network or a transformer processes the sequence. The same layer sits at the input of the large language models behind modern chat systems, mapping token IDs to the vectors the rest of the stack builds on.
Beyond language, embedding layers appear in several settings:

You implement an embedding layer with a single built-in module in most frameworks. In PyTorch it is torch.nn.Embedding(num_embeddings, embedding_dim), where num_embeddings is the vocabulary size and embedding_dim is the vector length; you pass it a tensor of integer indices and it returns their vectors. Its weights start from a normal distribution by default and train with the rest of the model.
In Keras the layer is keras.layers.Embedding(input_dim, output_dim), where input_dim is the vocabulary size and output_dim is the embedding dimension. Note that the older input_length argument was removed in Keras 3, so current code sets only the vocabulary and dimension and lets the sequence length be inferred. In both frameworks you can also load pretrained vectors into the weight matrix and either freeze or fine-tune them.
An embedding is a list of numbers that represents an item, such as a word, as a point in space. Items that are similar get points that are close together, so the numbers capture meaning rather than just identity. An embedding layer is the part of a network that learns and stores these lists.
An embedding layer looks up a stored vector by index, while a dense or linear layer multiplies its input by a weight matrix. The two are mathematically related: a lookup is the same as multiplying a one-hot vector by a matrix. The lookup skips that multiplication, which makes the embedding layer far more efficient for large vocabularies.
The vectors train through backpropagation, the same way the rest of the network learns. Each starts as random numbers, and every time a token appears in training, its vector is nudged to lower the model's loss. Over many examples, tokens that appear in similar contexts end up with similar vectors.