Технологии
Справочник технологий подбора.
| Код и технология | Роль / стек | Где и цена | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
T1 Лексический поиск
Совпадение слов, артикулов и чисел; синонимов не понимает.
|
Отбор кандидатов
rank_bm25, rapidfuzz
|
Хаб
Бесплатно
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Лексический поиск
### Замер recall@k, 17.08.2026 Эталон Боронина: 33 работы с известным ответом, справочник БАО 4642 позиции. Доля работ, у которых верный ответ попал в первые k кандидатов.
🛑 TF-IDF УДАЛЁН 17.08.2026. Проиграл соседям на каждой глубине recall@k, уникальных находок ноль, и в RRF он ВРЕДИЛ: без него @3 вырос с 16 до 18. ✅ Рабочий набор — RRF из трёх: нечёткое + BM25 + 3-граммы. Даёт @100 = 33, то есть доводит до ЛЛМ ВСЕ верные ответы; дальше качество зависит только от модели. ℹ️ Единого лидера нет: до @10 сильнее нечёткое совпадение (и оно же самое быстрое), на @100 — 3-граммы. Нечёткое не находит 7 работ из 33 ни на какой глубине, 3-граммы находят почти все. ⚠️ BM25 даёт 0.0 на крошечном корпусе — свойство IDF, не ошибка. На тысячах позиций не проявляется. ✅ Мгновенно и бесплатно. В гибриде даёт лексический сигнал там, где вектор путает монтаж с демонтажом. recall@k — доля запросов, где верный ответ попал в топ-k: показывает, сколько кандидатов отдавать дальше по цепочке. Замер 14.08.2026 на эталоне Боронина: 33 сметные работы Х5, у которых в справочнике БАО (4642 позиции) есть верная норма. Поиск по наименованию. Остальные 17 работ эталона помечены «нет нормы» и в recall не входят — попадать там нечему. 🔑 Нечёткое совпадение — лучший инструмент на первом месте (30,3%), вдвое точнее BM25. Символьные 3-граммы — лучший поставщик кандидатов вглубь: 93,9% на топ-50. Верный ответ они почти всегда находят, только ставят не первым — ровно то, что нужно первым шагом каскада перед ЛЛМ.
🛑 Пороги на этих данных НЕ КАЛИБРУЮТСЯ — облака оценок перекрываются. Замер по 17 работам «нет нормы» (верного ответа в справочнике не существует, любой уверенный ответ — ложное срабатывание) дал совпадающие медианы:
У нечёткого совпадения медиана на отказных строках ДАЖЕ ВЫШЕ, чем у верных ответов. Любой порог отсекает больше правильного, чем ложного: у BM25 баланс «верных минус ложных» падает с +12 при пороге 0 до +5 при 40. Вывод: лексика не умеет отличать «нашёл» от «не нашёл» на сметных данных. Её место — поставщик кандидатов вглубь, а решение matched/no_match должен принимать следующий слой каскада: фильтр по свойству или ЛЛМ. Пороги оставлены прежними — подгонять их под шум значило бы выдать случайность за калибровку. ВариантыBM25, Нечёткое совпадение, Символьные 3-граммы |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
T2 Сопоставление по свойствам
Сверяет выбранное свойство без мягкого отката; нужно обогащение.
|
Решение по свойству
собственный код
|
Хаб
Бесплатно
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Точное совпадение
ℹ️ Колонка, которой нет во втором массиве, в подборе не участвует. Пустая ячейка означает «признак не извлечён» и не считается совпадением.
ВариантыТочное совпадение |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
T3 Векторный поиск (API и локально)
Близость векторов смысла: ловит разные формулировки одного и того же.
|
Отбор кандидатов
Embeddings API, sentence-transformers
|
Хаб
Разовая оплата либо бесплатно локально
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Векторный поискЦена за 1000 позиций: OpenAI 0,03 ₽ · Яндекс 0,04 ₽ · Сбер 0,28 ₽ · локально 0 ₽ (нужен torch, ~1,1 ГБ). Сбер быстрее всех — 100 строк за запрос, у Яндекса пакетного режима нет. 🛑 Векторы плохо различают монтаж и демонтаж — для эмбеддинга тема одна. Словарь антонимов не добавляем: случай закрывает гибрид. ⚠️ У Яндекса модели ПАРНЫЕ: text-search-doc кодирует справочник, text-search-query — искомую строку. Это не выбор, а обязательная пара: при обмене ролями оценки выше, а РАЗДЕЛЯЮТ хуже. У остальных провайдеров одна модель на оба массива.ℹ️ В таблице — модели, что вызываются сейчас. У Сбера есть ещё Embeddings, EmbeddingsGigaR, GigaEmbeddings-3B-2025-09 (цена одна), у OpenAI 3-large. Проверено по API 10.08.2026.⚠️ В одиночку для боевого подбора не годится — только в гибриде или каскаде. 🛑 У Сбера эмбеддинги требуют оплаченного пакета ( 402). OpenAI из России отвечает 403, нужен прокси; с хаба работает напрямую.ℹ️ Векторы кэшируются под именем модели — третий, свой кэш, не провайдера и не решений. Косинус переводится в 0…100 линейно, шкала абсолютная. Локальная модель
🛑 Порога, разделяющего своё и чужое, у неё НЕТ — диапазоны оценок пересекаются целиком. Только поставщик кандидатов. Порог по нескольким строкам — подгонка, расширение набора его ломает. ✅ Вектор считается ОДИН раз и кэшируется — этим отличается от Т5, которая пересчитывает каждую пару. ⚠️ Локально доступна только GigaEmbeddings-3B (MIT), но НЕ ИЗМЕРЕНА: просит 6,4 ГБ против 3,8 на хабе и старую версию transformers. У Яндекса весов нет, у Сбера остальные закрыты (401).ℹ️ По ruMTEB e5 даёт 65,5 — слабейшая из русских моделей (GigaEmbeddings 69,1, Qwen3-8B 70,6). ℹ️ Здесь кривая по k важнее всего: Т3 — поставщик кандидатов для Т4 и Т5, и глубина списка выбирается именно тут. Замер 14.08.2026 на эталоне Боронина: 33 сметные работы Х5 против справочника БАО (4642 позиции), поиск по наименованию. Та же выборка, что у Т1, — числа сравнимы напрямую. 🛑 Векторы НЕ превзошли лексику на сметных данных. Яндекс силён на первом месте (27,3% против 12,1% у BM25), но вглубь почти не растёт: на топ-50 у него 51,5% против 93,9% у символьных 3-грамм. Для роли «отдать кандидатов дальше» лексика здесь выгоднее и бесплатна. ⚠️ Прочерк в @20 — не мерилось в этом прогоне, а не «ноль». Сбер не замерен: локально нет сертификата НУЦ Минцифры, вызов падает до запроса. Локальная модель требует torch, которого на рабочей машине нет.
ВариантыЯндекс text-search-doc + -query (API), Сбер Embeddings-2 (API), OpenAI text-embedding-3-small (API), multilingual-e5-large (локально) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
T4 Генеративный поиск LLM (API и локально)
Модель выбирает из кандидатов с обоснованием и умеет отказаться.
|
Принятие решения
Chat API, Ollama
|
Хаб
Оплата на строку, у Сбера бесплатно
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ЛЛМ выбирает из кандидатовЦена, ₽/1М: DeepSeek Flash 11,20 вход / 0,22 кэш / 22,40 выход · Pro 34,80 / 0,29 / 69,60 · четыре модели Сбера бесплатны (365 млн токенов в год). 🔑 Справочник обязан лежать в СИСТЕМНОЙ части промпта. Провайдеры кэшируют неизменный ПРЕФИКС: справочник в user-сообщении = кэш не срабатывает никогда и прогон дорожает в десятки раз. Порядок позиций должен быть стабильным — перестановка ломает префикс. 🔑 Смотреть на тариф КЭША, а не входа. Кэшированные токены набирают миллионы, их тариф и есть главный расход. По этой причине отключена 🔑 «Нашла больше» не делает модель лучше. Пропуск виден сразу — строка без пары. Ложное сопоставление уходит в расчёт молча и выглядит как работа. ⚠️ У Сбера prompt_tokens НЕ включает кэшированные токены, у DeepSeek они разложены на hit/miss. Не складывать.⚠️ max_tokens не меньше 256. При 32 ответ приходит ПУСТЫМ — лимит уходит на рассуждения. Выглядит как сбой сети.⚠️ Предел контекста YandexGPT — 32 768 токенов: больше ~900 позиций в прямом режиме не работает. 🛑 standalone_catalog_limit = 1000 — НАША настройка, а не предел модели. Годами стояла на 50 и выдавалась за свойство ЛЛМ. Больше тысячи не проверялось.ℹ️ Пустой ответ на пачке без подходящего кандидата — штатный отказ, не сбой. Кэш: DeepSeek автоматически, GigaChat по X-Session-ID, OpenAI слабее (−50…−75 %), Яндекс не документирован.ℹ️ Т4 не выдаёт список, а выбирает одного кандидата или отказывается — recall@k неприменим. Прежние числа убраны, меряем заново на BAO и смете Х5. 🛑 Страница уже переписывалась дважды из-за ошибок ЗАМЕРА, а не моделей. Сперва прогон шёл по кэшу решений, потом ярлык вызова был зашит в коде и выборка ловила чужие вызовы. Отсюда: чистить кэш, задавать source явно, сверять число вызовов с ожидаемым.
ВариантыDeepSeek Flash, DeepSeek Pro, GigaChat-2, GigaChat-2 Pro, GigaChat-2 Max, GigaChat-3 Ultra, GPT-5.6 luna, YandexGPT Lite, YandexGPT Pro, Qwen3-235B через API Яндекса (не подключена), Qwen3 локально через Ollama (не подключена) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
T5 Cross-encoder переранжирование
Перечитывает пару целиком и переставляет кандидатов; на русском слаба.
|
Уточнение порядка
sentence-transformers CrossEncoder
|
Хаб (нужен torch)
Бесплатно после установки
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Качество решенийТ5 ничего не ищет — она переставляет то, что ей дали. Поэтому её меряют не recall@k, а тем, улучшился ли порядок после переранжирования. 🛑 В прежнем виде технология НЕ УЛУЧШАЛА результат. Верные ответы получали оценки ниже порога: mmarco-mMiniLM обучена на английском корпусе MS MARCO, русская строительная терминология ей чужая. Перед боевым использованием проверить bge-reranker-v2-m3 (2,3 ГБ, заявлена сильнее на многоязычных) и перекалибровать порог.🛑 Упирается в процессор и НЕ кэшируется. Пара «запрос × кандидат» считается заново каждый раз: 1000 строк при top-50 — это 50 000 прогонов. Этим принципиально отличается от эмбеддингов, где вектор считается один раз. Бесплатна после установки, но живёт только на хабе: нужен torch, локально не ставится. 🛑 Реранкера нет ни у Яндекса, ни у Сбера — замену в облаке не найти. ⚠️ Прежние числа убраны — меряем заново.
Вариантыmmarco-mMiniLM, bge-reranker-v2-m3 (не подключена) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
T6 Обучаемый классификатор
Учится на подтверждённых сопоставлениях; растёт от объёма работы.
|
Принятие решения
scikit-learn
|
Хаб
Бесплатно плюс датасет
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Качество решенийДля запуска нужен размеченный набор пар «строка сметы → шифр». Сейчас эталон — 50 пар, для обучения мало, нужны сотни. ℹ️ Единственная технология, которая улучшается от объёма уже сделанной работы: чем больше подтверждённых сопоставлений накопит сервис, тем она точнее. ℹ️ У Яндекса есть три классификатора ( YandexGPT 5 Pro / 5 Lite / 4 Lite). Для подбора по справочнику не годятся — нужен заранее заданный список категорий. Но для обогащения свойств («вид работ», «раздел сметы») подходят прямо.⚠️ Не реализована — мерить нечего. Сетка стоит здесь, чтобы числа легли рядом с Т4 и были сравнимы.
Вариантылогистическая регрессия, градиентный бустинг |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
T7 Sparse retrieval / SPLADE
Скорость индекса как у Т1, смысловые связи как у Т3.
|
Отбор кандидатов
SPLADE, ColBERT-style
|
Воркер с GPU
Нужна GPU для индексации
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Качество отбора · recall@kОбученная модель сама решает, какие слова и синонимы добавить в индекс и с каким весом. Скорость инвертированного индекса как у Т1, но со смысловыми связями как у Т3 — теоретически снимает необходимость в гибриде. Требует GPU для индексации и живёт на воркере, а не на хабе. Модели: SPLADE, ColBERT-style. ⚠️ У Hetzner GPU только помесячно (GEX44 от 184 €/мес) — для разовой индексации три четверти денег уходят на простой. Разумнее RunPod с посекундной оплатой. ⚠️ Не реализована — мерить нечего. Сетка стоит здесь, чтобы числа легли рядом с Т1 и Т3 и были сравнимы.
ВариантыSPLADE, ColBERT-style |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||