MAATRIX / Блог / Эмбеддинги и семантический поиск на своём VPS

Эмбеддинги и семантический поиск на своём VPS

Блог MAATRIX · 2026-07-07

Эмбеддинги — это числовые векторы, в которых близкие по смыслу тексты оказываются рядом. На них держится вся современная поисковая магия. Научимся считать их прямо на VPS, без внешних API и утечек данных.

Что такое эмбеддинги простыми словами

['Модель-энкодер превращает текст в вектор из сотен чисел. Похожие фразы дают похожие векторы, и близость между ними легко посчитать. Так «как вернуть товар» и «оформление возврата покупки» окажутся рядом, хотя слов общих почти нет.', 'Это работает для любого языка и для смеси языков, если модель мультиязычная. Отсюда — семантический поиск, кластеризация, дедупликация, классификация и вся база под RAG.', 'Важно понимать: близость векторов измеряют не «на глаз», а метрикой. Чаще всего это косинусное расстояние — угол между векторами. Чем меньше угол, тем ближе смысл. Именно поэтому векторы почти всегда нормализуют перед сравнением: тогда косинус превращается в простое скалярное произведение, а поиск ускоряется.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для эмбеддингов

Локально или через API

['У внешних API (OpenAI, Cohere) удобство есть, но каждый запрос — это деньги и отправка ваших текстов наружу. Локальная модель на VPS считает эмбеддинги бесплатно после установки и не выпускает данные за пределы сервера.', 'Для CPU-инференса хорошо подходят компактные мультиязычные модели: intfloat/multilingual-e5-base (768 измерений) и e5-small (384). Small в разы быстрее и легче, base — точнее.', '
  • API — ноль настройки, но платно и данные уходят
  • Локально на CPU — приватно, дёшево, чуть медленнее
']

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Ставим модель на сервер

['Виртуальное окружение и библиотеки:', '
python3 -m venv ~/emb && source ~/emb/bin/activate\npip install sentence-transformers torch --extra-index-url \\\n  https://download.pytorch.org/whl/cpu
', 'Ставим CPU-версию torch — она в разы легче, а GPU для эмбеддингов обычно не нужен. Первый запуск скачает модель в ~/.cache/huggingface.']

Считаем и ищем

['Базовый пример: векторизуем корпус, потом ищем ближайшие к запросу.', '
from sentence_transformers import SentenceTransformer, util\n\nm = SentenceTransformer("intfloat/multilingual-e5-base")\ndocs = ["passage: возврат товара в течение 14 дней",\n        "passage: график работы поддержки"]\ndoc_emb = m.encode(docs, normalize_embeddings=True)\n\nq = m.encode("query: как вернуть покупку", normalize_embeddings=True)\nscores = util.cos_sim(q, doc_emb)\nprint(scores)
', 'Обратите внимание на префиксы query: и passage: — модели семейства e5 обучены с ними, без префиксов качество падает. И всегда нормализуйте векторы, чтобы косинус считался корректно.']

Батчинг и скорость на CPU

['Кодировать по одному тексту — расточительство. Собирайте батчи по 32–64 штуки, так CPU загружается эффективнее. Ограничьте потоки, чтобы не задушить сервер:', '
import torch\ntorch.set_num_threads(4)\nemb = m.encode(texts, batch_size=64, normalize_embeddings=True,\n               show_progress_bar=True)
', 'На AMD EPYC у MAATRIX высокая производительность на ядро, поэтому даже без GPU e5-base уверенно выдаёт сотни текстов в секунду — для индексации базы этого более чем достаточно.']

Куда складывать векторы

['Посчитанные эмбеддинги нужно где-то хранить и быстро искать. Для тысяч записей хватит numpy-массива в памяти. Для десятков тысяч и выше берите векторную БД — Qdrant или pgvector.', 'Связка «локальные эмбеддинги + Qdrant» — типовой стек для приватного семантического поиска. Данные не покидают ваш VPS ни на одном этапе.', 'Один нюанс, о который спотыкаются новички: размерность векторов у модели и у коллекции в базе должна совпадать. Если энкодер выдаёт 768 чисел, коллекция тоже должна быть на 768. И нельзя смешивать в одной коллекции векторы от разных моделей — расстояния между ними будут бессмысленными. Смените модель — переиндексируйте всё заново.', 'Наконец, держите модель загруженной в память один раз, а не читайте её на каждый запрос. В сервисе загрузите SentenceTransformer при старте и переиспользуйте объект — иначе каждый запрос будет тратить секунды на инициализацию впустую.']

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.

Арендовать VPS для эмбеддингов

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

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

Какую модель выбрать для русского?

multilingual-e5-base — хороший баланс качества и скорости. Если нужна максимальная скорость на слабом сервере, возьмите e5-small.

Обязателен ли GPU?

Нет. Для эмбеддингов CPU-инференса достаточно, особенно на быстрых ядрах EPYC. GPU оправдан только при потоковой векторизации миллионов документов в час.

Зачем префиксы query и passage?

Так обучены модели e5: query для запросов, passage для документов. Без них асимметрия теряется и релевантность падает.

Можно ли смешивать языки?

Да, мультиязычные модели кладут смысл в одно пространство, поэтому русский запрос найдёт английский документ по смыслу.