Этикетка 0.931
Модель отвечала красиво, структурированно и, по её собственным меркам, правильно. Проблема была в том, что её мерками мы не могли измерить matching.
В очереди из 9 человек правильно прошли только 4
Валидный JSON — 100%. Decision accuracy Exp 001 — 44%. Базовая модель принимала явно неподходящие пары.
Адаптер дал контроль. Скорость — позже.
Cloud API уходит с данми наружу. Базовая модель не даёт контроля. LoRA — локальный адаптер с рычагами: данные, контроль, итерации, воспроизводимость.
Loss упал. Решения — нет.
Лучший validation loss во всей серии — 0.235 — пришёлся на худший по решениям эксперимент. Низкий loss не предсказал качество matching.
Accuracy выросла. Дым не рассеялся.
Offline-тест показал 78% — впечатляющий скачок. Но production-style negative smoke, те самые примеры-ловушки, всё ещё проходили.
Hard negatives убили false positives, но recall упал.
Teacher Dataset добавил 33 тёмные папки: hard negatives, edge cases, invalid inputs. Датасет вырос с 90 до 123 записей. Smoke стал зелёным, но positive recall просел.
Positives и borderlines вернули recall, сохранив hard-negative gains.
Датасет вырос до 162 записей. Teacher Dataset добавил 39 светлых папок: positives и borderlines. Очередь стала правильной, а стрелка MAE прилетела ближе к центру.
Алиби частично подтверждено. Но у него есть трещины.
На внешней выборке 102 записей LoRA показала 93.1% accuracy против 94.1% у GPT-4o-mini. Большинство точек кластеризуется вокруг диагонали — но не все.
Production нашёл truncation-баг, который не видела offline-метрика.
Telegram-дымовой тест вскрыл HTTP 422 и обрезанный JSON на hard-negative анкетах. Фикс: max_tokens 300 → 512 + graceful JSON extraction.
Пока мы искали качество, latency могла убить развёртывание.
Generation занимала >99% времени ответа. Стандартный transformers fp16 давал ~9–15 с. vLLM + persistent warm process сократили среднюю latency до ~1.6 с.
93.1% accuracy не соврала. Она просто не рассказала всё.
Когда LoRA запустили в реальном Telegram и подали 23 hard-negative анкеты, результат рухнул до 35%. Расследование показало: модель не лгала. Она точно воспроизводила teacher labels.
Модель не обманывала. Она воспроизводила teacher labels.
Teacher Dataset признал: часть hard-negative меток была размечена как match. Следующий шаг — чинить датасет, а не модель. И переходить к stratified метрикам.
Вердикт присяжных: датасет виноват, модель — нет.
Dataset engineering — доказано. Production hard-negative качество — частично. Calibration и субсекундная latency — следующее дело.
Расследование продолжается.
Команда идёт вперёд. Каждый несёт свою задачу: re-label hard negatives, расширить teacher dataset, calibration loss, persistent quantized server, stratified production smoke set.
Улики открыты. Проверяйте.
Все исходные артефакты: loss-кривые, метрики, параметры, ссылки на JSON-файлы. Каждый ящик можно раскрыть и посмотреть полные данные.