Семантический поиск
За пределами поиска по ключевым словам
Проблема: Традиционный поиск по ключевым словам не работает, когда пользователи используют другие слова, чем в документах. Поиск "средство от головной боли" не найдёт "лечение мигрени". Как преодолеть этот разрыв?
Решение: Понимание смысла, а не слов
Semantic search использует эмбеддинги (embeddings) — плотные векторные представления смысла текста — чтобы находить контент по смыслу, а не по точному совпадению ключевых слов. Эмбеддинг-модель читает фрагмент текста и выдаёт список чисел (часто 384, 768 или 1536 штук), который кодирует его смысл. Тексты о похожих идеях оказываются рядом в этом многомерном пространстве, а несвязанные — далеко друг от друга. Запрос "средство от головной боли" находит "лечение мигрени", потому что оба отображаются в близкие векторы, хотя у них нет ни одного общего слова.
Как это работает
Пайплайн состоит из двух фаз. Сначала офлайн-индексация: каждый документ из твоей коллекции один раз прогоняется через эмбеддинг-модель, а полученные векторы сохраняются в векторной базе данных (vector database) — например, Pinecone, Qdrant или pgvector. Затем онлайн-фаза запроса: когда пользователь ищет, его запрос кодируется той же моделью, и ты сравниваешь вектор запроса с сохранёнными векторами документов. Стандартная мера сравнения — это косинусное сходство (cosine similarity): косинус угла между двумя векторами, от 1 (одинаковое направление) до 0 (не связаны) и -1 (противоположны). Документы с наибольшим сходством возвращаются как результаты top-k. Для больших коллекций векторы не сравнивают точно со всеми подряд — индекс приближённого поиска ANN (approximate nearest neighbor), например HNSW, ускоряет поиск ценой редких промахов по настоящему совпадению.
Когда использовать и какие компромиссы
Бери семантический поиск, когда пользователи формулируют запросы своими словами, когда важны синонимы и перефразировки или когда нужен кросс-языковой поиск. Он же — основа извлечения в RAG-системах, которые подают контекст в LLM. Но без ловушек не обходится. Эмбеддинги размывают точные детали: запрос с кодом продукта "X-450" или конкретным именем человека может поднять смутно похожий документ выше точного — ведь именно точность по ключевым словам эмбеддинги и сглаживают. На практике это лечит гибридный поиск (hybrid search): смешиваем семантическую оценку с сигналом по ключевым словам вроде BM25, чтобы получить и смысл, и точное совпадение. Ещё два правила: запросы и документы нужно кодировать одной и той же моделью, а длинные документы перед эмбеддингом стоит резать на маленькие фрагменты (chunks), потому что один вектор не может честно представить десять страниц разнородного текста.
Разобранный пример. Представь базу знаний поддержки из 3 статей: A = "Сброс пароля", B = "Обновление платёжной карты", C = "Восстановление заблокированного аккаунта". Пользователь пишет "я забыл вход". Поиск по ключевым словам не находит ничего — ни в одной статье нет слов "забыл" или "вход". Семантический поиск кодирует запрос и получает косинусные оценки примерно A = 0.81, C = 0.74, B = 0.22. Он возвращает наверх A и C, потому что "забыл вход" семантически близко к "сбросу пароля" и "заблокированному аккаунту", и справедливо отправляет вниз несвязанную статью про оплату.
Представьте это как библиотекарь, который понимает, что вы имеете в виду, а не только что вы сказали:
- 1. Преобразуем документы в эмбеддинги: Каждый документ кодируется в плотный вектор и сохраняется в векторной базе данных
- 2. Преобразуем запрос в эмбеддинг: Поисковый запрос пользователя кодируется той же эмбеддинг-моделью
- 3. Вычисляем косинусное сходство: Измеряем угол между вектором запроса и каждым вектором документа
- 4. Ранжируем по оценке сходства: Документы, наиболее близкие по смыслу к запросу, поднимаются в топ результатов
- 5. Возвращаем top-k результатов: Возвращаем наиболее семантически релевантные совпадения, часто с дополнительным ранжированием
Где это используется?
- Поиск по базе знаний: Поиск релевантных статей поддержки, даже когда пользователи описывают проблемы своими словами
- Поиск по документации: Нахождение нужной страницы API-справочника по концептуальному вопросу
- Поиск продуктов: "Удобная обувь для долгих прогулок" находит "эргономичную обувь" и "ортопедические кроссовки"
- Кросс-языковой поиск: Запрос на английском находит семантически схожие документы на русском или французском
- Частая ловушка: слепые пятна эмбеддингов: Эмбеддинг-модели плохо справляются с редкими именами собственными, кодами продуктов и свежей терминологией — гибридный поиск (семантика + BM25) лучше обрабатывает такие случаи
Интересный факт: В 1536-мерном пространстве эмбеддингов расстояние между "king" и "queen" почти идентично расстоянию между "man" и "woman". Так эмбеддинги фиксируют отношения. Современные эмбеддинг-модели обрабатывают 100+ языков в одном векторном пространстве — вопрос на русском может найти ответ на английском.
Попробуйте сами!
Попробуй интерактивный пример ниже, чтобы сравнить поиск по ключевым словам и семантический поиск, и увидеть, как поиск по смыслу находит то, что упускают ключевые слова.
Keyword vs Semantic Search
Посмотрите, как один запрос возвращает разные результаты
Выберите поисковый запрос:
Начало работы с программированием на Python
Руководство для начинающих по написанию первого Python-скрипта.
Создание REST API на Node.js
Настройка маршрутов, middleware и деплой бэкенд-сервера.
Продвинутые паттерны JavaScript
Замыкания, прототипы и паттерны проектирования для JS-разработчиков.
Начало работы с программированием на Python
Руководство для начинающих по написанию первого Python-скрипта.
Продвинутые паттерны JavaScript
Замыкания, прототипы и паттерны проектирования для JS-разработчиков.
Создание REST API на Node.js
Настройка маршрутов, middleware и деплой бэкенд-сервера.
Введение в анализ данных
Использование pandas и статистики для извлечения инсайтов из данных.
Руководство по архитектуре нейронных сетей
Погружение в слои, активации и дизайн моделей.
Понимание трансформеров в ИИ
Механизм внимания, BERT, GPT и революция в NLP.
Основы машинного обучения
Основные алгоритмы ML и как модели обучаются на данных.
- • Семантический поиск понимает синонимы: "код" находит "программирование", даже если это слово отсутствует в запросе.
- • Keyword-поиск хрупок: отсутствие ОДНОГО слова означает пропуск документа.
- • Лучшие системы объединяют оба подхода (hybrid search): keyword для точных совпадений, семантический для смысла.
Частые вопросы
Чем семантический поиск отличается от поиска по ключевым словам?
Поиск по словам ищет точные совпадения — запрос «автомобиль» не найдёт «машина». Семантический поиск преобразует текст в эмбеддинги (числовые векторы) и сравнивает смысл, поэтому «автомобиль» найдёт «машина», «транспортное средство» и «седан».
Что такое эмбеддинги и как они работают?
Эмбеддинги — плотные числовые векторы (например, 1536 измерений), захватывающие смысл текста. Похожие значения дают похожие векторы. Генерируются специализированными моделями вроде text-embedding-3-small или Cohere embed.
Что такое косинусное сходство?
Косинусное сходство измеряет угол между двумя векторами, возвращая значение от -1 до 1. Значения близкие к 1 означают высокое сходство, близкие к 0 — отсутствие связи. Это стандартная метрика для сравнения эмбеддингов.
Когда использовать семантический поиск, а когда по ключевым словам?
Семантический — когда пользователи формулируют запросы на естественном языке, когда важны синонимы или для межъязыкового поиска. По ключевым словам — для точных идентификаторов (артикулы, имена). Лучшие системы комбинируют оба подхода (гибридный поиск).
Попробуй сам
Интерактивное демо этой техники
Преобразуй вопрос пользователя в оптимальный поисковый запрос
ноутбук медленно работает причины
Основной запрос: ноутбук медленная работа производительность снижение
Альтернатива 1 (симптомы): ноутбук тормозит зависает OR медленная загрузка приложений
Альтернатива 2 (причины): производительность ноутбука деградация причины OR перегрев процессор загрузка диска
Качественный поисковый запрос — это не просто «лучшие слова», а несколько вариантов, покрывающих разные формулировки одной проблемы: это напрямую влияет на recall системы семантического поиска.
Создайте бесплатный аккаунт для решения челленджей
1 челленджей с AI-проверкой для этого урока
Этот урок — часть структурированного курса по LLM.
Мой путь обучения