# Смысл как координаты

Экспресс-курс об эмбеддингах и векторном поиске. 20 понятий — embedding, vector space, cosine similarity, nearest-neighbour search, vector database, ANN, semantic search, RAG retrieval, кластеризация, рекомендации, reranking, embedding evals и другие — у каждого английское название, схема, пример и карточка. Смысл, ставший вычислимым: «найди похожее» превращается в «найди ближайшие точки». В конце — шпаргалка по всем понятиям на одной странице.

- **Author:** Фёдор Чищин
- **Level:** intermediate
- **Reading time:** ~35 минут чтения
- **Published:** 2026-06-13
- **Source:** https://fedorthinks.com/ru/learn/embeddings-express

---

## 1. Смысл как координаты

Вся область покоится на одной изящной идее: если можешь разместить смысл в пространстве, можешь с ним вычислять. Ухвати это, и эмбеддинги перестанут быть загадочными.

### Карта: 20 понятий в семи группах

> Карта метро: сначала видишь линии целиком, потом едешь по станциям.

Сначала три **основы** — почему компьютеру не хватает символов, что такое эмбеддинг и что такое пространство смыслов. Дальше шесть групп, по одной на главу: **сходство**, **векторная база**, **семантический поиск**, применения **за пределами поиска**, **ловушки** и как **применять хорошо**.

У каждого понятия дальше одно и то же: **английское название** (запомни его — это термин), образ из жизни, **схема** и **карточка** с полями: _что это_, _как работает_, _пример_, _подвох_ и _связи_.

_Diagram: Основы сверху, ниже — шесть групп, по ним идут главы 2–7._

### Lexical Gap — компьютеры видят символы, а не смысл

> Машина, что может сказать, что две фотографии различаются пиксель за пикселем, но понятия не имеет, что на обеих собака, — поверхность различна, смысл ей невидим.

Для компьютера текст — это просто символы. Он может проверить, идентичны ли две строки, но у него нет врождённого чувства, что «машина» и «автомобиль» значат одно, или что «банк одобрил мой кредит» и «мою ипотеку приняли» — об одном и том же событии. Это разрыв между словами и смыслом — **lexical gap**. Совпадение точных слов (**exact match**) упускает смысл целиком. Чтобы софт работал с тем, что текст _значит_, а не с тем, как он написан, нужен способ превратить смысл во что-то, что компьютер может измерить.

_Diagram: Для точного сравнения это две разные строки. Для человека — одно и то же событие._

#### Lexical Gap (разрыв между словами и смыслом)

- **Что это:** Одинаковый смысл можно сказать разными словами — а компьютер сравнивает только слова.
- **Пример:** «Машина» и «автомобиль»; «банк одобрил мой кредит» и «мою ипотеку приняли».
- **Подвох:** Поиск по точным словам тихо пропускает всё, что сказано иначе.
- **Связи:** Этот разрыв и закрывает **embedding**.

### Embedding — текст превращается в точку

> Карта, где у каждой идеи есть место, и идеи, что значат схожее, сидят рядом, — «собака» близко к «щенку», обе далеко от «налоговой декларации».

**Эмбеддинг (embedding)** — это список чисел, **вектор (vector)**, что представляет смысл куска текста. Его производит **модель эмбеддингов (embedding model)**: она читает текст и выдаёт его координаты. Похожий текст получает похожие числа — а значит, точку рядом. Смысл, что был невидим компьютеру, стал позицией, — а позиции это то, что софт может сравнивать, сортировать и искать.

_Diagram: Текст → модель эмбеддингов → вектор. Вектор — это координаты смысла._

#### Embedding (эмбеддинг, вектор)

- **Что это:** Список чисел (вектор), который представляет смысл текста.
- **Как работает:** Модель эмбеддингов читает текст и выдаёт координаты; похожий смысл — похожие числа.
- **Пример:** «щенок» → `[0.21, −0.83, 0.47, …]` — рядом с вектором «собаки».
- **Подвох:** Качество всего пространства зависит от модели, что его строит.
- **Связи:** Точки живут в **vector space**; их хранит **vector database**.

### Vector Space — пространство, где близость значит сходство

> Карта, на которой «собака», «щенок» и «кошка» стоят кучкой в одном углу, а «таблица» и «налоговая декларация» — в другом.

Все эмбеддинги живут в одном многомерном **пространстве (vector space, embedding space)**. Измерений у него сотни, но идею легко увидеть на плоскости: точки со схожим смыслом сидят рядом, несвязанные — далеко. «Собака» и «щенок» рядом, и обе далеко от «таблицы». Само пространство и есть карта смысла.

_Diagram: Схожие смыслы кучкуются рядом; несвязанные — на другом краю карты._

#### Vector Space (embedding space, пространство эмбеддингов)

- **Что это:** Многомерное пространство, где у каждого текста есть место.
- **Как работает:** Модель размещает точки так, что близость значит сходство смысла.
- **Пример:** Кучка «собака / щенок / кошка» далеко от кучки «таблица / налоговая декларация».
- **Связи:** Расстояние в нём — это **semantic similarity**.

### Meaning as Geometry — как только у смысла есть координаты, с ним можно вычислять

> Как только каждый город — точка на карте, «найди ближайший город» становится простой геометрией, — карта превратила смутный вопрос в измеримый.

Вот ход, что делает всё остальное возможным: со смыслом, выраженным как координаты, размытые вопросы о смысле становятся точными вопросами о геометрии. «Какие документы об этой теме?» становится «какие точки рядом с этой точкой?». «Похоже ли это на то?» становится «как далеко они друг от друга?». Компьютер не может понять смысл, но может идеально мерить расстояние, — а эмбеддинги дают ему отвечать на вопросы о смысле, меряя расстояние вместо этого. Этот перевод — весь трюк.

_Diagram: Слева — размытые вопросы о смысле, справа — те же вопросы как точная геометрия._

> **Вопрос рамки:** «Нужно ли мне работать с тем, что текст значит, а не только с тем, как он написан, — ведь это ровно разрыв, что эмбеддинги закрывают, превращая смысл в координаты?»

> Компьютеры видят символы, а не смысл. Эмбеддинг превращает кусок текста в точку в пространстве, размещённую так, что схожие смыслы сидят рядом, — делая смысл тем, что софт может измерить.

## 2. Сходство — это расстояние

Со смыслом, размещённым в пространстве, сравнение двух вещей по смыслу становится измерением того, как далеко их точки друг от друга. Эта простая идея — движок под всем, что делают эмбеддинги.

### Semantic Similarity — близкие точки значат схожие вещи

> На карте два города рядом — между ними легко проехать; два на противоположных побережьях — далеко. Близость на карте зеркалит близость в реальности.

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

_Diagram: Запрос «вернуть деньги» рядом с «политикой возврата» и далеко от «часов работы»._

#### Semantic Similarity (семантическое сходство)

- **Что это:** Насколько близки два текста по смыслу.
- **Как работает:** Эмбеддишь оба и меряешь расстояние между векторами.
- **Пример:** «Как мне вернуть деньги» близко к «политике возврата», хотя общих слов почти нет.
- **Подвох:** Похожее по теме ещё не значит полезное — см. **similar ≠ relevant**.
- **Связи:** Меряется обычно через **cosine similarity**.

### Nearest-Neighbour Search — найти ближайших соседей

> Библиотекарь, что, получив одну книгу, может мгновенно указать тебе полку книг, самых на неё похожих, — не по названию, а по тому, о чём они.

Ключевая операция — **поиск ближайших соседей (nearest-neighbour search, k-NN)**: по одной точке найти _k_ ближайших к ней. «Покажи мне похожее на это» становится «найди ближайших соседей этого элемента в пространстве». Вручи системе вопрос, продукт, документ, и она вернёт самые семантически похожие, ранжированные по близости. Эта единственная операция движет семантический поиск, рекомендации и бо́льшую часть того, что идёт дальше. Всё это какая-то версия «найди близкие точки».

_Diagram: Вокруг запроса — три ближайшие точки, по порядку близости. Остальное далеко._

#### Nearest-Neighbour Search (k-NN, поиск ближайших соседей)

- **Что это:** По одной точке найти k ближайших к ней.
- **Как работает:** Считаешь сходство и сортируешь по близости — топ-k и есть ответ.
- **Пример:** Вопрос → три самых близких по смыслу документа.
- **Подвох:** На миллионах точек проверять каждую слишком медленно — нужен **ANN**.
- **Связи:** Основа **semantic search**, **recommendations**, **classification**.

### Cosine Similarity — направление важнее сырого расстояния

> Две стрелки, указывающие в одну сторону, похожи, даже если одна длиннее, — важно направление, куда они указывают, а не их длина.

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

_Diagram: A и B смотрят в одну сторону — похожи, хоть и разной длины. C смотрит в другую._

#### Cosine Similarity (косинусное сходство)

- **Что это:** Сходство по углу между векторами, а не по длине отрезка.
- **Почему так:** Направление схватывает смысл; длина часто отражает лишь длину текста.
- **Пример:** Короткая заметка и длинная статья на одну тему — маленький угол, высокое сходство.
- **Связи:** Стандартная мера для **semantic similarity** и **k-NN**.

> **Вопрос сходства:** «Я пытаюсь найти вещи, самые похожие по смыслу на данный элемент, — ведь это просто поиск его ближайших соседей в пространстве эмбеддингов?»

> Схожие смыслы сидят рядом, так что сходство становится расстоянием. Ключевая операция — поиск ближайших соседей: найти ближайшие точки, обычно меряя направление через косинусное сходство.

## 3. Векторная база

Найти ближайших соседей легко с горсткой точек и трудно с миллионами. Векторная база — это движок, построенный делать это быстро в масштабе, — практический дом эмбеддингов.

### Vector Database — хранилище под поиск ближайших соседей

> Склад, устроенный так, что по любому предмету он мгновенно принесёт тебе сотню самых похожих, — не сканируя каждую полку, а благодаря тому, как он устроен.

**Векторная база данных (vector database)** хранит твои эмбеддинги и быстро отвечает на запросы «найди ближайшие точки к этой», даже по миллионам векторов. Она построена под ту одну операцию, что нужна эмбеддингам: поиск ближайших соседей по сходству. Ты эмбеддишь данные раз, хранишь векторы, и база становится искомым индексом смысла. Когда люди строят поиск, RAG или рекомендации на эмбеддингах, векторная база — это где векторы живут и где случается поиск.

_Diagram: Приложение кладёт векторы в базу и получает обратно k ближайших._

#### Vector Database (векторная база данных)

- **Что это:** Хранилище векторов с быстрым поиском ближайших соседей.
- **Как работает:** Хранит вектор, id и метаданные; по вектору запроса возвращает топ-k ближайших.
- **Пример:** Миллион чанков документации; запрос находит пять ближайших за миллисекунды.
- **Связи:** Внутри — индекс **ANN**; под ней работают **semantic search** и **RAG**.

### ANN — приближённый поиск делает масштаб быстрым

> Чтобы найти ближайшее кафе, ты не меряешь расстояние до каждого кафе на Земле — ты сперва смотришь в своём районе. Умные срезы бьют проверку всего.

Сравнивать запрос с каждым хранимым вектором было бы слишком медленно в масштабе. Так что векторные базы используют **приближённый поиск ближайших соседей (approximate nearest-neighbour, ANN)**: хитрое индексирование, что находит ближайшие точки, не проверяя их все, меняя крошечную долю точности на огромный выигрыш скорости. Поэтому векторный поиск по миллионам элементов возвращается за миллисекунды. Точные ближайшие соседи нужны редко — «очень близко» так же хорошо, как «ближайшее».

_Diagram: Сверху — точный поиск сравнивает со всеми. Снизу — ANN сразу идёт в нужный «район»._

#### ANN (approximate nearest neighbour, приближённый поиск)

- **Проблема:** Сравнивать запрос с каждым из миллионов векторов слишком медленно.
- **Идея:** Индекс сразу ведёт в нужный район пространства и проверяет только его.
- **Пример:** Поиск по миллионам элементов — за миллисекунды.
- **Цена:** Изредка пропускает истинного ближайшего — «очень близко» вместо «ближайшего».
- **Связи:** Движок внутри **vector database**; ускоряет **k-NN**.

### Embed Once, Query Many — эмбедди раз, ищи много раз

> Ты каталогизируешь библиотеку раз, когда книги приходят, и после этого каждый поиск мгновенен, — медленное индексирование случается заранее, быстрый поиск — навсегда после.

Форма системы эмбеддингов такова: **эмбедди свои данные раз** заранее и храни векторы (**index time**), потом **ищи дёшево** на каждом запросе (**query time**). У вычисления эмбеддингов есть стоимость, но ты платишь её, когда данные добавляются, а не на каждом поиске. Дорогой шаг — разовое индексирование, а стоимость на запрос — один вектор и быстрый поиск. Знать это разделение помогает рассуждать и о стоимости, и о свежести системы.

_Diagram: Сверху — разовое индексирование всех документов. Снизу — дешёвый путь каждого запроса._

#### Embed Once, Query Many (index time vs query time)

- **Идея:** Эмбеддить данные заранее, при добавлении; на запросе — только сам запрос.
- **Пример:** Документы эмбеддятся при загрузке; вопрос пользователя — один вектор и поиск.
- **Подвох:** Новые или изменённые данные надо доэмбеддить, иначе поиск их не видит.
- **Связи:** Хранится в **vector database**; смена модели = переэмбеддинг всего (**same model**).

> **Вопрос базы:** «Где живут мои векторы, и достаточно ли быстр поиск в моём масштабе — использую ли я векторную базу с приближённым поиском, а не сканирую всё?»

> Векторная база хранит эмбеддинги и находит ближайших соседей быстро, используя приближённый (ANN) поиск, чтобы масштабироваться до миллионов. Эмбедди данные раз заранее; ищи их дёшево на каждом запросе.

## 4. Семантический поиск

Самое прямое применение эмбеддингов — поиск, что понимает смысл. Стоит увидеть его ясно, потому что это и самое частое применение, и фундамент RAG.

### Semantic Search — ищи по смыслу, а не совпадением слов

> Помощник, что находит то, что ты хочешь, даже когда ты описываешь это своими словами, — «штука, что держит напитки холодными» даёт тебе холодильник, без точного совпадения.

**Семантический поиск (semantic search)** находит результаты по смыслу, а не совпадением ключевых слов (**keyword search**). Ты эмбеддишь запрос пользователя и ищешь чанки документов, чьи векторы ближе всего к нему. Так поиск «как мне вернуть деньги» находит страницу «политика возврата», потому что их смыслы сидят рядом, — хотя они почти не делят слов. Поиск по ключевым словам это упустил бы; семантический для этого создан. Он находит то, что ты _имел в виду_, а не только то, что буквально напечатал.

_Diagram: Поиск по словам ничего не находит. Поиск по смыслу находит «политику возврата»._

#### Semantic Search (семантический поиск)

- **Проблема:** Пользователь пишет своими словами — ключевые слова не совпадают.
- **Идея:** Эмбеддить запрос и искать ближайшие векторы документов.
- **Пример:** «Как мне вернуть деньги» → страница «Политика возврата».
- **Цена:** Нужны модель, векторная база и переэмбеддинг при смене модели.
- **Связи:** Держится на **k-NN** и **vector database**; это извлечение в **RAG**.

### Same Model, Same Space — эмбедди запрос так же, как данные

> Чтобы сравнить два измерения, надо использовать одну линейку, — измерь одно в дюймах, а другое в сантиметрах, и числа не сойдутся.

Чтобы поиск работал, запрос и хранимые документы должны быть эмбеддены **одной моделью**, в одно пространство, — иначе их координаты не сравнимы, и «ближайшее» бессмысленно. Ты эмбеддишь документы моделью, а в момент запроса эмбеддишь вопрос той же моделью. Звучит очевидно, но это частый баг: смешивать модели или менять модель без переэмбеддинга всего тихо ломает поиск, потому что точки больше не делят пространство.

_Diagram: Слева одна модель — одно пространство. Справа разные модели — расстояния ничего не значат._

#### Same Model, Same Space (одна модель для запроса и данных)

- **Что это:** Запрос и документы эмбеддятся одной и той же моделью.
- **Почему:** Разные модели — разные пространства; их координаты несравнимы.
- **Пример:** Поменял модель для запросов, а документы оставил старыми — поиск тихо сломался.
- **Подвох:** Ошибки нет, результаты просто становятся плохими.
- **Связи:** Смена модели = переэмбеддинг всего (**embed once** заново).

### RAG Retrieval — это извлечение под RAG

> Экзамен с открытой книгой: семантический поиск — это как ты находишь нужные страницы, чтобы посмотреть, прежде чем ответить, — поиск, что делает заземлённые ответы возможными.

Семантический поиск — это шаг **извлечения (retrieval)** в **retrieval-augmented generation** (курс о RAG). Когда RAG-система отвечает из твоих документов, эмбеддинги — это как она находит релевантные чанки, чтобы положить в контекст модели. Так что качество RAG-системы сильно покоится на качестве её поиска по эмбеддингам — заведи нужные чанки рядом с запросом, и ответ заземлён; заведи не те, и модель отвечает из мусора.

_Diagram: Вопрос → эмбеддинг → поиск → лучшие чанки в контекст → заземлённый ответ LLM._

#### RAG Retrieval (извлечение в RAG)

- **Что это:** Шаг, где RAG находит чанки для контекста модели.
- **Как работает:** Эмбеддинг вопроса → поиск ближайших чанков → они идут в промпт.
- **Пример:** Бот поддержки находит три абзаца из справки и отвечает по ним.
- **Подвох:** Не те чанки → модель уверенно отвечает из мусора.
- **Связи:** Это **semantic search**; качество зависит от **garbage in** и модели.

> **Вопрос поиска:** «Я совпадаю по смыслу, эмбеддя запрос и документы одной моделью, — или надеюсь, что пользователь напечатал те же ключевые слова, что были в моих документах?»

> Семантический поиск находит по смыслу, а не по ключевым словам, — эмбедди запрос так же, как данные, и найди ближайшие векторы. Это движок извлечения под RAG.

## 5. За пределами поиска

Поиск — очевидное применение, но та же идея «смысл как координаты» тихо движет удивительный диапазон других задач. Увидеть их показывает, почему эмбеддинги — такой фундаментальный инструмент.

### Clustering & Deduplication — группировка по смыслу

> Сортировать кучу смешанных документов в стопки по теме — складывая те, что значат схожее, вместе, не читая каждое слово.

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

_Diagram: Тикеты сами складываются в темы; две почти одинаковые точки — дубликаты, их можно слить._

#### Clustering & Deduplication (кластеризация, поиск дубликатов)

- **Проблема:** Куча текста, и непонятно, какие темы в ней и что повторяется.
- **Идея:** Близкие точки — одна группа; почти совпадающие точки — дубликаты.
- **Пример:** Отзывы клиентов сами собираются в темы; два тикета об одной проблеме сливаются.
- **Связи:** Та же близость, что в **semantic similarity**.

### Recommendations — больше того, что тебе понравилось

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

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

_Diagram: Купленная вещь работает как запрос; её ближайшие соседи — рекомендации._

#### Recommendations (рекомендации, «вам также может понравиться»)

- **Проблема:** Как предложить пользователю ещё что-то, что ему подойдёт.
- **Идея:** Понравившийся элемент — это запрос; его ближайшие соседи — предложения.
- **Пример:** Купил туристические ботинки → носки для трекинга, дождевик, рюкзак.
- **Связи:** Это **k-NN** по товарам вместо документов.

### Classification & Anomaly Detection — свои и чужие

> Охранник, что знает, как выглядит нормальное, и замечает того одного человека, ведущего себя непохоже на всех остальных, — выброс стоит особняком в пространстве.

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

_Diagram: Слева новый элемент лёг рядом со «спамом». Справа точка далеко от нормы — аномалия._

#### Classification & Anomaly Detection (классификация, обнаружение аномалий)

- **Классификация:** Новый элемент получает метку своих ближайших помеченных соседей.
- **Аномалии:** Точка далеко от всего нормального — выброс, который стоит пометить.
- **Пример:** Письмо легло рядом со спамом → спам; странная транзакция → проверить.
- **Связи:** Близость — это **k-NN**; расстояние до кластера — **similarity**.

> **Вопрос за пределами поиска:** «Эта задача на деле о том, какие вещи значат одно или какие непохожи на остальное, — ведь если так, эмбеддинги и расстояние её решают, а не только поиск?»

> Эмбеддинги движут куда больше, чем поиск: кластеризация и дедупликация группируют по смыслу, рекомендации находят похожие элементы, а классификация и обнаружение аномалий рассуждают о близости и расстоянии.

## 6. Ловушки

Эмбеддинги мощны, но легко злоупотребляемы способами, что тихо ломают результаты. Несколько ловушек отвечают за большинство систем эмбеддингов, что разочаровывают.

### Model Mismatch — модель эмбеддингов решает качество

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

Всё зависит от модели, что создаёт эмбеддинги. Хорошая модель размещает смысл точно, так что похожие вещи правда сидят рядом; слабая или несовпадающая (**model mismatch**) производит искажённое пространство, где расстояния вводят в заблуждение. Модель, обученная на общем веб-тексте, может плохо эмбеддить специализированный домен (юридический, медицинский, код), потому что не схватывает различия, что там важны.

_Diagram: Слева модель знает домен — юридические термины рядом. Справа общая модель — всё перемешано._

#### Model Mismatch (несовпадение модели и домена)

- **Что это:** Модель не понимает твой домен и строит искажённое пространство.
- **Пример:** Общая модель плохо различает юридические, медицинские термины или код.
- **Подвох:** Ошибок нет — просто расстояния тихо врут.
- **Что делать:** Выбирать модель нарочно и проверять на своих данных.
- **Связи:** Лечится **model choice** и **embedding evals**.

### Similar ≠ Relevant — похожее не то же, что релевантное

> Два пассажа могут быть об одном предмете и при этом отвечать на разные вопросы, — «как отменить» и «почему отменяют» сидят рядом, но только один — то, что спросили.

Сходство эмбеддингов схватывает _тематическую_ близость, что обычно хороший прокси релевантности, — но не всегда. Два текста могут быть близки по смыслу, пока только один реально отвечает нужде. Поэтому сырой поиск по эмбеддингам — сильный первый проход, но не финальное слово: он находит то, что _об_ нужном, а это не совсем то же, что _полезное_. Отсюда доработки вроде **переранжирования (reranking)** — второй шаг, что пересортировывает найденное по тому, насколько оно отвечает вопросу.

_Diagram: Поиск по сходству ставит «почему отменяют» первым. Reranker поднимает то, что отвечает на вопрос._

#### Similar ≠ Relevant (похожее ≠ релевантное, reranking)

- **Что это:** «Ближайшее» значит «самое похожее», а не «самое полезное».
- **Пример:** На «как отменить» поиск вернул «почему пользователи отменяют» — та же тема, не тот ответ.
- **Подвох:** Легко переоценить топ-результат.
- **Что делать:** Считать поиск первым проходом; добавить **reranking** вторым шагом.
- **Связи:** Ограничение **semantic similarity** и **semantic search**.

### Garbage In — мусор внутрь, мусорное пространство

> Если ты подшиваешь документы под небрежные, непоследовательные метки, даже идеальный поиск по шкафу возвращает бардак, — индекс хорош ровно настолько, насколько то, что в него вошло.

Качество системы эмбеддингов ограничено качеством того, что ты эмбеддишь. Плохой **чанкинг (chunking)** из курса о RAG, шумный текст или эмбеддинг не того поля производят пространство, где даже идеальный поиск возвращает плохие результаты, — расстояния вычислены над мусором. Так что бо́льшая часть работы — не поиск, а подготовка чистого, хорошо нарезанного текста. Чини входы, прежде чем винить поиск.

_Diagram: Тот же поиск: шумный вход даёт мусор, чистый — хорошие результаты._

#### Garbage In (мусор на входе)

- **Что это:** Плохой текст на входе портит всё пространство.
- **Пример:** Обрывки чанков посреди фразы, шум в тексте, эмбеддинг не того поля.
- **Подвох:** Винят поиск, хотя сломаны входы.
- **Что делать:** Сначала чистить и хорошо нарезать текст, потом эмбеддить.
- **Связи:** Прямо бьёт по **RAG retrieval**; ловится **embedding evals**.

> **Вопрос ловушки:** «Подходит ли моя модель эмбеддингов этим данным, не отношусь ли я к „похожему“ как к „релевантному“ слишком доверчиво и чист ли текст, что я эмбеддю, — или я строю на искажённом пространстве?»

> Эмбеддинги разочаровывают известными способами: слабая или несовпадающая модель искажает пространство, «похожее» не всегда «релевантное», а шумные входы делают даже идеальный поиск возвращающим мусор. Выбирай модель и чисти входы.

## 7. Применять хорошо

Применять эмбеддинги хорошо сводится к выбору правильной модели, кормлению её чистыми данными и измерению того, отражает ли пространство смысл, что тебя волнует.

### Model Choice — выбирай модель эмбеддингов под свои данные

> Ты нанимаешь переводчика, что реально знает диалект, в котором работаешь, — универсал может упустить ровно те различия, что важнее всего для тебя.

Самый значимый выбор — **модель эмбеддингов (embedding model)**, и правильная зависит от твоих данных и задачи. Общая модель нормальна для общего текста; специализированному домену может понадобиться модель, что его понимает или дообучена на нём. Учитывай **язык, домен, размер вектора и стоимость**. Не хватай дефолт — выбери модель, что строит точное пространство для _твоего_ смысла, потому что каждое сравнение едет на ней.

_Diagram: Язык, домен, размер вектора и цена → выбор модели → проверка на своих данных._

#### Model Choice (выбор модели эмбеддингов)

- **Идея:** Выбрать модель под свои данные, а не взять дефолт.
- **Критерии:** Язык, домен, размер вектора, стоимость.
- **Пример:** Для юридических текстов — модель, что понимает юридический язык или дообучена на нём.
- **Цена:** Смена модели позже = переэмбеддинг всех данных.
- **Связи:** Лечит **model mismatch**; проверяется **embedding evals**.

### Embedding Evals — меряй, отражает ли пространство реальный смысл

> Ты тестируешь новую карту, проверяя, что места, что ты знаешь близкими, реально выходят близкими, — если нет, карта неверна.

Не предполагай, что настройка эмбеддингов работает, — проверь. Для набора случаев, где ты знаешь, что _должно_ быть похожим, проверь, что поиск реально возвращает их среди ближайших. Это версия эвалов для эмбеддингов (**embedding evals**): кладёт ли пространство нужные вещи близко, на твоих реальных данных? Измерение ловит плохую модель, несовпадение домена или проблему чанкинга, прежде чем оно тихо испортит всё, построенное сверху. Непротестированное пространство — догадка; измеренное — инструмент, которому можно доверять.

_Diagram: Тест-кейсы «запрос → ожидаемый документ»; доля попаданий в топ-k — это оценка._

#### Embedding Evals (оценка поиска по эмбеддингам)

- **Идея:** Набор пар «запрос → что должно найтись» и проверка, что оно в топ-k.
- **Пример:** 50 реальных вопросов поддержки с правильной статьёй — сколько раз она в топ-5?
- **Что ловит:** Плохую модель, несовпадение домена, проблемы чанкинга.
- **Связи:** Проверяет **model choice**, **garbage in** и всю цепочку целиком.

### Как понятия связаны

> Конвейер: на входе текст, на выходе — поиск, рекомендации и группы. Каждая ловушка — место, где конвейер может испортиться.

Всё в курсе — одна цепочка. **Чистый текст** идёт в **модель эмбеддингов**, она выдаёт **векторы**, они живут в **векторной базе** с индексом **ANN**. Запрос ищет **ближайших соседей** по **косинусному сходству** — и на этой одной операции стоят **семантический поиск и RAG**, **рекомендации**, **кластеризация** и **классификация**. Ловушки сидят на звеньях: **garbage in** — на входе, **model mismatch** — на модели, **similar ≠ relevant** — на поиске. А **embedding evals** меряют всю цепочку.

_Diagram: Текст → модель → векторы → база → ближайшие соседи → все применения. Красным — где ломается._

#### Прежде чем строить на эмбеддингах

- **Про смысл ли задача** — сходство, группировка, извлечение — что эмбеддинги реально подходят?
- **Правильна ли модель эмбеддингов** для твоих данных, домена и языка?
- **Эмбеддятся ли запрос и документы** одной моделью, в одно пространство?
- **Есть ли векторная база** с приближённым поиском для твоего масштаба?
- **Чист ли текст, что ты эмбеддишь**, и хорошо нарезан, а не шум?
- **Измерил ли ты**, что пространство кладёт нужные вещи близко, на реальных случаях?

#### Признаки, что ты используешь эмбеддинги хорошо

- Ты тянешься к эмбеддингам, когда задача про **смысл**, а не точное совпадение.
- Ты **выбрал модель эмбеддингов** под свои данные и эмбеддишь запрос и документы **одинаково**.
- Ты используешь **векторную базу** с **приближённым поиском** в масштабе.
- Ты эмбеддишь **чистый, хорошо нарезанный** текст и относишься к «похожему» как к сильному, но несовершенному прокси релевантного.
- Ты **измерил**, что пространство отражает реальный смысл, вместо того чтобы это предположить.

## Шпаргалка: все 20 понятий

### Основы

- **Lexical Gap** (разрыв слов и смысла): Один смысл — разные слова; точное совпадение его не видит.
- **Embedding** (эмбеддинг, вектор): Список чисел — координаты смысла текста.
- **Vector Space** (пространство эмбеддингов): Карта смысла: близкие точки значат схожее; вопросы о смысле — вопросы о расстоянии.

### Сходство

- **Semantic Similarity** (семантическое сходство): Близость по смыслу = маленькое расстояние между векторами.
- **Nearest-Neighbour Search** (k-NN): Найти k ближайших точек. Ключевая операция.
- **Cosine Similarity** (косинусное сходство): Сходство по углу: важно направление, не длина.

### Векторная база

- **Vector Database** (векторная база): Хранит векторы и быстро находит ближайшие.
- **ANN** (approximate nearest neighbour): Приближённый поиск: миллисекунды на миллионах ценой крошки точности.
- **Embed Once, Query Many** (index time / query time): Дорого эмбеддить раз заранее, дёшево искать на каждом запросе.

### Семантический поиск

- **Semantic Search** (семантический поиск): Поиск по смыслу, а не по ключевым словам.
- **Same Model, Same Space** (одна модель): Запрос и документы — одной моделью, иначе расстояния бессмысленны.
- **RAG Retrieval** (извлечение в RAG): Эмбеддинги находят чанки, на которых модель строит ответ.

### За пределами поиска

- **Clustering & Deduplication** (кластеризация, дубликаты): Близкие точки — одна тема; почти совпадающие — дубликаты.
- **Recommendations** (рекомендации): Ближайшие соседи того, что понравилось.
- **Classification & Anomaly Detection** (классы и выбросы): Метка ближайших соседей; далеко от нормы — аномалия.

### Ловушки

- **Model Mismatch** (модель не знает домен): Искажённое пространство — расстояния тихо врут.
- **Similar ≠ Relevant** (reranking): Ближайшее — самое похожее, не самое полезное. Помогает переранжирование.
- **Garbage In** (мусор на входе): Плохие чанки и шум портят пространство целиком.

### Применять хорошо

- **Model Choice** (выбор модели): Язык, домен, размер вектора, цена — и проверка на своих данных.
- **Embedding Evals** (оценка поиска): Пары «запрос → ожидаемое»: доля попаданий в топ-k.

> Эмбеддинги превращают смысл в координаты, так что сходство становится расстоянием. Используй их хорошо, выбирая правильную модель, эмбеддя последовательно, кормя чистым текстом и меряя, что пространство правда кладёт похожие вещи близко.

Конец экспресс-курса · 7 глав · 20 понятий

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