Своя модель вместо облачной заработала с первого раза. Числа правдоподобные, чек-лист заполняется, ошибок нет.
И она отвечала примерно одно и то же на что угодно.
Мы учим модель проверять, закрывает ли резюме требование вакансии, - чтобы считать это у заказчика, а не гонять данные кандидатов во внешний API. Обучение оказалось лёгкой частью: час на арендованной видеокарте, 77 центов, качество на уровне облака.
Трудным оказалось доказать, что продукт считает то же самое, что обучение.
Требование "Знание Kubernetes и Helm" против резюме фронтендера, который инфраструктуру в глаза не видел. Эталон: 0.011. Наш продукт: 0.795. Рядом честное совпадение по Python - 0.807.
То есть на всё подряд - "вроде подходит".
Причина в одну строку: модели подаётся разметка, где кончается требование и начинается резюме. Мы подавали туда нули. Слова при этом бились с эталоном идеально, до последнего токена.
Ничего не падало. Ни один тест не краснел. Заказчик получил бы шум вместо оценки и не заметил бы - числа же выглядят как числа.
Теперь рядом стоит сверка с эталоном до четвёртого знака и отдельная проверка, что модель вообще отвечает по-разному: первая вырождение не ловит.
Сломанная модель не падает. Она соглашается со всем.
Разбор целиком: чем мы заменили облачную модель и как это проверяли