estimates
Collection
2 items • Updated
Модель выбирает категорию из переданного guide и возвращает JSON с category_index. Если подходящей категории нет или выбор неоднозначен, предусмотрена категория undefined.
Qwen/Qwen3.5-4B-Base.На 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)