Абстенция LLM: почему TF-IDF обошёл GPT-4o на 40 пунктов
Тикет «не работает VPN после обновления ноутбука» уходит в очередь к сетевикам. Или не уходит, а падает в «Прочее», откуда его через два дня вытаскивает человек, потеряв SLA и дважды переделав работу. Средний голосовой тикет в североамериканском IT-сервисдеске стоит 17,19 доллара по данным HDI/MetricNet, а ошибка маршрутизации обходится дороже самой маршрутизации, потому что ручной разбор всё равно случится, только позже и с накладными расходами.
Свежая работа arXiv 2610.31657 задаёт вопрос, который в внедрениях LLM обычно обходят: стоит ли вообще разрешать модели принимать это решение автоматически, и если да, то при какой уверенности. Ответ получился неудобным. Обученный TF-IDF с логистической регрессией и порогом отказа 0,60 снижает модельную стоимость на 38,1%, а лучшая промптнутая LLM отстаёт от него на 40 пунктов точности и в большинстве конфигураций вообще не имеет права ничего маршрутизировать.
Что такое cost-aware abstention
Cost-aware abstention это политика, при которой модель либо выдаёт решение сама, либо отказывается и передаёт его человеку, а выбор между этими действиями определяется явной ценой трёх исходов: верный автоответ, ручной разбор и неверный автоответ. Отказ в такой схеме не признание слабости модели, а управляемый параметр, у которого есть цена и обоснование.
Термин не новый: классическая схема Чжоу 1970 года описывала компромисс между ошибкой и отказом, а обучение с отказом и learning to defer разрабатывались годами. Новое здесь в другом: авторы не предлагают алгоритм, они предлагают процедуру проверки готовности к внедрению. Предиктор, оценка уверенности, сигнал отказа и ценовая модель остаются раздельными слоями, и каждый можно проверить отдельно.
Почему точность не отвечает на денежный вопрос
Маршрутизация тикетов асимметрична по стоимости. Отправить тикет в правильную очередь почти бесплатно. Отправить его человеку умеренно дорого. Отправить в неправильную очередь дорого по-настоящему, потому что вы платите и за задержку, и за повторную работу, и за нарушенный SLA.
Метрика accuracy эту асимметрию не видит. Модель с точностью 0,85 может быть экономически убыточной, если её ошибки концентрируются в дорогих классах, и наоборот. Авторы фиксируют три стоимости: c_ok за верный автоответ, c_triage за ручной разбор, c_wrong за ошибочный автоответ, и считают ожидаемую стоимость одного тикета как сумму вероятностей этих трёх событий, взвешенных их ценами.
Основной анализ идёт на наборе (0, 1, 5): верный автоответ бесплатен, ручной разбор стоит единицу, ошибка стоит пять. Из этой пропорции напрямую выводится порог безубыточности. Автоматическое решение выгодно, только если вероятность правильного ответа p удовлетворяет неравенству p·c_ok + (1 − p)·c_wrong ≤ c_triage. При (0, 1, 5) это даёт p ≥ 0,80. Иными словами, модели разрешено маршрутизировать тикет, только когда она права в четырёх случаях из пяти, и никакая средняя точность по датасету этого не заменяет.
Что именно сравнивали
Датасет публичный: 47 837 тикетов внутренней IT-поддержки, восемь классов (Access, Administrative rights, HR Support, Hardware, Internal Project, Miscellaneous, Purchase, Storage), медианная длина 175 символов, дисбаланс классов 7,74 к одному, самый большой класс 13 617 тикетов против 1 760 у самого маленького. Разбиение стратифицированное, 70/10/20: 33 486 на обучение, 4 784 на калибровку, 9 567 на тест.
Со стороны классики четыре модели: логистическая регрессия на TF-IDF с униграммами и биграммами, линейный SVM с сигмоидной калибровкой, случайный лес на 300 деревьях и дообученный DistilBERT. Со стороны LLM четыре модели в zero-shot и few-shot вариантах: GPT-4o-mini, Claude Haiku 4.5, Qwen2.5-7B-Instruct и Llama-3-8B-Instruct-Lite. Промпт перечисляет допустимые метки, текст тикета и требует JSON с полем label и полем confidence, температура нулевая, максимум 64 токена на ответ.
LLM гоняли не на всём тесте, а на стратифицированной подвыборке в 1 000 тикетов, потому что восемь конфигураций на полном тесте это больше 8 000 платных запросов. Проверка честная: все классические модели пересчитали на той же тысяче, расхождение с полным тестом не превысило 1,6 процентного пункта.
Разрыв, который не объясняется одной фразой
На полном тесте DistilBERT даёт 0,877 accuracy и 0,874 macro-F1, линейный SVM 0,863 и 0,864, логистическая регрессия 0,847 и 0,842, случайный лес 0,818 и 0,806. Лучшая LLM, Claude Haiku 4.5 в few-shot, даёт 0,477 и 0,459. GPT-4o-mini в few-shot 0,459 и 0,450, Qwen2.5-7B в few-shot 0,447 и 0,454, Llama-3-8B в zero-shot 0,378 и 0,284.
Самый показательный случай это Llama-3-8B в few-shot: 0,255, то есть на 12,3 пункта хуже собственного zero-shot результата. Причина не в модели, а в бюджете вывода. На примерах модель начинает ответ с вежливой преамбулы вроде «I'll classify the ticket and return the JSON», съедает 64 токена на болтовню и не успевает выдать JSON. Доля ошибок парсинга 15,1%. Со строгим промптом v2 и лимитом 128 токенов точность поднимается с 0,245 до 0,320, то есть часть «глупости» была настройкой пайплайна.
Авторы честно оговаривают границу сравнения. Обученные модели видели 33 486 размеченных тикетов и выучили саму таксономию. LLM получили только названия классов и максимум 24 примера, без определений категорий. А классы здесь неочевидные: чем «Miscellaneous» отличается от «Internal Project», а «Administrative rights» от «Access», не описано нигде. Так что корректная формулировка не «LLM глупее TF-IDF», а «промптнутая LLM без описания таксономии не готова к автоматической маршрутизации». Для блога и для внедрения разница принципиальная.
Уверенность, которая ничего не значит
Вторая часть работы касается калибровки, и здесь данные выглядят почти комично. Сырая ECE у всех промптнутых LLM лежит в диапазоне от 0,332 до 0,594. GPT-4o-mini в few-shot ставит уверенность 1,000 каждому тикету при точности 0,459, и его correctness AUROC при этом ровно 0,500, то есть монетка.
Изотоническая регрессия, обученная на отдельном калибровочном наборе, сжимает ECE до 0,014–0,049, относительное снижение 86–98%. Звучит как решение проблемы, но это ловушка интерпретации. Изотоническая регрессия монотонна, поэтому она не может улучшить ранжирование: AUROC меняется не более чем на 0,007, а tie-aware AURC не улучшается систематически. Если исходная уверенность была константой, после пересчёта она останется константой, просто другого уровня. Калибровка лечит уровень вероятностей, а не их различающую способность, и для политики отказа нужна именно вторая.
Авторы делают из этого методический вывод: отчитываться нужно не только ECE, но и AUROC по правильности плюс площадь под risk-coverage кривой. Иначе легко получить красивую калибровку при нулевом сигнале.
Три способа измерить сомнение
Сигнал отказа можно строить по-разному, и разница между вариантами небольшая, но показательная. Верхняя вероятность даёт снижение стоимости на 36,9% при покрытии 65,2%. Отрыв между первым и вторым классом даёт 38,8% при покрытии 68,5%. Обратная энтропия даёт 33,6% при покрытии 68,3%.
Лучший результат у margin, и это логично: два близких по вероятности класса означают, что модель колеблется между ними, даже если абсолютная уверенность высокая. Энтропия проигрывает, потому что на восьми классах распределение часто размазано по нескольким вариантам сразу, и порог срабатывает не там, где хотелось бы. Главное здесь то, что эффект не привязан к одному конкретному скору: любой из трёх даёт экономию в том же порядке величины.
Где ставить порог
Порог это и есть вся политика, и таблица компромисса читается как учебник. При 0,50 стоимость 0,510, покрытие 81,0%, точность автоответов 92,1%. При 0,60 стоимость минимальная, 0,472, покрытие 70,5%, точность 95,0%. При 0,70 стоимость 0,494, покрытие 60,1%, точность 96,8%. При 0,80 стоимость 0,556, покрытие 48,7%, точность 98,2%. При 0,90 стоимость 0,673, покрытие 33,7%, точность 99,4%.
Минимум стоимости находится не там, где максимум точности. Это ровно тот момент, который обычно теряется в презентациях про «наша модель точна на 99%»: последние четыре пункта точности покупаются ценой двух третей автоматизации и роста расходов на 43% относительно оптимума.
Отдельно авторы проверяют, что выбор политики делается на калибровке и замораживается до теста. Это звучит как формальность, но именно здесь живёт большинство провалов внедрения: порог, подобранный по тесту, всегда выглядит лучше, чем он есть.
Шестнадцать сеток стоимостей
Основной набор (0, 1, 5) это иллюстрация, а не измеренная экономика конкретной компании. Поэтому есть post-hoc анализ: c_triage пробегает значения 0,5, 1, 1,5 и 2, c_wrong пробегает 2, 5, 10 и 20, c_ok зафиксирован на нуле. Шестнадцать комбинаций, и в четырнадцати из них замороженная политика, выбранная на калибровке, обходит и стратегию «маршрутизировать всё», и стратегию «отдавать человеку всё».
Единственное исключение это пара (1,5, 2), где относительный выигрыш −0,2%, то есть всегда-маршрутизация дешевле на волосок. Логика прозрачна: когда цена ручного разбора почти равна цене ошибки, отказ теряет смысл. Практический вывод не в том, что абстенция всегда права, а в том, что она права почти всегда, кроме режима, где ошибаться дёшево. И этот режим надо определять по своим деньгам, а не по чужим.
Абстенция не лечит слабый классификатор
Самый важный вывод работы сформулирован в обсуждении: abstention это ограждение, а не исправление. Порог, выбранный на калибровке, снижает стоимость у всех четырёх обученных классификаторов. У промптнутых LLM он ведёт себя иначе: при аналитическом пороге безубыточности 0,80 семь из восьми конфигураций отдают человеку все тикеты без исключения, а Haiku few-shot маршрутизирует 19 тикетов из 1000.
Это не сломанный эксперимент. Это и есть честный результат проверки готовности: если модель не умеет отделять правильные ответы от неправильных, лучшее, что можно сделать с её уверенностью, это не пользоваться ей для автоматизации. Отказ здесь защищает от превращения слабого сигнала в дорогие ошибки, но не поднимает качество самого классификатора ни на пункт.
Проверка на почти-дубли
Отдельного уважения заслуживает проверка, которую делают редко. Лексические модели на коротких текстах легко выигрывают за счёт почти одинаковых тикетов в train и test: шаблонные заявки вроде «прошу доступ к папке X» отличаются одним словом. Авторы считают near-twins по косинусной близости TF-IDF не ниже 0,90 и находят, что 3 986 тикетов из 47 837, то есть 8,3%, имеют такого двойника.
Дальше они строят group-disjoint разбиение, в котором связанные компоненты не пересекаются между train и test, и пересчитывают логистическую регрессию: точность 0,847 превращается в 0,850. То есть разрыв с LLM не объясняется утечкой похожих примеров. Это тот тип проверки, который стоит копировать в своих внутренних бенчмарках, особенно когда классическая модель неожиданно обходит нейросетевую.
Что с этим делать в продакшене
Первое действие не техническое, а бухгалтерское: оценить свои c_triage и c_wrong, а не брать (0, 1, 5) из статьи. Пока этих чисел нет, любой разговор о пороге это разговор о вкусах.
Второе: зарезервировать калибровочный набор, отдельный от теста, выбрать порог на нём и заморозить. Третье: держать предиктор, оценку уверенности, сигнал отказа и расчёт стоимости раздельными, чтобы каждый слой можно было аудировать. Четвёртое: мониторить дрейф, потому что распределение тикетов меняется вместе с инфраструктурой, и порог, оптимальный в январе, к июлю может стоить дороже ручного разбора.
И главное: абстенция это слой делегирования, который ставится поверх любого классификатора, включая файнтюненный энкодер. Если у вас есть размеченные тикеты, DistilBERT с порогом 0,90 даёт стоимость 0,396 при покрытии около половины трафика, и это лучший результат во всей работе. LLM в этой схеме разумно оставить там, где нужна не маршрутизация, а разбор содержания: суммаризация переписки, черновик ответа, поиск похожих инцидентов.
Часто задаваемые вопросы
Чем cost-aware abstention отличается от обычного отказа отвечать?
Обычный отказ это свойство модели, которая говорит «не знаю». Здесь отказ это решение системы, принимаемое по цене ошибки: тот же тикет маршрутизируется автоматически при одной экономике и уходит человеку при другой. Модель не меняется, меняется порог, и он выводится из ваших затрат, а не из уверенности модели.
Почему LLM проиграли TF-IDF, если они мощнее?
Потому что сравнение неравное по информации, и авторы это признают. Обученные модели видели 33 486 размеченных примеров и выучили таксономию, а LLM получили названия классов и максимум 24 примера без определений. Плюс технические потери: преамбулы вместо JSON, обрезка по лимиту токенов, ошибки парсинга до 15,1%.
Подход работает только для IT-тикетов?
Нет, схема общая для любой классификации с асимметричной ценой ошибки: модерация запросов к LLM, разметка данных, медицинская сортировка, антифрод. Условия два: нужен размеченный калибровочный набор и явная ценовая модель. Без второго числа из статьи не переносятся, потому что порог целиком определяется соотношением цен.
Итог
Главный результат работы не в том, что TF-IDF обошёл GPT. Он в том, что вопрос «какая модель точнее» оказался второстепенным по отношению к вопросу «когда мы вообще разрешаем модели решать». Абстенция на 47 837 тикетах снижает стоимость на 38,1% для логистической регрессии, на 36,7% для линейного SVM, на 37,3% для случайного леса и на 35,5% для DistilBERT, и все четыре выигрывают от одного и того же приёма: замороженного порога, выбранного на калибровке.
Если вы прямо сейчас выбираете модель для внутренней автоматизации, посчитайте не среднюю точность, а цену одного неверного решения и цену одного ручного разбора. Дальше арифметика простая: если ошибка дороже разбора в пять раз, модели можно доверять ответ только при уверенности выше 0,80. Всё, что ниже, дешевле отдать человеку.