Технологии

Семантический поиск против ключевых слов: когда что работает

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

«Семантический поиск лучше, потому что понимает смысл» — фраза, которая звучит убедительно ровно до первого запроса «счёт 2024-0417». Она не ложная, она неполная: понимание смысла помогает там, где смысл вообще является тем, что вы ищете. В половине реальных запросов вы ищете не смысл, а конкретную строку.

Ниже — критерий, по которому можно решать заранее, а не по ощущению от выдачи.

#Что сравниваем

Поиск по ключевым словам сопоставляет слова запроса со словами документа и ранжирует результаты по редкости этих слов и длине документа. Он ничего не знает о значении — только о совпадениях. Формула ранжирования разобрана в справке про bm25.

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

Сравнимы они потому, что решают одну задачу — «покажи подходящее» — и ошибаются в противоположные стороны.

Факты о конкретных инструментах в этом тексте проверялись 26.08.2026.

#Что семантический поиск делает хорошо

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

Формулировка своими словами. Вы помните суть, не помните формулировку. «Где я писал про то, что не стоит браться за два проекта сразу» найдёт запись, где написано «нельзя распыляться».

Синонимы и парафразы без словаря. Не нужно поддерживать список «отпуск = каникулы = отгул»: близость по вектору покрывает это сама.

Устойчивость к морфологии. Падежи, склонения и словоформы не мешают, потому что сравниваются не строки.

Кросс-язычность у многоязычных моделей. Запрос на русском может найти английский документ о том же.

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

#Восемь типов запросов и победитель в каждом

# Тип запроса Пример Победитель
1 Имя человека «что говорил Олег» ключевые слова
2 Идентификатор «счёт 2024-0417» ключевые слова
3 Точная цитата «фраза про два проекта» ключевые слова
4 Редкий термин «квантизация Q4_K_M» ключевые слова
5 Тема своими словами «как я справлялся с перегрузкой» семантика
6 Смысл без общих слов «когда я решил не спешить» семантика
7 Вопрос на другом языке «burnout notes» к русским записям семантика
8 Отрицание «встреча, которая не состоялась» никто

Строки 1–4 объединяет одно свойство: в запросе есть строка, которая должна встретиться в документе дословно. Строки 5–7: в запросе есть тема, а слова могут быть любыми.

Отсюда правило, которое можно применять без размышлений:

Если вы можете назвать слово, которое обязано быть в найденном документе, — вам нужны ключевые слова. Если не можете — семантика.

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

#Почему для личной памяти по умолчанию берут ключевые слова

Посмотрите на верхнюю половину таблицы и на то, о чём люди спрашивают свой архив. Имена людей, названия проектов, номера договоров, коды ошибок, названия приложений. Это строки 1–4 целиком.

В Persona это решение зафиксировано в коде: функция отбора терминов из вопроса сначала вытаскивает имена собственные — слова с заглавной буквы, — и только потом значимые слова длиной от четырёх букв, отбрасывая стоп-слова и оставляя не больше шести терминов. Приоритет имён здесь прямое следствие статистики запросов к личной памяти.

Второй довод не про качество, а про условия работы. Ключевые слова требуют только индекса, встроенного в базу. Семантика требует расширения для векторов, запущенной модели-эмбеддера и разового прохода индексации по всему накопленному. Три условия против нуля — и если хоть одно не выполнено, поиск должен продолжать работать. В Persona он и продолжает: при отсутствии любого из условий происходит тихий откат на ключевые слова.

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

#Где ключевые слова объективно проигрывают

Симметрично: без семантики вы не закроете три ситуации, и никакой настройкой это не лечится.

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

В документах чужая лексика. Вы думаете «выгорание», в записях написано «не тяну». Ключевые слова требуют, чтобы вы угадали чужую формулировку.

Морфология без стемминга. В полнотекстовом поиске SQLite для русского нет стемминга: «лендинг» не найдёт «лендингом». Обходится префиксным поиском, но обход работает только вперёд — запрос «отпуска» не найдёт «отпуск». Подробности и проверка на трёх строках — в гайде по FTS5.

Третий пункт часто принимают за аргумент в пользу семантики целиком. На деле он аргумент за гибрид: морфология чинится дёшево, а вот первые два пункта — нет.

#Правило переключения режима

Практическая процедура, если у вас есть оба режима.

  1. По умолчанию — ключевые слова. Они дешевле, предсказуемее и покрывают большинство запросов к личному архиву.
  2. Переключайтесь на семантику, когда не можете назвать обязательное слово. Это единственный надёжный признак.
  3. Держите оба одновременно, если можете. Слияние двух списков закрывает обе половины таблицы; как это делать корректно, разобрано в материале про гибридный поиск.
  4. Проверяйте по половинам, а не по среднему. Включив семантику, прогоните двадцать вопросов: десять с именами и терминами, десять своими словами. Семантика обязана выиграть на второй половине и не проиграть на первой. Проигрыш на первой означает, что векторная выдача вытесняет точные попадания.

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

Какие сценарии поиска по своему архиву вообще осмысленны, разобрано в материале про поиск по своему дню.

#Частые вопросы

#Правда ли, что семантический поиск понимает смысл?

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

#Может ли семантический поиск заменить ключевые слова полностью?

Нет — из-за строк 1–4 таблицы. Идентификаторы, коды и имена он путает с похожими, потому что видит в них строки, а не уникальные ключи. Для архива, где такие запросы часты, замена ухудшит результат.

#Что выбрать, если ресурсов на оба режима нет?

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

#Как понять, что семантический режим реально включён?

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

#Влияет ли язык записей на выбор?

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

#Что делать с запросами, где есть и имя, и тема?

«Что Олег говорил про выгорание» — это как раз случай для гибрида: имя ловится ключевыми словами, тема — семантикой. Если гибрида нет, разбейте на два запроса и пересеките результаты глазами. Место поиска в общей механике памяти разобрано в статье о том, как работает память у ИИ.

#Вывод

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

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт