Эмбеддинги каталога: что считается и как часто пересчитывать
Практическая сторона векторов: какой текст идёт в модель, что делать с длинными описаниями, когда нужен пересчёт и сколько это стоит по нагрузке.
Векторный поиск устроен просто в идее и требует аккуратности в деталях. Разберём практическую часть: что именно превращается в вектор, когда это пересчитывается и во что обходится.
Что попадает в вектор
Не карточка целиком. Собирается компактный текст из полей, несущих смысл:
- название;
- категория;
- назначение: для какой задачи позиция нужна;
- ключевые характеристики словами;
- разговорные названия, если они есть.
Что не идёт: цена, артикул, складские коды, условия доставки, гарантия, реквизиты. Смысла в них нет, а шум они добавляют.
Ошибка, которую делают чаще всего, — векторизовать всю страницу товара. Тогда доставка и оплата размывают смысл товара, и все карточки становятся похожими друг на друга.
Что делать с длинными описаниями
Модели ограничены по длине входа, и длинный текст всё равно теряет фокус. Два рабочих подхода:
Обрезать до смысловой части. Первые несколько предложений описания обычно и есть назначение. Остальное — маркетинг.
Разбить на фрагменты. Длинное описание режется на куски, каждый векторизуется отдельно, карточка получает оценку по лучшему из них. Дороже по хранению, точнее по результату.
Для каталога товаров обычно достаточно первого. Второй нужен для документации и статей.
Когда пересчитывать
Пересчёт нужен при изменении текста, который вошёл в вектор:
- новое или изменённое название;
- правка описания назначения;
- изменение категории;
- добавление разговорных названий.
Пересчёт не нужен при изменении цены, остатка, фотографии и условий доставки. Это частая ошибка: полная переиндексация каталога после обновления цен — потраченные впустую деньги и время.
Отдельный случай — смена модели эмбеддингов. Тогда пересчитывается всё, потому что векторы старой и новой модели несравнимы.
Как организовать обновление
- Храните рядом с вектором отпечаток текста, из которого он посчитан.
- При обновлении каталога сравнивайте отпечаток и считайте только изменившееся.
- Ставьте пересчёт в очередь, а не в момент сохранения товара.
- Логируйте позиции, у которых текст пуст: они не найдутся никогда.
Четвёртый пункт стоит вывести в отчёт. Карточки без описания — тихая дыра в выдаче.
Где хранить
На каталоге в несколько тысяч позиций векторы спокойно живут в обычной базе, а близость считается в памяти приложения. Специальное векторное хранилище нужно при десятках тысяч карточек и высокой нагрузке.
Не начинайте со специального хранилища: это лишняя система в обслуживании, пока объём не потребовал.
Сколько это стоит
Считается по двум статьям:
- разовая векторизация каталога при запуске;
- вектор запроса при каждом поисковом обращении.
Вторая статья и определяет месячный счёт: она растёт вместе с трафиком. Первая — разовая, кроме случаев смены модели.
Разбор того, как это влияет на выдачу, — векторный поиск по тексту на примере каталога.
Вывод и следующий шаг
В вектор идёт короткий смысловой текст, а не вся карточка. Пересчёт нужен при изменении этого текста, а не цены. Хранение до нескольких тысяч позиций не требует отдельной системы.
Следующий шаг: посмотрите, какие поля у вас уходят в индексацию, и уберите оттуда доставку, гарантию и реквизиты. Это самое дешёвое улучшение выдачи из возможных.
Частые вопросы
Какой длины должен быть текст для вектора?
Несколько предложений, описывающих назначение и ключевые свойства. Страница целиком — уже вред.
Нужно ли пересчитывать векторы при смене цены?
Нет. Цена в вектор не входит и на смысл не влияет.
Что делать при смене модели эмбеддингов?
Пересчитать весь каталог. Векторы разных моделей между собой несравнимы.
Где хранить векторы на каталоге в тысячу позиций?
В обычной базе. Отдельное векторное хранилище окупается на порядок больших объёмах.
Как быть с товарами без описания?
Вывести их отдельным отчётом и дописать назначение. Без текста они не найдутся никогда.
Можно ли считать векторы локально, без внешнего сервиса?
Можно, если есть подходящая модель и мощности. Вопрос упирается в качество на вашем языке и тематике.