Semantic Search
semantic search — поиск по смыслу через векторные представления
Семантический поиск помогает находить материалы по смысловой близости, даже если запрос и документ сформулированы разными словами. В распространённой схеме тексты превращают в векторы и сравнивают их. Качество зависит от модели, языка и устройства поиска; близость векторов ещё не доказывает полезность ответа.
Коротко
Семантический поиск ищет материалы по смысловой близости, а не только по совпавшим словам. Например, запрос «не получается войти в аккаунт» может привести к инструкции «Восстановление доступа к учётной записи».
В распространённой реализации запрос и документы превращают в числовые представления — эмбеддинги. Система находит близкие векторы и возвращает связанные с ними тексты. Это полезный способ искать перефразировки, но не безошибочное понимание намерений человека.
Зачем искать не только по словам
Представим базу справки интернет-магазина. Покупатель пишет: «хочу вернуть покупку». В инструкции тот же вопрос назван иначе: «Порядок возврата товара».
Полнотекстовый поиск может сопоставить эти формулировки с помощью обработки слов и словарей синонимов. Семантический добавляет другой сигнал — сходство выученных представлений текста. Это помогает, когда слова различаются сильнее, чем предусмотрено словарём.
Но отмена ещё не отправленного заказа и возврат уже полученного товара — разные действия. Модель может посчитать их слишком близкими и поднять не ту инструкцию. Поэтому смысловое сходство не заменяет проверку того, отвечает ли документ на вопрос.
Как работает векторная схема
Сначала готовят документы
Из материалов извлекают текст. Большие документы при необходимости делят на смысловые фрагменты. Для каждого фрагмента рассчитывают вектор и сохраняют связь с исходным текстом, заголовком, адресом, версией и правами доступа.
Количество чисел в векторе зависит от модели. Универсального размера вроде «обязательно полторы тысячи» нет. Более длинный вектор тоже не гарантирует лучшего поиска.
Затем обрабатывают запрос
Запрос кодируют в совместимое векторное пространство. В одной модели способы кодирования запроса и документа могут различаться: например, используются специальные инструкции или разные части сети. Одинаковое число измерений у двух чужих моделей ещё не делает их векторы совместимыми.
После этого поиск возвращает ближайшие представления среди доступных документов:
документы → подготовка фрагментов → векторы → индекс
↑
вопрос → совместимый вектор → поиск кандидатов → результаты
В небольшой коллекции можно сравнить запрос со всеми векторами. В большой часто используют приближённый поиск ближайших соседей — ANN. Он сокращает работу, но способен пропустить часть ближайших векторов. HNSW — один из таких методов; Faiss — библиотека с разными видами индексов, а не название одного алгоритма.
Что означает оценка сходства
Один из вариантов сравнения — косинусное сходство:
similarity = (A · B) / (||A|| × ||B||)
Для ненулевых векторов его математический диапазон — от −1 до 1. Чем ближе к единице, тем ближе направления векторов. Для конкретных эмбеддингов встречающийся диапазон может быть намного уже.
Эта оценка не является вероятностью правильного ответа. Значение 0.8 не означает «документ полезен на 80%». Пороги выбирают по размеченным примерам конкретной модели.
Есть и другие способы сравнения: скалярное произведение, евклидово расстояние. Для векторов единичной длины косинусное сходство совпадает со скалярным произведением. Метрику и нормализацию выбирают с учётом того, как модель обучалась.
Пример для многоязычной справки
Допустим, у продукта есть русская и английская документация. Пользователь спрашивает по-русски, как отключить автоматическое продление.
Мультиязычная поисковая модель может найти английскую статью об этой настройке. Но важно проверить две вещи отдельно:
- Понимает ли модель именно эту языковую пару и терминологию.
- Описывает ли найденная статья нужное действие, а не просто похожий раздел об оплате.
Фильтр «только русский» ограничивает набор документов. Он не переводит английские результаты и не улучшает автоматически смысловую оценку оставшихся.
Для интерфейса полезно показать заголовок, язык, короткий фрагмент и ссылку на источник. Человек должен понимать, почему ему предложен этот материал, а не видеть один загадочный балл.
Когда помогает гибридный поиск
Для названий, артикулов, кодов ошибок и имён файлов точное совпадение часто важнее смысловой близости. Запрос с номером детали не должен приносить другую деталь только потому, что её описание похоже.
Гибридный поиск объединяет смысловой и лексический сигналы. Он может сохранить точное совпадение и одновременно найти полезную перефразировку. Это тоже требует настройки: смешать две выдачи — ещё не значит автоматически улучшить результат.
Следующим этапом бывает переранжирование: отдельная модель подробнее сравнивает запрос с уже найденными кандидатами. Она меняет порядок, но не возвращает документ, пропущенный первым поиском.
Как проверять качество
Проверка начинается с запросов, похожих на будущие: коротких, длинных, с опечатками, точными кодами и неоднозначными формулировками. Для каждого отмечают полезные документы. Желательно отдельно сохранить примеры, на которых настройки не подбирались.
Несколько показателей отвечают на разные вопросы:
- Recall@K: какая доля всех известных полезных документов попала в первые K результатов.
- Precision@K: какая доля первых K результатов полезна.
- MRR: насколько высоко находится первый полезный результат.
- nDCG: насколько удачно расположен список с учётом разной степени полезности документов.
Отдельно измеряют скорость и сравнивают выдачу с обычным полнотекстовым поиском. Ошибка ANN и ошибка смысловой модели — тоже разные вещи: индекс может найти математически ближайшие векторы идеально, а сами эти тексты окажутся не нужны человеку.
Что важно при обновлении базы
После изменения документа его фрагменты и векторы должны обновиться в индексе. Старые записи не должны продолжать появляться как актуальные.
При замене модели эмбеддингов обычно приходится пересчитывать векторы документов: смешение несовместимых представлений ломает сравнение. Одинаковая размерность от этого не защищает.
Права доступа применяются до выдачи закрытого текста пользователю, внешнему реранкеру или генеративной модели. Семантическая близость не является разрешением на чтение.
Частые вопросы
Это то же самое, что RAG?
Нет. Поиск возвращает материалы, а RAG использует найденное для подготовки ответа языковой моделью. Семантический поиск может работать без генератора; RAG может использовать не только векторный поиск.
Семантический поиск всегда лучше полнотекстового?
Нет. Для точных идентификаторов, редких терминов и некоторых коротких запросов лексический поиск может быть полезнее. Сравнение зависит от коллекции и задач.
Нужна ли отдельная векторная база?
Не всегда. Векторы можно искать библиотекой, расширением уже используемой базы или отдельным сервисом. Выбор зависит от объёма, фильтров, обновлений и числа одновременных запросов.
Сколько документов поместится на одном компьютере?
Это зависит от числа и размерности векторов, индекса, служебных данных и доступной памяти. Одно обещание «сотни миллионов на машине» без этих условий мало что значит.
Можно ли искать изображения по тексту?
Да, если модель обучена сопоставлять изображения и текст в совместимом пространстве. Обычная текстовая модель сама по себе этого не обеспечивает.
Главное
Семантический поиск помогает связать разные формулировки одной темы. Вектор — удобное средство такого сравнения, а не точная запись смысла. Хорошая выдача зависит от языковой модели эмбеддингов, подготовки документов, метрики, фильтров и проверки на реальных вопросах.