Qwen3.5-4B — классификация позиций строительных смет

Модель выбирает категорию из переданного guide и возвращает JSON с category_index. Если подходящей категории нет или выбор неоднозначен, предусмотрена категория undefined.

Обучение

  • Базовая модель: Qwen/Qwen3.5-4B-Base.
  • Полное дообучение, BF16, 3829 обучающих примеров.

Проверка на валидационной выборке

На 477 примера:

Показатель Результат
Точное совпадение с эталоном 402 / 477 — 84,28%
Все несовпадения 75 / 477 — 15,72%
Неверное назначение конкретной категории 71 / 477 — 14,88%
Лишний ответ undefined 4 / 477 — 0,84%
Некорректный JSON 0

Промпт и инференс

Точный шаблон обучения сохранён в prompts/get_category_index.txt. Он содержит буквальные последовательности \n и двойные фигурные скобки в примере ответа: они сохранены как в обучающих данных. Не преобразуйте их при подстановке.

Модель обучалась на плоском тексте: не применяйте apply_chat_template.

Пример для локальной копии репозитория с установленной версией Transformers, поддерживающей Qwen3.5 (экспорт проверен на 5.5.4):

import json
import re
from pathlib import Path

from transformers import AutoModelForCausalLM, AutoTokenizer

MODEL_DIR = Path(r"F:\main_data\AI\HF_REPOS\qwen3.5-4b-ru-estimate-engine")

tokenizer = AutoTokenizer.from_pretrained(MODEL_DIR)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_DIR,
    dtype="auto",
    device_map="auto",
)
model.eval()

guide = {
    "0": "Установка дверей металлических",
    "1": "Окраска потолков",
    "2": "undefined",
}
item = "Архитектурные решения - Двери - Установка металлических дверных блоков"

template = (MODEL_DIR / "prompts/get_category_index.txt").read_text(encoding="utf-8")
values = {
    "item": item,
    "guide": json.dumps(guide, ensure_ascii=False, separators=(",", ":")),
}
prompt = re.sub(r"\{(item|guide)\}", lambda match: values[match.group(1)], template)
inputs = tokenizer(prompt, add_special_tokens=False, return_tensors="pt").to(model.device)
output = model.generate(
    **inputs,
    max_new_tokens=32,
    do_sample=False,
    pad_token_id=tokenizer.pad_token_id,
    eos_token_id=tokenizer.eos_token_id,
)
answer = tokenizer.decode(output[0, inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(answer)
Downloads last month
18
Safetensors
Model size
4B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for GreenMap/qwen3.5-4b-ru-estimate-engine

Finetuned
(242)
this model
Quantizations
1 model

Collection including GreenMap/qwen3.5-4b-ru-estimate-engine