Векторный поиск по тексту на примере каталога
Разбираем на пяти карточках, что именно происходит при векторном поиске: какой текст берётся, как считается близость и почему выдача выглядит так.
В прошлом разборе мы объяснили идею векторного поиска. Теперь посмотрим, что происходит на конкретном каталоге: какой текст идёт в вектор, как считается близость и почему выдача выстраивается именно так.
Каталог для примера
Возьмём пять позиций из парка спецтехники:
- Экскаватор-погрузчик, ковш 0,3 м³, глубина копания 4,5 м.
- Мини-погрузчик с бортовым поворотом, ширина 1,6 м.
- Автокран 25 т, стрела 21 м.
- Кран-манипулятор, борт 6 м, стрела 8 т/м.
- Самосвал 10 м³.
Каждая карточка — это название, описание и характеристики.
Что именно попадает в вектор
Не вся карточка целиком. Обычно собирается компактный текст из полей, которые несут смысл:
- название;
- категория;
- описание назначения: для чего эта позиция нужна;
- ключевые характеристики словами, а не только цифрами.
Цена, артикул и складские коды в вектор не идут: смысла в них нет, а шум они добавляют. Их место — в фильтрах и в точном поиске.
Итог для первой карточки может выглядеть так: «Экскаватор-погрузчик. Земляные работы: копка траншей и котлованов, планировка, погрузка грунта. Ковш 0,3 кубометра, глубина копания до 4,5 метра».
Обратите внимание: слово «траншея» появилось не в названии, а в описании назначения. Именно за него зацепится поиск.
Как считается близость
Вектор запроса и вектор карточки сравниваются по углу между ними — чем меньше угол, тем выше близость. Результат обычно приводят к числу от 0 до 1.
Что это значит на практике:
- 0,8 и выше — уверенное попадание в задачу;
- 0,5–0,7 — тематически рядом, но нужно смотреть глазами;
- ниже 0,3 — случайное совпадение, показывать такое вредно.
Конкретные пороги подбираются под каталог: на узком ассортименте карточки похожи друг на друга, и числа сдвигаются.
Три запроса и что произойдёт
«Выкопать траншею под водопровод»
Наверху окажется экскаватор-погрузчик: у него в описании прямо названы траншеи и копка. Мини-погрузчик будет ниже — он тематически близок, но копает иначе. Автокран и самосвал получат низкую близость.
«Поднять оборудование на крышу»
Первым пойдёт автокран, вторым кран-манипулятор. Разделить их поиск сам не сможет: оба про подъём. Здесь нужен либо уточняющий вопрос про высоту и вес, либо фильтр по характеристикам.
«Вывезти строительный мусор»
Самосвал получит высокую близость, остальные — низкую. Это тот случай, когда выдача из одной позиции правильна, а попытка добить её до пяти вариантов только вредит.
Почему выдача иногда выглядит странно
Три типичные причины:
- Описание не про назначение. Если в карточке только характеристики, вектор описывает железо, а не работу.
- Одинаковые описания. Скопированные тексты делают карточки неразличимыми для модели.
- Слишком длинный текст. Когда в вектор уходит вся страница с доставкой и реквизитами, смысл товара размывается.
Что с этим делать
- Добавьте в каждую карточку одно предложение о назначении.
- Уберите из индексируемого текста служебные блоки: доставка, гарантия, реквизиты.
- Разнесите похожие позиции по описанию: чем они отличаются на деле.
- Поставьте порог отсечения и честно отвечайте «не нашли», если он не пройден.
Вывод и следующий шаг
Векторный поиск ищет по тому тексту, который вы ему дали. Качество выдачи почти целиком определяется тем, написано ли в карточке, для чего эта позиция нужна.
Следующий шаг: откройте пять карточек своего каталога и проверьте, есть ли в них хоть одно предложение о назначении. Если нет — начните с них.
Частые вопросы
Какие поля включать в векторизацию?
Название, категорию, назначение и характеристики словами. Цены, коды и служебные тексты — нет.
Что делать с очень длинными описаниями?
Обрезать до смысловой части или разбивать на фрагменты и индексировать их отдельно.
Почему две разные карточки дают одинаковую выдачу?
Скорее всего, у них одинаковые описания. Модель различает тексты, а не артикулы.
Как подобрать порог отсечения?
Прогнать эталонные запросы, посмотреть значения близости у правильных и неправильных ответов и поставить границу между ними.
Нужно ли пересчитывать векторы при смене цены?
Нет. Пересчёт нужен при изменении названия, описания или характеристик.
Помогает ли векторный поиск с опечатками?
Обычно да, потому что смысл слова сохраняется. Но точные модели и артикулы лучше искать точным совпадением.