# Эмбеддинг

> Представление объекта — слова, текста, изображения, товара — в виде вектора чисел, в котором близкие по смыслу объекты оказываются рядом; основа семантического поиска и RAG.

Источник: https://llmdocs.ru/wiki/embedding/ · обновлено 2026-11-09 · лицензия CC BY-SA 4.0

- **Что это**: вектор фиксированной длины, кодирующий смысл объекта
- **Типичная размерность**: от 384 до 4096
- **Мера близости**: косинусное сходство, скалярное произведение
- **Исторические модели**: word2vec (2013), GloVe (2014), BERT (2018)
- **Текстовые модели**: Sentence-BERT, E5, BGE, модели эмбеддингов облачных провайдеров
- **Бенчмарк**: MTEB
- **Применение**: семантический поиск, RAG, кластеризация, рекомендации, поиск дубликатов
**Эмбеддинг** (англ. *embedding* — «вложение») — представление объекта в виде вектора — списка из сотен или тысяч чисел — так, что близкие по смыслу объекты получают близкие векторы. Объектом может быть слово, предложение, целый документ, изображение, товар или пользователь. Эмбеддинги переводят «смысл» на язык геометрии: чтобы найти похожие тексты, достаточно найти ближайшие векторы.

Эмбеддинги — основа [векторного поиска](https://llmdocs.ru/wiki/vector-search.md), [RAG](https://llmdocs.ru/wiki/rag.md), рекомендательных систем, кластеризации и поиска дубликатов. Внутри [трансформеров](https://llmdocs.ru/wiki/transformer.md) и языковых моделей каждый [токен](https://llmdocs.ru/wiki/tokenization.md) тоже сначала превращается в эмбеддинг.

## История

Идея представлять слова векторами восходит к дистрибутивной гипотезе лингвистики: «слово узнаётся по его окружению». Практический прорыв совершил **word2vec** Томаша Миколова и коллег из Google (2013): небольшая сеть, обученная предсказывать соседние слова, давала векторы, в которых проявлялись смысловые отношения — знаменитый пример `король − мужчина + женщина ≈ королева`.[1] Вскоре появились GloVe (Стэнфорд, 2014)[6] и fastText.

Векторы слов не учитывали контекст: у слова «ключ» был один вектор и для замка, и для родника. Модели на основе трансформеров — ELMo и BERT (2018) — стали давать **контекстные** эмбеддинги. В 2019 году Sentence-BERT показал, как дообучить BERT так, чтобы эмбеддинги целых предложений можно было сравнивать косинусным сходством; так появились современные модели эмбеддингов текста.[2]

## Как получают эмбеддинги

Модель эмбеддингов — обычно трансформер-энкодер, обученный методом **контрастного обучения**: векторы пар «вопрос — релевантный ответ» или «перевод — оригинал» сближаются, а случайных пар — раздвигаются. На выходе любой текст превращается в вектор фиксированной длины.

```python
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("intfloat/multilingual-e5-small")
docs = ["passage: PostgreSQL — реляционная СУБД",
        "passage: Kubernetes управляет контейнерами",
        "passage: pgvector добавляет векторный поиск в Postgres"]
query = "query: как искать похожие векторы в базе данных"

doc_vecs = model.encode(docs, normalize_embeddings=True)
q_vec = model.encode(query, normalize_embeddings=True)
scores = doc_vecs @ q_vec           # косинусное сходство для нормированных векторов
print(scores.argsort()[::-1])        # ближайшим окажется фрагмент про pgvector
```

Библиотека Sentence Transformers даёт доступ к сотням открытых моделей с [Hugging Face](https://llmdocs.ru/wiki/hugging-face.md);[5] облачные провайдеры предлагают модели эмбеддингов через API. Некоторые модели требуют префиксов вроде `query:` и `passage:`, отличающих вопрос от документа.

## Меры близости

| Мера | Формула | Замечание |
|---|---|---|
| Косинусное сходство | `cos θ = a·b / (‖a‖·‖b‖)` | стандарт для текстовых эмбеддингов |
| Скалярное произведение | `a·b` | совпадает с косинусом для нормированных векторов, быстрее |
| Евклидово расстояние | `‖a − b‖` | для нормированных векторов даёт тот же порядок, что косинус |

## Выбор модели

- **Качество** сравнивают на бенчмарке MTEB, охватывающем поиск, классификацию, кластеризацию и десятки языков.[3] Для русского текста нужны мультиязычные модели или модели, обученные на русском.
- **Размерность** влияет на память и скорость поиска: миллион векторов по 1024 числа с плавающей точкой занимает около 4 ГБ. Модели, обученные по схеме **Матрёшки**, позволяют обрезать вектор до первых 256 или 512 компонент почти без потери качества.[4]
- **Максимальная длина входа** — длинные документы приходится разбивать на фрагменты (см. [Чанкинг документов](https://llmdocs.ru/wiki/chunking.md)).
- **Одна модель на всё.** Векторы разных моделей несовместимы: при смене модели нужно пересчитать эмбеддинги всей коллекции.

## Хранение и поиск

Для небольших коллекций достаточно хранить векторы в массиве NumPy и сравнивать полным перебором. Для миллионов векторов используют индексы приближённого поиска ближайших соседей — в [PostgreSQL](https://llmdocs.ru/wiki/postgresql.md) через расширение [pgvector](https://llmdocs.ru/wiki/pgvector.md) или в специализированных векторных базах. Векторы можно сжимать квантизацией — до 8 бит или даже 1 бита на компоненту — с небольшой потерей точности.

## Ограничения

Эмбеддинги хорошо улавливают общий смысл, но хуже — точные совпадения: артикулы, номера версий, редкие имена и отрицания («без сахара»). Поэтому в поисковых системах векторный поиск сочетают с классическим полнотекстовым (BM25) — **гибридный поиск** — и уточняют результаты переранжированием.

## См. также

- [Векторный поиск](https://llmdocs.ru/wiki/vector-search.md)
- [pgvector и векторные БД](https://llmdocs.ru/wiki/pgvector.md)
- [RAG (генерация с дополнением поиском)](https://llmdocs.ru/wiki/rag.md)
- [Трансформер (архитектура)](https://llmdocs.ru/wiki/transformer.md)
- [Чанкинг документов](https://llmdocs.ru/wiki/chunking.md)

## Источники

1. [T. Mikolov et al. — Efficient Estimation of Word Representations in Vector Space (2013)](https://arxiv.org/abs/1301.3781)
2. [N. Reimers, I. Gurevych — Sentence-BERT (2019)](https://arxiv.org/abs/1908.10084)
3. [N. Muennighoff et al. — MTEB: Massive Text Embedding Benchmark (2022)](https://arxiv.org/abs/2210.07316)
4. [A. Kusupati et al. — Matryoshka Representation Learning (2022)](https://arxiv.org/abs/2205.13147)
5. [Sentence Transformers — документация](https://sbert.net/)
6. [J. Pennington, R. Socher, C. Manning — GloVe: Global Vectors for Word Representation (2014)](https://nlp.stanford.edu/projects/glove/)
