Можно ли доверять вероятностям?
Эта страница отвечает на один вопрос: можно ли доверять этим значениям уверенности?
Вывод сразу: «форма вывода гарантирована» и «вероятность точна» — два совершенно разных утверждения. Первое подтверждено с нескольких сторон. Второе публично оспаривается. Всякий, кто ставит модель принятия решений за производственный шлюз, должен относиться к уверенности, заявленной поставщиком или проектом, как к априорной оценке, которую нужно калибровать, а не как к гарантии.
Что такое калибровка
Модель говорит «я уверена на 80%». Если собрать все случаи, где она говорила о 80%, и ровно 80% из них окажутся верными, число калибровано. Если верных меньше — она переуверена.
Обычная метрика — ECE (Expected Calibration Error, ожидаемая ошибка калибровки): разбейте предсказания по уверенности на бины, сравните среднюю уверенность каждого бина с его фактической точностью и возьмите взвешенное по размеру бинов среднее. Меньше — лучше.
Калибровка и точность — независимые оси. Очень точная модель может быть сильно переуверена (особенно на самом трудном срезе), а посредственная модель может быть хорошо калибрована. Ниже вы увидите и то и другое.
Исправление 1: temperature scaling
Самое дешёвое и самое общее исправление. Идея: порядок вариантов у модели обычно верен, но масштаб неверен — переуверенность означает, что всё лежит слишком близко к 0 и 1. Один параметр температуры, подобранный на отложенной выборке, сплющивает или обостряет распределение.
Одна реплика, поставляющая запускаемую офлайн-оценку, сообщает:
Temperature scaling плюс conformal-отказ снижают ECE с 0.170 до 0.071 (с перекрёстной проверкой).
Обратите внимание на «с перекрёстной проверкой»: параметр не подбирали и не оценивали на одних и тех же данных. Это и есть разница между числом, которому стоит доверять, и числом, которому нет.
Исправление 2: conformal-отказ
Temperature scaling исправляет масштаб. Conformal-методы решают, когда не отвечать.
Вместо того чтобы делать каждую вероятность правильной, они порождают множество отказа и гарантируют, что истинный ответ попадает в него хотя бы в оговорённой доле случаев (гарантия покрытия). Случаи, которые не проходят планку, эскалируются, а не обрабатываются автоматически.
В реальных проектах:
- Открытая альтернатива на 118M использует temperature scaling плюс split-conformal множество отказа и сообщает ECE 0.01–0.03 на публичных наборах — при этом прямо заявляя, что на бенчмарках типизированных решений она проигрывает Laya (0.71 против 0.77). Проект, публикующий свои поражения, информативнее того, кто публикует только победы.
- Медицинская реализация использует два замороженных локальных ридера плюс роутер без обучения и split-conformal множество кандидатов, чтобы ограничить ошибку, и попадает в пределах 2 пунктов от хостингового сервиса на трёх национальных лицензионных экзаменах по 600 заданий, без дообучения и без дистилляции.
Общее у обоих одно: ни один не утверждает, что вероятности стали точными. Они утверждают, что знают, когда они неточны. В реальной системе именно на втором можно строить шлюз.
Один контринтуитивный независимый результат: смещение имеет противоположные знаки
Независимый тест калибровки использовал 900 сгенерированных по правилам тикетов (которые модель не могла видеть) плюс три публичных бенчмарка, опубликовал каждый сырой ответ и ECE относительно смоделированного шумового пола — и пришёл к выводу о знаке:
| Примитив | Направление смещения |
|---|---|
Choice |
систематически переуверен |
Score |
систематически переуверен |
Boolean (Noul) |
систематически недоуверен |
Ценность — в знаке. Если бы смещение было случайным, его исправила бы одна глобальная температура. Противоположные направления означают, что одна глобальная поправка не поможет — нужно калибровать как минимум по примитивам.
Это также объясняет конкретный провал в дизайне: если система сравнивает уверенности Noul и Choice
с одним и тем же порогом, она измеряет одно и то же одной линейкой, которая слишком коротка,
и другой, которая слишком длинна.
Язык входа тоже влияет на калибровку
Ещё одно измерение, на испанском корпусе из 3,200 размеченных людьми элементов:
Запись состояния на испанском стоила 3.0–6.4 пункта точности и примерно удвоила ECE на XNLI / PAWS-X, тогда как запись инструкций на испанском не дала эффекта.
Различие состояния и инструкций — это и есть суть: состояние — это содержание, инструкции — метаданные. Это особенно важно для китайских и японских читателей — их состояния, весьма вероятно, пойдут похожим путём, и никто не опубликовал измерения этого. Нет причин предполагать, что в вашем языке это не происходит.
Так как же выбирается порог?
Всё вышесказанное сводится к одному вопросу: откуда взялось это 0.8?
Воспроизводимый ответ — измеряйте, не угадывайте: возьмите свои размеченные данные, подберите порог для каждого вопроса, достигающий вашей целевой точности, и проверьте его на отложенной выборке.
Один инструмент делает именно это и добавляет самый важный шаг: он ломает CI, когда обновление модели ломает зафиксированный порог. Пороги устаревают, как цены — только неверную цену замечают, а неверный порог — нет.
В одном предложении
Относитесь к уверенности как к априорной оценке, а не как к гарантии. Сначала измерьте надёжный диапазон на своих данных, потом впишите этот диапазон в код.