Документальный фильм внутри браузера

HR Assistant LoRA

Рождение способности. Как небольшая языковая модель учится принимать HR-решения — урок за уроком, датасет за датасетом.

1Форма
2Ёмкость
3Ловушки
4Баланс

Сцена 2 · Действующие лица

Кто есть кто в этом фильме

Модели, метрики и инструменты — с их ролями.
Если какое-то слово непонятно, вернитесь сюда.

Qwen2.5-1.5B-Instruct Главная героиня

Базовая языковая модель. Умеет многое из общих задач, но не умеет сопоставлять кандидатов с вакансиями.

LoRA Адаптер-наставник

Маленький модуль, который доучивает базовую модель конкретной задаче без перезаписи всей модели.

Teacher Dataset Учитель

Примеры правильных ответов, по которым модель учится. Состав примеров важнее архитектуры.

Decision Accuracy Судья по решениям

Доля случаев, где модель правильно сказала match или no_match. Главная бизнес-метрика.

MAE Средняя ошибка

Mean Absolute Error. Насколько в среднем модель ошибается в числовом score кандидата.

Validation Loss Ложный друг

Стандартная ML-метрика. В этой задаче она обманывает: низкий loss ≠ правильные решения.

Hard Negatives Ловушки

Сложные примеры, где кандидат внешне похож на подходящего, но на самом деле не подходит.

Positives & Borderlines Восстановители баланса

Подходящие и пограничные кандидаты. Помогают модели не становиться слишком консервативной.

Production Smoke Реальная проверка

Тесты в настоящем API с реальными запросами. Показывают, выдержит ли модель боевые условия.

vLLM Скоростной двигатель

Inference-движок, который ускоряет ответы модели в 5–7 раз без потери качества.

GPT-4o-mini Облачный эталон

Модель-референс от OpenAI. С ней сравниваем, насколько близка локальная модель к облачной.

JSON Язык отчётов

Структурированный формат ответа модели: match/no_match, score, оценки по компонентам, reasoning.

Сцена 3 · Базовая модель

Всё, что умеет модель из коробки

Qwen2.5-1.5B-Instruct умеет говорить, строить JSON и вежливо отвечать. Но сопоставить кандидата с вакансией — другая задача.

100%valid JSON
44%decision accuracy
38.8MAE score

«Форма ответа освоена, но смысл задачи — нет.»

Кейс из коробки

Врач на вакансию специалиста по разметке данных.

reference: no_match model: match

Сцена 4 · Первый урок

Форма без смысла

LoRA на 90 примерах, 5 эпох. Loss падает, а decision accuracy остаётся на уровне базовой модели — модель выучила форму, а не смысл.

44%decision accuracy
0.235best eval loss
4лучшая эпоха

«Модель выучила форму ответа, а не его смысл.»

Training and validation loss curves

Сцена 5 · Парадокс метрик

Хороший loss — плохая новость

Validation loss говорит «всё отлично», а решения — «всё плохо». Значит, мы измеряли не то.

Exp 001 loss 0.235 accuracy 44%
Exp 002 loss 0.444 accuracy 78%

«Language-modeling perplexity измеряет не то же самое, что способность принимать HR-решения.»

Best validation loss per experiment
Decision accuracy evolution

Сцена 6 · Второй урок

Первый рост

Тот же датасет, другая динамика обучения. Модель начинает понимать matching-логику — но production-ловушки ещё впереди.

78%decision accuracy
21.9MAE score

«Модель стала лучше улавливать matching-логику, но реальный мир оказался сложнее тестового набора.»

Сцена 7 · Ловушка

Чего не видит offline-тест

Positive smoke проходит. Negative smoke падает: hard negatives, edge cases, invalid input — модель пропускает ловушки.

FAILnegative smoke Exp 002

«Модель не знает, как выглядит настоящая ловушка.»

Runtime smoke matrix
Кейс-ловушка

Врач на вакансию специалиста по разметке данных.

score 27 → 72 no_match → match
Dataset evolution

Сцена 8a · Третий урок

Hard negatives

Датасет 90 → 123 записи. Модель учится говорить «нет» на сложных негативных примерах. Конфигурация LoRA не менялась.

7/7runtime smoke passed
67%decision accuracy
2лучшая эпоха

«Раз модель не знает ловушек, покажем ей ловушки.»

Сцена 8b · Торговля

Цена отсева

Hard negatives убили false positives, но модель стала консервативной — и стала отсеивать истинные match.

67% accuracy после hard negatives
VS
7/7 runtime smoke passed
Precision recall tradeoff

«Улучшение в одном измерении качества может ухудшить другое.»

MAE score evolution

Сцена 9 · Четвёртый урок

Баланс

Датасет 123 → 162. Hard negatives остались, добавили positives и borderlines. Конфигурация LoRA не изменилась.

80%decision accuracy
15.1MAE score
162записей в датасете

«Правильный состав teacher dataset важнее архитектурных изменений.»

Сцена 10 · Внешняя проверка

Модель в незнакомом лесу

102 записи, которых модель никогда не видела. Сравнение с GPT-4o-mini — честная оценка, не маркетинговая цифра.

93.1%LoRA accuracy
94.1%GPT-4o-mini accuracy

«Модель обобщается и приближается к облачной по решениям, но не идентична ей.»

External validation scatter

Сцена 11 · Smoke repeatability

Первые продакшн-шаги

Production smoke проходит стабильно: Exp 003, Exp 004, rerun после оптимизации.

💨7/7Exp 003 passed
💨7/7Exp 004 passed
💨7/7rerun passed
Runtime smoke matrix

«Production smoke — не однократная удача, а стабильный gate.»

Сцена 12 · Разрыв и фикс

Когда ответ не влезает

Production runtime нашёл слабое место: truncation + HTTP 422. Фикс: max_tokens 300 → 512 + graceful JSON fallback.

0.867 → 1.000valid JSON
0.800 → 0.933decision accuracy

«Production bug может исказить оценку качества модели.»

Before after truncation fix
Latency stage breakdown

Сцена 13a · Поиск узкого места

Где теряется время

После Exp 004 latency p50 = 11.7 с — слишком медленно. Профилирование показывает: почти всё время уходит на генерацию токенов.

>99%времени — generate
9.9мс генерации (p50)

«Bottleneck найден: почти всё время уходит на генерацию токенов.»

Сцена 13b · Latency

Модель учится быстрее

vLLM сокращает latency в несколько раз. Warm persistent process доводит среднее время ответа до 1.6 с.

9.1transformers fp16, с
2.2vLLM fp16, с

«Latency становится отдельной инженерной задачей после достижения качества.»

Engine benchmark

Сцена 14 · Честный диагноз

Что доказано, а что нет

Честная классификация достижений важнее маркетингового оптимизма.

Dataset engineering работает
Production smoke — стабильный gate
Latency optimization даёт production-viable скорость
~ Сравнение с GPT: близко по accuracy, отстаёт по MAE/FNR

«Мы доказали, что маленькая локальная модель может стать production-viable. Мы не доказали, что она превосходит эталон во всём.»

Proven partial next

Сцена 15 · Следующий цикл

Модель продолжает расти

ML-исследование циклично. Каждый цикл заканчивается не победой, а новым вопросом.

Next cycle roadmap
1Калибровка score
2Аугментация датасета
3Hard-negative метрики
4Квантизованный сервер

«История продолжается.»

Best epoch markers

Сцена 16 · Лучшая эпоха

Лучшая эпоха — не последняя

Во всех экспериментах лучший checkpoint оказался не на финальной эпохе. Train loss падал дальше, eval loss рос.

4Exp 001 best epoch
5Exp 002 best epoch
2Exp 003 best epoch
3Exp 004 best epoch

«Больше усилий не всегда означает больше мастерства.»

Сцена 17 · Данные важнее архитектуры

Главный рычаг качества

Все 4 adapter_config.json идентичны: r=16, α=32, dropout=0.05, 7 target modules. Менялись только данные.

90 → 123 → 162размер датасета
r=16LoRA rank
7target modules

«Одинаковая модель, разные данные — разные качества.»

Dataset change log

Сцена 18 · Архив

Все артефакты на одном экране

Ключевые графики и диаграммы, которые документируют путь модели.

Loss curves Test eval loss Per component MAE Latency CDF LoRA vs GPT radar Dataset composition transition

«Каждая метрика — это маленькое открытие.»

Сцена 19 · О методе

Как устроен эксперимент

Teacher dataset → LoRA → vLLM → Telegram. Одинаковая архитектура, разные данные. Каждое число связано с JSON-источником.

Pipeline schematic
base modelQwen2.5-1.5B-Instruct
LoRA r16
alpha32
dropout0.05
target modules7

«История продолжается. Следующий цикл — калибровка, расширение датасета, квантизованный сервер.»