CoolFace
Modelpublic

AGmind/qmd-query-expansion-ru

sourceHugging Faceapache-2.0updated 2mo agoView on Hugging Face
1likes56downloads
Model Card

qmd-query-expansion-ru

Русская модель расширения поисковых запросов для [qmd](https://github.com/tobi/qmd) — локального поискового движка Тоби Лютке. Drop-in замена стоковой tobil/qmd-query-expansion-1.7B, которая на русских запросах не работает.

EN TL;DR: Russian query-expansion model for qmd. The stock model is English-only and fails on Russian queries ([#774](https://github.com/tobi/qmd/issues/774), [#454](https://github.com/tobi/qmd/issues/454)); this is a drop-in fix trained with the upstream `finetune/` recipe. Benchmark below.

Зачем

Стоковая модель qmd обучена на 100% английских данных. Русский запрос она «переводит» в английский шаблон-галлюцинацию («…is an important concept… in software development» — про борщ), а формат вывода разваливается (issue #774). Вдобавок BM25-поиск qmd использует Porter-стеммер, который не понимает русскую морфологию — поэтому лексические расширения обязаны сами покрывать словоформы и синонимы («получить получение вернуть возврат»). Эта модель обучена делать и то, и другое.

Подключение (одна строка)

В ~/.config/qmd/index.yml (или проектном .qmd/index.yml):

yaml
models:
  generate: "hf:AGmind/qmd-query-expansion-ru/qmd-query-expansion-ru-q4_k_m.gguf"

Переиндексация не нужна. Контракт тот же, что у стока: /no_think Expand this search query: {запрос} → построчный вывод hyde: / lex: / vec:.

Бенчмарк: 450 отложенных русских запросов, наша vs сток

Механические метрики (без LLM-судей), сэмплинг как в рантайме qmd (temp 0.7, top-k 20, top-p 0.8). Скрипт: bench_qmd.py в репозитории.

метрика**наша**сток `tobil/…-1.7B`
валидный контракт qmd (ровно 1 hyde: + 3 lex: + 2 vec:, без мусора)99.8%0.0%
вывод на русском (≥70% кириллицы)99.3%26.2%
английский шаблон-боилерплейт («…is an important concept…»)0.0%22.9%
hyde в размерном контракте (50–250 симв.)96.0%19.8%
дословное эхо запроса вместо расширения0.4%1.3%

Сток не выдал валидный контракт ни на одном из 450 русских запросов и в ~23% ответов галлюцинирует английский шаблон. Наша держит контракт на 99.8%, оставаясь русской.

Пример

Запрос: «как оформить налоговый вычет за лечение»

hyde: Для оформления налогового вычета за лечение необходимо подтвердить расходы на медицинские услуги...
lex: налоговый вычет лечение оформление декларация
lex: расходы медицинские услуги справки врачей
lex: вычет налога подача декларация
vec: Как получить налоговый вычет за медицинские расходы
vec: Подача заявки на налоговый вычет за лечение и справки

Сток на тот же запрос: hyde: Как оформить налоговый вычет за лечение is an important concept that relates to... It provides functionality for various use cases in software development.

Обучение

  • —База: Qwen/Qwen3-1.7B (та же, что у стока), LoRA r16/α32 all-proj, 5 эпох — точный SFT-рецепт апстрима (tobi/qmd/finetune).
  • —Данные: 5 075 русских запросов (MIRACL-ru apache-2.0, Mr.TyDi-ru apache-2.0, Яндекс.Кью CC0) → дистилляция учителем (DeepSeek, n=2 сэмпла + rule-based reward-фильтр ≥70, средний скор 94.8).
  • —Формат идентичен трейн-схеме апстрима ({"query", "output": [["hyde",…],["lex",…],["vec",…]]}, hyde первой).

Ограничения

  • —Модель 1.7B: hyde:-пассажи могут фантазировать детали (номера деклараций, ингредиенты). Для расширения поиска это терпимо — термины остаются в теме, — но не считайте hyde фактами.
  • —Обучена для русского; для английских запросов используйте сток.

Файлы

  • —qmd-query-expansion-ru-q4_k_m.gguf — для qmd / llama.cpp (рекомендуется)
  • —safetensors — merged fp16 для transformers

Код, генератор датасета, трейн- и бенч-скрипты: github.com/botAGI/AGmind-ML → qmd-query-expansion-ru. Родственная модель: AGmind/agmind-rag-splitter-ru.