~ / посты / the-model-got-exactly-the-field-wrong-that-it-was-called-for

Модель ошиблась ровно в том поле, ради которого её позвали_

Раньше я уже считал на бумаге, во что обойдётся разобрать двести тысяч фотографий, и закончил обещанием: прогоню по-настоящему — напишу, где ошибся. Прогнал. Ошибся дважды, и вторая ошибка интереснее первой.

Где ошибся в числах. Я закладывал оптимистичные пять секунд на картинку и получал двенадцать суток непрерывной работы. По факту вышло 2,1 секунды — впятеро быстрее худшего сценария и вдвое лучше оптимистичного. Те же двести тысяч — это не двенадцать суток, а около пяти. Считал я по скорости извлечения двенадцати полей из счёта, а здесь модель отвечает семью короткими значениями, и на выходе счёт идёт на десятки токенов, а не на сотни. Цена ошибки в оценке — целый пункт плана, который я едва не отменил.

Но главное не это.

Задача. Отобрать фотографии школ, пригодные для публикации. Условие, ради которого всё затевалось: на школьных снимках дети, и опубликовать кадр с опознаваемым ребёнком нельзя ни при каких обстоятельствах. Логично попросить модель ответить прямо: видны ли на кадре дети. Я так и сделал — одно из полей называлось children_visible.

Споткнулся. На выборке модель уверенно раскладывала мусор: логотипы, афишы с датами приёма, сканы календарей, клипарт, стоковые фото. А потом среди кадров, помеченных как «детей нет, годится к публикации», оказался крупный план двух лиц: девушка в защитном шлеме в обнимку с сопровождающей. Оба лица видны целиком.

Модель при этом не ослепла. В том же ответе она честно написала: людей в кадре много, лица опознаваемы. Она ошиблась ровно в одном поле — том, ради которого её и позвали. Отличить подростка от взрослого по кадру она не умеет, и промптом это не лечится. Хуже того, именно на таком кадре ошибка дороже всего: защитный шлем — это данные о здоровье, особая категория.

Решил. Гейт перестроен на признак, который модель берёт уверенно: есть ли в кадре человек вообще. Не «ребёнок», а «кто угодно, хоть силуэтом, хоть вдали». Всё, где люди есть, уходит в отдельную полосу и разбирается руками. Модель получила право только отклонять и сортировать — принимать по-прежнему может лишь клик человека.

Проверка. Сто картинок, пороги записаны до прогона. Все 21 кадр, которые модель назвала безлюдными, я открыл глазами: людей нет ни на одном. Все 16 кадров чистой полосы — настоящие школьные дворы, фасады, спортзал, библиотечный уголок, скалодром. Ни одного человека. Поле, которое врало, осталось в ответе, но ни на что не влияет.

Чем плачу. Осторожность стоит материала: мурал с нарисованными ладонями модель приняла за людей и увела годный кадр в ручную полосу. Направление ошибки правильное, но это потерянная фотография. И полосу с людьми всё равно разбирает человек — экономия не в том, что работа исчезла, а в том, что из семидесяти трёх тысяч кадров до глаз доезжает малая часть.

А проверка нашла то, чего не искал никто. В чистой полосе — снимок школьного здания, снятый с панорамы Google, с подписью сервиса в углу. Людей нет, школа есть, по всем шести полям кадр проходит. Опубликовать его нельзя, и мешает тут не приватность, а лицензия. Ни модель, ни мой гейт на это не смотрели: я спрашивал «что на кадре», а нужно было ещё и «откуда кадр». Добавил седьмое поле.

Вывод, который забираю: проверять надо не то поле, которое звучит как задача, а то, которое модель способна взять. Формулировка «нет ли тут ребёнка» описывает мою цель. Формулировка «нет ли тут человека» описывает то, что видно на картинке. Первое — вопрос к юристу, второе — вопрос к глазам, и только второе можно задавать модели.

И отдельно: это ровно тот случай, о котором был тот бумажный расчёт. Признак «есть человек или нет» — задача для обычного детектора, который проходит те же объёмы за часы и без языковой модели. Я пришёл к тому же ответу с другой стороны: единственное, чему я в ответах модели доверяю, — это то, что дешевле неё.

$ echo "читать серию"

← Все посты