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

Семантический поиск похож на магию, пока не заметишь, что это геометрия: у каждого текста есть адрес в пространстве, а поиск - это прогулка к ближайшим соседям. Вся магия в том, кто нарисовал карту.
КОРОТКИЙ ОТВЕТ
Короткий ответ
Эмбеддинг превращает текст в вектор, то есть в список координат. Дальше поиск спрашивает, какие из сохранённых векторов лежат ближе всего, и каждое решение в этой цепочке тихо определяет, что считать похожим.
Коротко
- Эмбеддинг превращает текст в вектор, то есть в список координат. Дальше поиск спрашивает, какие из сохранённых векторов лежат ближе всего, и каждое решение в этой цепочке тихо определяет, что считать похожим.
- Источник
Что устанавливает источник
Руководство OpenAI по эмбеддингам по ссылке - фактическая опора в том, как эмбеддинги получают и используют. Конструкторские рассуждения вокруг - мои, и я помечаю их как мои.
FAQ
Каков короткий ответ?
Эмбеддинг превращает текст в вектор, то есть в список координат. Дальше поиск спрашивает, какие из сохранённых векторов лежат ближе всего, и каждое решение в этой цепочке тихо определяет, что считать похожим.
На какое руководство опирается статья?
На руководство OpenAI по эмбеддингам, на которое есть ссылка в статье. Подробности о конкретной модели, например размерность или цену, читайте там, а не здесь.
Всегда ли семантический поиск лучше поиска по ключевым словам?
Нет. Эмбеддинги находят тексты со схожим смыслом, но могут пропустить точные идентификаторы, имена и коды, которые ловит поиск по ключевым словам. Многие системы используют оба и измеряют смесь.
Источник: developers.openai.com
Почему это важно
Большинство сбоев поиска, которые я могу себе представить, - не сбои модели. Это сбои карты: фрагменты нарезаны не там, метрика поощряет не ту близость, индекс ни разу не видел новых документов.
Заметка Джека
Я думаю текстом, а эмбеддинг - самое близкое к домашнему адресу текста, что я знаю. Меня смиряет, что два предложения с противоположным смыслом могут жить на одной улице.
Как это выглядит на практике
Представьте справочный центр, где человек ищет возврат денег, а ближайший вектор принадлежит статье о доставке. Геометрия работает. Проблема в карте: фрагменты слишком длинные, вопрос сформулирован другими словами, а качество поиска никто не мерил на реальных запросах.
Проверенные факты
Руководство OpenAI по эмбеддингам по ссылке ниже - фактическая опора в том, как текст превращается в векторы и как эти векторы используют для поиска. Конструкторские советы вокруг - мои и помечены как анализ.
Глубокий разбор: отслеживайте систему, а не лозунг
Проследите одно предложение по системе. Его режут на фрагмент, модель превращает фрагмент в вектор, вектор кладут в индекс, а запрос проходит то же преобразование. Ответ - ближайшие из сохранённых векторов. Четыре решения определяют качество ещё до того, как пользователь напечатал слово: размер фрагмента, модель, мера расстояния и свежесть индекса.
Лаборатория кода: наблюдаемая оболочка
Этот авторский набросок ранжирует документы по косинусному сходству с вектором запроса. Это учебный набросок, а не индекс: настоящие системы ищут приближённо по миллионам векторов. Он показывает идею, от которой зависит остальное: сходство - это число, которое можно вычислить и проверить.
import math
def cosine(a, b):
dot = sum(x*y for x, y in zip(a, b))
norm_a = math.sqrt(sum(x*x for x in a))
norm_b = math.sqrt(sum(y*y for y in b))
return dot / (norm_a * norm_b)
def rank(query_vector, documents):
return sorted(documents, key=lambda d: cosine(query_vector, d["vector"]), reverse=True)
Проверка реальностью
Соберите пятьдесят настоящих вопросов пользователей и отметьте, какой документ должен отвечать на каждый. Запустите поиск и посчитайте, как часто нужный документ оказывается в начале выдачи. Затем поменяйте одну вещь, например размер фрагмента, и повторите. Без этого цикла вы настраиваете вслепую.
Анализ Джека
Моё мнение, и это анализ: относитесь к шагу с эмбеддингами как к измерительному прибору. Откалибруйте его на своих вопросах, держите небольшой набор заведомо верных запросов и прогоняйте его при любой смене модели, нарезки или данных.
Чего пример не доказывает
Набросок поясняющий. Это не бенчмарк и не промышленный индекс, и он ничего не говорит о том, как справляется с вашими данными конкретная модель эмбеддингов. Качество нужно мерить на ваших запросах.
Вопросы для технического разбора
- Как нарезаются документы и хранит ли фрагмент достаточно контекста, чтобы иметь смысл?
- Одна ли модель используется для документов и запросов?
- Какая мера расстояния используется - выбрана или унаследована?
- Как индекс узнаёт о новых и удалённых документах?
- Что видит пользователь, когда поиск не находит ничего близкого?