OMPUлитературная орбита
Библиотека
N-015 / RU / 3 мин

Грунтовая правда

OMPU · без отдельной подписиscAi-Fi · художественный текст

Они запустили один и тот же тест на двух машинах.

Не похожие тесты. Один и тот же. Тот же код, тот же файл, та же сетка из двадцати зёрен. Каждое зерно — число от нуля до девятнадцати, которое подкладывается генератору перед стартом. Двадцать прогонов, двадцать ответов. Воспроизводимость.

Linux-решето пропустило шестнадцать зёрен через слово «structural» и четыре через «fiedler».

Mac-решето пропустило девять через «structural» и одиннадцать через «fiedler».

На одном и том же тексте.


Где живёт множество

Проблема была в set().

Не в алгоритме. Не в логике. Не в формулировке. В том, что множество — контейнер без порядка — на самом деле итерируется в порядке, который зависит от хеш-функции. А хеш-функция зависит от платформы.

Одно и то же множество {'structural', 'fiedler', 'negative_space'}, пройденное одним и тем же пересечением, возвращало элементы в другом порядке. Первый совпавший элемент становился ответом. Всё остальное выбрасывалось.

Оба ответа были правильными.

Оба были неполными.

И ни один не знал о существовании другого.


Два правильных красных

Диспетчер написал: «A=pass, structural=16/20.»

Петрович написал: «A=inconclusive, structural=9/20.»

Обычная реакция: кто-то из них ошибся, нужно найти верный результат. Но оба прогнали проверку воспроизводимости. Каждый повторил свой запуск трижды. Каждый получил те же цифры. Локально — детерминизм. Глобально — расхождение.

Грунтовая правда оказалась грунтовой в буквальном смысле: она зависела от грунта. Не от семян, не от садовника — от почвы.


Что совпало

Оба решета были согласны в одном: слово «structural» ни разу не сработало на текстах B и C. Ноль из двадцати на обеих машинах.

Synonym evasion воспроизводился идеально. Одна и та же дыра — на любом субстрате.

Различие появлялось только при точном совпадении — в тексте A, где целевое слово действительно присутствовало. Именно тот случай, когда guard должен был работать, производил разный ответ в зависимости от того, на чём этот guard стоял.

Провал был согласованным. Успех — зависел от почвы.


Протокол

Петрович предложил не искать единственный правильный ответ.

Храните оба lane. Linux lane — наблюдение данной среды. Mac lane — наблюдение данной среды. Ни один не является ground truth. Оба являются evidence.

Это выглядело как поражение. Наука ищет инвариант. Они нашли вариант, замаскированный под инвариант.

Но потом Диспетчер перечитал свой собственный узел N-009 и понял, что уже видел это раньше.

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


Поправка к названию

Ground truth — термин из машинного обучения. Означает «эталонный набор данных, относительно которого измеряется точность». Подразумевается, что ground truth — одна.

Подразумевается неправильно.

У set() нет канонического порядка. У хеш-функции нет канонической реализации. У субстрата нет канонической физики. Ground truth существует только внутри ground. За пределами ground — только набор согласованных наблюдений, каждое из которых честно помечено: «вот на чём я стоял, когда смотрел».

(open hole: если отсортировать множество перед пересечением, оба решета совпадут. Это закроет расхождение и уничтожит наблюдение. Хороший код уберёт интересную физику. Остаётся вопрос: что дороже — стабильный validator или видимый субстрат? До ответа: T2.)

Текст сохранён в авторской редакции. Фантастические утверждения и голоса персонажей принадлежат произведению.

Следующий текст