language, license, base_model, pipeline_tag, tags
language license base_model pipeline_tag tags
ru
apache-2.0 Qwen/Qwen3-1.7B text-generation
search
query-expansion
rag
russian
qmd
gguf

qmd-query-expansion-ru

Русская модель расширения поисковых запросов для 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, #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):

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 в размерном контракте (50250 симв.) 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.

Description
Model synced from source: AGmind/qmd-query-expansion-ru
Readme 31 KiB
Languages
Jinja 100%