Embeddings и reranker для локального RAG: что выбрать в 2026

Локальный ИИ · RAG · embeddings

Embeddings и reranker для локального RAG: как выбрать модели и не испортить поиск

В RAG качество ответа часто ломается ещё до генеративной LLM: система просто достаёт не тот фрагмент документа. Embedding-модель отвечает за быстрый семантический поиск кандидатов, а reranker повторно сортирует небольшую выборку более дорогим способом. Правильная связка retrieval → reranking часто важнее перехода на более крупную чат-модель.

Актуально: сентябрь 2026 Ollama · Sentence Transformers Qwen3 Embedding · EmbeddingGemma
Embeddings Reranker Cosine Vector DB MRL RAG
Практический старт. Для небольшого домашнего RAG начните с EmbeddingGemma или Qwen3-Embedding 0.6B. Индексируйте документы и запросы одной и той же embedding-моделью. Если нужный chunk обычно находится где-то в Top 20–50, но редко попадает в Top 3–5, добавьте reranker — например Qwen3-Reranker 0.6B. Не меняйте embedding model на существующей базе без полной переиндексации.

Что такое embedding-модель

Embedding-модель не пишет обычный текстовый ответ. Она превращает текст в числовой вектор — набор координат, описывающий его семантическое содержание.

«не работает Wi-Fi» → [0.031, -0.224, ...] → vector search

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

Embedding используется не только для RAG:

  • semantic search;
  • поиск похожих документов;
  • кластеризация;
  • дедупликация;
  • classification;
  • memory для AI-агентов;
  • поиск по коду;
  • translation memory.

Где embeddings находятся в RAG pipeline

1ДокументPDF / DOCX / HTML
2ChunksФрагменты текста
3EmbeddingsВекторы
4Vector DBИндекс

Когда приходит вопрос, система строит embedding уже для запроса и ищет ближайшие vectors в базе.

AЗапросТекст пользователя
BQuery embeddingТа же модель
CTop KКандидаты
DLLMОтвет по контексту

Именно поэтому слабый retrieval невозможно полностью исправить хорошей LLM. Если нужный fragment вообще не попал в контекст, генеративной модели нечего анализировать.

Что делает reranker

Vector search должен быстро просмотреть тысячи или миллионы chunks. Поэтому embedding retrieval — компромисс между скоростью и точностью.

Reranker работает позже: получает один query и уже небольшой список кандидатов, после чего оценивает каждую пару query + document более дорогой моделью.

vector search Top 30 → reranker → лучшие 5 → LLM
Embedding retriever Векторы документов можно посчитать заранее. Очень быстрый поиск по всей базе.
Reranker Сравнивает query и каждый candidate вместе. Точнее, но слишком дорог для всего corpus.
Хороший сигнал для reranker: правильный chunk часто встречается в Top 20–50, но embedding search ставит его слишком низко. Тогда reranker способен поднять его перед отправкой в LLM.

Что выбрать для локального RAG в 2026 году

Модель Размер / класс Для чего Комментарий
EmbeddingGemma ≈300M Лёгкий локальный semantic search 100+ языков, on-device фокус.
Qwen3-Embedding 0.6B 0.6B / Ollama ≈639 МБ Универсальный multilingual RAG 32K, до 1024 dimensions, instruction-aware.
Qwen3-Embedding 4B 4B / Ollama ≈2.5 ГБ Более тяжёлый retrieval До 2560 dimensions.
Qwen3-Embedding 8B 8B / Ollama ≈4.7 ГБ Когда retrieval quality важнее ресурсов До 4096 dimensions.
Qwen3-Reranker 0.6B 0.6B Второй этап Top K Лёгкий старт для local reranking.
Это не абсолютный рейтинг. Retrieval-модели нужно тестировать на своих документах и запросах. Лидер общего benchmark может проиграть на русских инструкциях, электрике, коде или конкретной корпоративной терминологии.

Qwen3 Embedding: почему серия удобна для локального RAG

Официальная серия Qwen3 Embedding включает embedding и reranking models размером 0.6B, 4B и 8B.

0.6B 1024 dimensions

32K context, 100+ языков, MRL, instruction-aware.

4B 2560 dimensions

Более тяжёлая embedding-модель для quality-first retrieval.

8B 4096 dimensions

Самая крупная версия серии, выше вычислительная цена.

Серия поддерживает Matryoshka Representation Learning (MRL): можно использовать меньшую выходную размерность вместо максимальной. Это позволяет балансировать качество, размер vector index и скорость.

Qwen также указывает поддержку 100+ языков и рекомендует task-specific instructions. По данным собственной оценки Qwen, использование инструкции в большинстве downstream tasks давало улучшение порядка 1–5%, но это результат разработчика модели, а не универсальная гарантия для любого corpus.

Запуск 0.6B через Ollama

Загрузка
ollama pull qwen3-embedding:0.6b
Embedding API
curl http://localhost:11434/api/embed -d '{
  "model": "qwen3-embedding:0.6b",
  "input": "Почему срабатывает УЗО?"
}'

EmbeddingGemma: маленькая embedding-модель Google

Google описывает EmbeddingGemma как открытую embedding-модель примерно 300M параметров, ориентированную на on-device сценарии: мобильные устройства, ноутбуки и desktops.

Она обучена для 100+ разговорных языков и предназначена для:

  • semantic search;
  • retrieval;
  • classification;
  • clustering;
  • semantic similarity.

В текущей документации Ollama embeddinggemma входит в список рекомендованных embedding models наряду с qwen3-embedding и all-minilm.

Ollama
ollama pull embeddinggemma
ollama run embeddinggemma "Проверка семантического поиска"
Когда выбрать EmbeddingGemma Если нужен компактный локальный embedding backend и хочется снизить RAM/VRAM и latency индексирования.

Qwen3 Reranker: второй этап поиска

В той же серии Qwen доступны rerankers 0.6B, 4B и 8B с context до 32K. Они instruction-aware и предназначены для text ranking.

Для домашнего RAG разумно начинать с 0.6B: reranker обрабатывает только несколько десятков candidates, но делает это для каждого пользовательского запроса.

retriever: 100 000 chunks → 30 candidates
reranker: 30 candidates → 5 лучших

Увеличивать reranker до 4B/8B стоит только после измерений: дополнительная latency должна давать реальный прирост Recall/MRR/NDCG на вашей базе.

Embeddings через Ollama: актуальный API

В текущем Ollama используется endpoint POST /api/embed. Старый /api/embeddings считается устаревшим.

Одна строка

REST
curl http://localhost:11434/api/embed -d '{
  "model": "embeddinggemma",
  "input": "Как выбрать автоматический выключатель?"
}'

Batch embeddings

Несколько chunks одним запросом
curl http://localhost:11434/api/embed -d '{
  "model": "embeddinggemma",
  "input": [
    "УЗО реагирует на ток утечки.",
    "Автомат защищает линию от перегрузки и короткого замыкания.",
    "УЗИП ограничивает импульсное перенапряжение."
  ]
}'

Текущий API также поддерживает параметр dimensions для моделей, которые допускают изменение размерности.

Ollama возвращает L2-normalized vectors. В официальной документации для большинства semantic-search задач рекомендуется cosine similarity.

1024, 2560 или 4096 dimensions: больше не всегда лучше

Размерность embedding — количество чисел в векторе. Чем больше dimensions, тем больше:

  • объём vector database;
  • RAM для индекса;
  • network/storage traffic;
  • стоимость similarity search.

При миллионах chunks разница становится существенной.

raw vector bytes ≈ documents × dimensions × bytes per element

Например, 1 000 000 vectors × 1024 float32 — уже примерно 3.8 ГиБ только сырого массива координат, до индекса и metadata.

Поэтому MRL интересен именно practically: если модель поддерживает сокращённую размерность, можно подобрать баланс retrieval quality ↔ index size.

Почему документы и запросы нужно кодировать одной моделью

Ollama прямо рекомендует использовать одну и ту же embedding model и для индексирования, и для пользовательских запросов.

Векторы разных моделей живут в разных representation spaces. Даже одинаковая размерность не делает их совместимыми.

Нельзя сделать базу на model A, а запросы считать model B. Результаты similarity search потеряют смысл, даже если обе модели возвращают 1024 dimensions.

Когда нужно полностью переиндексировать RAG-базу

Переиндексация нужна, если вы меняете:

  • embedding model;
  • embedding dimension;
  • существенно меняете preprocessing;
  • chunking strategy;
  • нормализацию/формат входа, если он влияет на embeddings;
  • instruction scheme у instruction-aware модели.
Выбирайте embedding model до индексирования большой библиотеки. Для 17 000 PDF смена модели — это не «переключить настройку», а заново извлечь/закодировать все chunks и перестроить vector index.

Cosine similarity: что именно сравнивает vector DB

Cosine similarity сравнивает направление векторов, а не их абсолютную длину. Для L2-normalized embeddings cosine особенно удобен.

cosine(A, B) = (A · B) / (||A|| × ||B||)

Чем ближе значение к максимальному similarity вашей системы, тем семантически ближе embeddings. Но не используйте один фиксированный threshold из чужой статьи: распределение scores зависит от модели, domain и corpus.

Хорошая embedding-модель не спасёт плохой chunking

Если chunk содержит три несвязанные темы или обрывает важное определение пополам, embedding честно представляет этот плохой фрагмент.

Проверяйте:

  • размер chunks;
  • semantic boundaries;
  • заголовки;
  • metadata;
  • overlap;
  • таблицы и списки;
  • OCR-ошибки;
  • дубли страниц.

Для технических документов полезно хранить вместе с chunk название документа, раздел, дату, страницу и тип материала — потом это можно использовать для filters/reranking.

Dense retrieval + BM25: зачем гибридный поиск

Embeddings хорошо находят смысл. Но точные идентификаторы, артикулы, номера нормативов и редкие обозначения иногда лучше ищутся keyword/BM25 методом.

Dense embeddings «автомат выбивает при включении чайника» может найти фрагмент про перегрузку цепи.
BM25 / keyword «ГОСТ Р 50571.5.52» или «DS-KB8113-IME1» требует точного совпадения терминов.

Для технической базы hybrid retrieval часто разумнее чистого vector search. Reranker затем может объединить кандидатов и выбрать лучший контекст.

Как запустить локальный reranker

Qwen3-Reranker-0.6B поддерживается через Sentence Transformers как CrossEncoder.

Установка
pip install -U sentence-transformers
Python
from sentence_transformers import CrossEncoder

model = CrossEncoder("Qwen/Qwen3-Reranker-0.6B")

query = "Почему отключается УЗО?"
documents = [
    "УЗО отключает цепь при обнаружении дифференциального тока.",
    "Автоматический выключатель защищает проводку от перегрузки.",
    "Wi-Fi 5 ГГц обычно быстрее, но имеет меньшую дальность."
]

ranking = model.rank(query, documents)

for item in ranking:
    print(item)

Логика production pipeline:

1. RetrieveПолучить, например, Top 30 через vector/hybrid search.
2. RerankПересчитать relevance для этих 30 candidates.
3. CutОставить Top 5–8.
4. GenerateПередать только лучшие chunks в LLM.

Какие embeddings использовать для русского языка

Не выбирайте модель по одному англоязычному MTEB score. Для русскоязычного RAG нужен собственный retrieval test.

Qwen3 Embedding официально заявляет поддержку 100+ языков и cross-lingual retrieval. EmbeddingGemma также обучена на 100+ spoken languages. Это делает обе семьи логичными кандидатами для теста на русской базе.

Практический старт для русского RAG Сравните Qwen3-Embedding 0.6B и EmbeddingGemma на 50–100 реальных вопросах. Если качество недостаточно — добавьте reranker и только потом пробуйте более тяжёлый embedding model.

У Qwen3 Embedding query может получать instruction. Разработчики рекомендуют формулировать instruction по-английски даже для multilingual retrieval, потому что training instructions преимущественно были английскими.

Как проверить retrieval quality до запуска всей базы

Сделайте небольшой golden set.

1 50–200 реальных вопросов

Не искусственные benchmark prompts, а ваши будущие запросы.

2 Укажите правильные chunks

Для каждого вопроса разметьте, где действительно лежит ответ.

3 Считайте Recall@K

Попал ли правильный fragment в Top 5 / 10 / 20?

4 Добавьте reranker

Сравните MRR/NDCG или хотя бы позицию правильного результата.

Простая метрика:

Recall@10 = доля вопросов, где правильный chunk найден в первых 10

Если Recall@20 низкий — проблема в embedding/chunking/index. Если Recall@20 высокий, а правильный документ часто стоит на позиции 12–18 — reranker особенно полезен.

Нужно ли embedding-модели GPU

Не обязательно. Компактные embedding models часто нормально работают на CPU. GPU становится полезной при массовой первичной индексации большого corpus или при высоком числе запросов.

Это отдельный плюс локального RAG: генеративная LLM может работать на GPU, а лёгкая embedding model — на CPU или другой машине.

Где хранить vectors

Embedding model не является vector database. Векторы нужно хранить и искать отдельно.

Популярные классы решений:

  • Chroma — простой локальный старт;
  • Qdrant — полноценная vector database и filters;
  • PostgreSQL + pgvector — если инфраструктура уже на PostgreSQL;
  • FAISS — локальная библиотека индекса, не полноценная DB.

Выбор базы — отдельная задача. При небольшом corpus разница между vector stores обычно менее важна, чем chunking и embedding quality.

Главные ошибки

1. Использовать чат-модель вместо embedding model

LLM и embedding model обучаются для разных задач. Нужен специализированный embedding endpoint/model.

2. Менять model после индексирования

Нужно пересчитать embeddings всех документов.

3. Выбирать самую большую embedding model

Индексирование, RAM и latency могут вырасти сильнее реального выигрыша retrieval.

4. Увеличивать Top K вместо reranking

Передача 30 похожих chunks в LLM может ухудшить ответ и раздуть context.

5. Не тестировать русский corpus

Общий multilingual benchmark не заменяет ваши запросы и терминологию.

6. Игнорировать exact terms

Для моделей устройств, ГОСТов и кодов ошибок добавляйте BM25/keyword или metadata filters.

7. Считать reranker генеративной LLM

Он не отвечает на вопрос — он выдаёт relevance score/ranking.

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

Какая embedding-модель лучше для Ollama?

В текущей документации Ollama рекомендуются embeddinggemma, qwen3-embedding и all-minilm. Для русскоязычного/мультиязычного RAG разумно сначала сравнить EmbeddingGemma и Qwen3-Embedding 0.6B.

Нужна ли большая LLM для embeddings?

Нет. Embedding model — отдельная специализированная модель. Даже 300M–600M embedding models могут быть очень полезны для retrieval.

Что лучше: Qwen3-Embedding 0.6B или 8B?

8B значительно тяжелее. Она имеет смысл только если измерения на вашей базе показывают достаточный прирост качества. Для первого локального RAG начните с 0.6B.

Можно ли индексировать одной моделью, а искать другой?

Нет. Документы и queries должны быть представлены совместимым embedding space. При смене модели базу нужно переиндексировать.

Нужен ли reranker всегда?

Нет. Если правильный результат уже стабильно находится в Top 3–5, reranker только добавит latency. Он особенно полезен, когда retriever находит правильный chunk, но ранжирует его слишком низко.

Что лучше: vector search или BM25?

Они решают разные слабые места. Dense search хорошо ловит смысл, BM25 — точные термины. Для технического RAG часто полезен hybrid retrieval.

Какую размерность embeddings выбрать?

Если модель поддерживает MRL, меньшая dimension уменьшает индекс. Но качество нужно проверять на golden set. Максимальная размерность не автоматически оптимальна.

Можно ли embeddings считать полностью локально?

Да. Ollama, Sentence Transformers и другие runtimes позволяют считать embeddings без облачного API после скачивания модели.

Живой спрос

Почему embeddings и rerankers стали отдельной темой

В 2026 году локальный RAG перестал сводиться к вопросу «какую LLM запустить». В свежих обсуждениях пользователи отдельно сравнивают local embedding + reranking models, а при больших библиотеках в десятки тысяч PDF выбор embedding model делают до массовой индексации, потому что последующая замена означает полный re-index.

Отдельный интерес появился к локальным embeddings как к самостоятельной инфраструктуре: даже пользователи облачной генеративной модели запускают embeddings и rerankers дома ради приватной памяти, поиска и снижения API-зависимости.

Модели и проекты

Первичные страницы

Источники

Документация

Настройка локального RAG

RAG отвечает не по тем документам?

Можно проверить chunking, embedding model, Top K, reranking и context, собрать небольшой retrieval benchmark и понять, где именно теряется правильный фрагмент — до замены всей LLM.