Contextual embeddings represent a word differently depending on the sentence it appears in, rather than assigning it one fixed vector regardless of context. The word "bank" gets a different representation in "river bank" than it does in "bank account," because a contextual embedding model reads the surrounding words before deciding how to encode the target word.
This is a meaningful upgrade over earlier, static embedding techniques, which assigned every occurrence of a word the same vector no matter how it was actually being used, which meant a model had to somehow work around ambiguity rather than resolve it at the representation level. Transformer-based models like BERT popularized contextual embeddings, and they're now the default approach behind essentially every modern large language model, since capturing a word's meaning-in-context is foundational to getting downstream tasks right.
