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

Разметка снова стоит денег

В уроке о классификации мы позволили себе роскошь: 4000 размеченных SMS достались нам бесплатно, вместе с коллекцией. В жизни так не бывает. Открывая фильтр для нового языка, новой платформы или нового вида мошенничества, вы начинаете с горы неразмеченных сообщений и пустого столбца ответов; каждую метку покупают у разметчика за деньги и время, и урок о режимах уже оценивал эту статью бюджета как главную.

Сегодняшний вопрос практичен до копейки: как получить лучший фильтр за фиксированный бюджет меток? Полигоном будет та же коллекция SMS Spam и та же восьмипризнаковая логистическая модель — но мы притворимся, что меток нет, и будем покупать их по одной. Правила игры: пул из 4000 сообщений без меток, отложенные 1574 для честного измерения, качество меряем F-мерой из урока 07, все запуски детерминированы и воспроизводятся скриптом репозитория.

Кривая обучения: сколько метка приносит

Начнём с простейшей стратегии: метим случайные сообщения и смотрим, как растёт качество. Вот настоящая кривая для нашей модели:

Меток25501002005004000
F-мера0,8750,8950,9080,9150,9400,930

Два наблюдения, каждое на вес золота. Первое: уже 25 случайных меток дают F-меру 0,875 — восемь прозрачных признаков настолько сильны, что модели хватает горстки примеров расставить веса по знакам. Второе: отдача убывает стремительно. Первые 25 меток принесли 0,875; следующие 475 — ещё 6,5 пункта; следующие 3500 — ничего, кроме шума вокруг потолка. Кривая обучения — это финансовый отчёт разметки, и читать его надо как инвестору: где-то на этой кривой каждая следующая метка начинает стоить дороже, чем приносит.

ценность меткиΔFΔn  n растёт  0,\text{ценность метки} \approx \frac{\Delta F}{\Delta n} \;\xrightarrow[n\ \text{растёт}]{}\;0 ,

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

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

nразумное10d,n_{\text{разумное}} \sim 10\,d ,

для d=8d=8 — около сотни меток, что кривая и подтверждает. У нейросети с миллионом весов та же прикидка требует уже не сотен, а такого объёма, при котором слово «бюджет» меняет магнитуду; поэтому весь арсенал этого урока — не факультатив, а условие выживания больших моделей, и урок о переобучении покажет, что случается с моделями, которым примеров на параметр не хватило.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Ф-мера фильтра по числу случайных меток: резкий рост до пары сотен, насыщение около 0,94 и шумовое плато до четырёх тысяч
Рис. 10.1. Кривая обучения: убывающая отдача каждой метки

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

Метить трудное: активное обучение

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

x=argminxпулp^(x)0,5,x^\star =\arg\min_{x\in\text{пул}} \bigl|\hat p(x)-0{,}5\bigr| ,

купи для них метки, дообучись и повтори. Мы прогнали этот цикл на нашем пуле: старт с 25 случайных меток, затем по 25 самых сомнительных за раунд. Результат стоит таблицы:

Меток150175225275
F-мера (активно)0,9290,9330,9420,942

Потолок 0,94, на который случайной разметке нужно 500 меток, активная стратегия берёт за 225 — вдвое дешевле. Для бюджета в сотни тысяч примеров «вдвое» означает месяцы работы разметчиков; в медицинских задачах, где метка — час времени врача, активное обучение часто вообще единственный способ довести проект до конца.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Две кривые Ф-меры по бюджету меток: активная стратегия растёт быстрее и достигает потолка около 225 меток, случайная догоняет только к 500
Рис. 10.2. Активная разметка против случайной: тот же потолок вдвое дешевле

Обе кривые — настоящие прогоны на SMS-пуле, одинаковый старт с 25 меток. Активная стратегия (сомнительные сообщения) обгоняет случайную на всём протяжении и упирается в тот же потолок признаков вдвое раньше. Обратите внимание и на её хвост: после 300 меток кривая слегка проседает — об этой ложке дёгтя следующий раздел.

Ложка дёгтя видна на хвосте кривой: после трёхсот меток качество активной стратегии слегка проседает, к 0,92. Механизм знаком по уроку о данных: выборка размеченного перестала быть случайной. Мы скупили все пограничные сообщения, и обучающее множество превратилось в коллекцию странностей — модель, которая учится только на трудном, начинает забывать, как выглядит лёгкое. Практики смешивают: львиную долю бюджета — по неуверенности, малую — случайно, как разведку из урока о режимах; случайная добавка заодно даёт честную оценку качества, которую перекошенная выборка дать уже не может. Пропорция смеси — та же дилемма разведки и использования, что у ε\varepsilon-жадности: доля случайного — это ε\varepsilon разметки, и убывающее расписание здесь работает так же, как работало у бандитов.

Шумный разметчик: правда с процентом брака

Пока мы считали купленную метку истиной, а это тоже идеализация: разметчики устают, скучают и ошибаются. Урок о данных мерил их согласие каппой; здесь важно другое следствие — шум меток опускает достижимый потолок. Если разметчик путает класс с вероятностью ε\varepsilon, то даже идеальная модель, всегда отвечающая истинно, будет «ошибаться» против его меток в ε\varepsilon случаев, а модель, обученная на таких метках, целится в сдвинутую цель:

Pr(метка=1x)=(1ε)p(x)+ε(1p(x)),\Pr(\text{метка}=1\mid x) =(1-\varepsilon)\,p(x) +\varepsilon\,(1-p(x)) ,

вероятности сжимаются к половине, уверенных областей становится меньше, и границы плывут. Противоядия покупаются тем же бюджетом: двойная разметка спорных примеров, третий голос при расхождении, контрольные вопросы с известным ответом внутри потока заданий.

::::

Чем мерить сомнение

Расстояние до половины — не единственный термометр неуверенности, и в многоклассовых задачах он вовсе не определён. Универсальнее энтропия предсказанного распределения:

H(x)=kp^k(x)lnp^k(x),H(x) =-\sum_{k}\hat p_k(x)\,\ln \hat p_k(x) ,

она максимальна, когда классы равновероятны, и нулевая при полной уверенности. Между ними живёт зазор двух лидеров,

m(x)=p^(1)(x)p^(2)(x),m(x)=\hat p_{(1)}(x)-\hat p_{(2)}(x) ,

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

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

Все термометры объединяет один принцип, и он важнее формул: информативен пример, о котором текущее знание говорит меньше всего. Экономика меток — это покупка информации, и прибор для измерения «сколько информации в примере» — первое, что стоит выбрать осознанно.

Довериться себе: парадокс self-training

Вторая идея экономии знакома по уроку о режимах: псевдометки. Обучимся на сотне честных меток, разметим собственными уверенными предсказаниями всё, что p^>0,95\hat p>0{,}95 или p^<0,02\hat p<0{,}02, и дообучимся на раздутом наборе. На нашем пуле так удаётся разметить 3308 сообщений из 3900, и точность псевдометок великолепна: 99,4% верных. А теперь результат: F-мера выросла с 0,908 до 0,913. Полпункта.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Гистограмма предсказанных вероятностей неразмеченного пула: высокие столбцы у нуля и единицы закрашены как псевдоразмеченные, пустая середина остаётся без меток
Рис. 10.3. Куда легли псевдометки: края шкалы полны, граница пуста

Предсказания стомерочной модели на 3900 неразмеченных сообщениях. Закрашенные края — то, что self-training пометил: почти весь пул, почти без ошибок. Пустая середина — пограничная зона, где модель ошибается и где метки нужны, — осталась нетронутой: уверенность не роет там, где сомневается. Сравните с прицелом активного обучения — он бьёт ровно в эту середину.

Разгадка парадокса — зеркало активного обучения. Псевдометку получает то, в чём модель уверена, а уверена она в том, что уже выучила: длинные сообщения с цифрами и ссылками, короткие чистые реплики. Три тысячи почти безошибочных меток легли ровно туда, где модель и так не ошибалась; пограничная зона, где живут её ошибки, осталась неразмеченной — самоуверенность не роет там, где сомневается. Self-training размечает лёгкое, активное обучение — трудное; поэтому первый почти бесплатен и почти бесполезен, а второе дорого и эффективно. В задачах, где модель сильна, а признаки богаты (современные нейросети на изображениях), псевдометки приносят больше; но механизм «уверенность метит уже выученное» никуда не девается, и ждать от self-training чуда на слабой модели — типичная ошибка планирования.

Сколько стоит честный срез

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

se(recall^)=recall^(1recall^)nспам.\operatorname{se}(\widehat{\mathrm{recall}}) =\sqrt{\frac{\widehat{\mathrm{recall}}\,(1-\widehat{\mathrm{recall}})} {n_{\text{спам}}}} .

При доле спама 13,4% срез в 200 сообщений содержит около 27 спамов, и se полноты при уровне 0,9 составляет почти шесть пунктов: интервал ±12\pm 12 — таким прибором не отличить модель на 0,88 от модели на 0,94, то есть весь эффект активного обучения утонет в погрешности измерителя. Для сравнения стратегий из этого урока нужен срез в несколько сотен спамов — тысячи сообщений, и это метки, потраченные не на обучение вовсе. Оценочный срез — самая недооценённая статья бюджета: команды охотно платят за то, что делает модель лучше, и забывают платить за то, что позволяет это увидеть.

Писать правила вместо меток: слабая супервизия

Третья идея звучит совсем заманчиво: зачем платить разметчикам, если эксперт может записать своё знание правилами? «Есть free или win — спам», «есть ссылка — спам», «десять и больше цифр — спам», «короткое без цифр — переписка». Прогоним правила по пулу, разрешим конфликты голосованием — и получим 2026 «бесплатных» меток с точностью 94,7%. Числа выглядят триумфом дешевизны.

Обучим на них модель и измерим честно: F-мера 0,672. Хуже, чем 25 честных случайных меток. Провал при такой точности меток кажется невозможным, пока не спросишь, кого правила пометили. Правила покрывают только то, о чём эксперт вспомнил: спам-правила — три ярких шаблона, правило переписки — один узкий («короткое без цифр»). Длинная честная переписка, спам без ссылок, всё пограничное — в наборе просто отсутствует. Модель выучила мир, где переписка бывает только короткой, и на настоящем потоке рушится. Смещение покрытия убивает качество даже при почти безошибочных метках — это рамка выборки из урока о статистике, собственными руками встроенная в обучение.

Лечится это как в больших системах слабой супервизии: правил должны быть десятки, с перекрытиями и конфликтами; их точности и покрытия оценивают по маленькому честному срезу; итоговые метки взвешивают, а не голосуют поровну; и обязательно добавляют случайно размеченный слой. У каждого правила два паспорта — точность и покрытие,

acc(r)=Pr(правило правосработало),cov(r)=Pr(сработало),\mathrm{acc}(r)=\Pr(\text{правило право}\mid\text{сработало}), \qquad \mathrm{cov}(r)=\Pr(\text{сработало}) ,

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

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Сравнение: точность меток от правил почти 95 процентов, но покрытые ими сообщения занимают лишь смещённую часть пространства, и Ф-мера обученной модели проваливается до 0,672 против 0,875 на 25 честных метках
Рис. 10.4. Точные метки, смещённое покрытие: почему правила проиграли горстке честных меток

Слева — чем покрыли пул четыре экспертных правила: только яркие углы, пограничная зона и «обычная длинная переписка» не помечены вовсе. Справа — итог: модель, обученная на 2026 метках с точностью 94,7%, проигрывает модели на 25 случайных метках. Кривая обучения из начала урока измеряет ценность случайных меток; смещённые метки живут по другим, худшим законам.

Когда неразмеченное вредит

У бесплатной горы неразмеченного есть скрытое условие годности: она должна быть из того же мира, что и будущий поток. Долейте в пул SMS переписку с форума или письма электронной почты — предположение гладкости продолжит работать, но уже вдоль чужих направлений: модель станет устойчивой к вариациям форумного стиля, а согласованность закрепит инварианты не того распределения. Ещё коварнее сдвиг доли классов: если в неразмеченной горе спама втрое больше, чем в жизни, самообучение и согласованность потянут приоры модели к чужой пропорции, и порог из урока 07 уедет вместе с ними.

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

Согласованность: неразмеченное как тренажёр устойчивости

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

L=Lразм+λxнеразм(p^(x)p^(x~))2,L =L_{\text{разм}} +\lambda \sum_{x\in\text{неразм}} \bigl( \hat p(x)-\hat p(\tilde x) \bigr)^{2} ,

где x~\tilde x — искажённая копия.

Первый член учит на честных метках, второй разглаживает предсказания вдоль осмысленных искажений — это предположение гладкости из урока о режимах, превращённое из веры в слагаемое функции потерь. Согласованность — рабочая лошадь современного полуобучения: большие системы распознавания изображений и речи выжимают из неё львиную долю пользы неразмеченных гор. Заметьте, чем она отличается от self-training: та копировала ответы модели, эта навязывает лишь их равенство — куда более скромное и потому более надёжное требование.

Лаборатория бюджета

Один бюджет, четыре стратегии: настоящие кривые на SMS-пуле

Загружается живая иллюстрация…

Порядок опытов. Двигайте бюджет и сравнивайте случайную и активную кривые: найдите бюджет, при котором разрыв максимален, и бюджет, после которого обе упираются в потолок признаков. Включите смесь «активная + 20% случайных» и присмотритесь к хвосту: просадка мягче, но шум у потолка никуда не девается — вблизи предела признаков различия стратегий тонут в случайности, и это тоже честный вывод. Затем сравните столбики стратегий при бюджете 100: псевдометки почти не поднимают базу, правила проваливаются ниже неё — два способа потратить ноль рублей с очень разным результатом. Напоследок задержитесь на числе «цена потолка»: бюджет, при котором каждая стратегия впервые касается своих 0,94, — это и есть главная сводка урока одним числом, и разброс этого числа между стратегиями — весь смысл экономики меток.

Когда меток нет совсем: снова награда

Есть задачи, где метку не купить ни за какие деньги, потому что правильный ответ не знает никто: какое расписание рассылки лучше удержит подписчиков, какой из двух заголовков соберёт больше прочтений. Здесь сигналом становится награда за попытку — режим подкрепления из урока 06, и его простейший случай, многорукий бандит: несколько вариантов действия, у каждого свой неизвестный средний выигрыш, и каждая попытка — одновременно и заработок, и разведка.

ε\varepsilon-жадность из урока 06 разведывала вслепую — случайным вариантом с постоянной вероятностью. Можно умнее: пусть неуверенность сама решает, что пробовать. Правило верхней доверительной границы (UCB) выбирает вариант с наибольшим оптимистичным потенциалом:

at=argmaxa[μ^a+2lntna],a_t =\arg\max_{a} \Bigl[ \hat\mu_a +\sqrt{\frac{2\ln t}{n_a}} \Bigr] ,

где μ^a\hat\mu_a — средний выигрыш варианта по прошлым попыткам, а nan_a — сколько раз его пробовали.

::::

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Симуляция накопленного сожаления двух стратегий на четырёх вариантах: у эпсилон-жадности прямая линия, у UCB кривая быстро выполаживается
Рис. 10.5. Сожаление растёт по-разному: прямая ε-жадности против логарифма UCB

Симуляция на четырёх вариантах с близкими выигрышами, усреднение по запускам. ε\varepsilon-жадность с постоянной разведкой платит фиксированный налог на каждом шаге — её сожаление прямая. UCB сворачивает разведку по мере уверенности, и кривая выполаживается: почти все поздние попытки уходят лучшему варианту. На длинных горизонтах между стратегиями — пропасть.

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

Конвейер, который кормит себя сам

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

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Схема цикла: поток сообщений, фильтр, зона отказа, разметчик, хранилище меток, дообучение и обратно в фильтр; отдельная случайная ветка на честный срез
Рис. 10.6. Замкнутый конвейер разметки вокруг живого фильтра

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

Сборка: портфель сигналов

Мало разметки — это не бедность, а задача управления портфелем. Кривая обучения оценивает ценность случайной метки и точку, где разметку пора останавливать. Активное обучение покупает трудные примеры и достигает потолка вдвое дешевле — ценой перекоса выборки, который лечится случайной добавкой и отдельным честным срезом для оценки. Self-training раздувает набор почти безошибочными метками лёгких примеров и почти не двигает качество: информация живёт в несогласии, а не в подтверждении. Слабая супервизия меняет разметчиков на правила и проигрывает не точностью, а покрытием: рамка, которую забыли, бьёт больнее ошибки, которую допустили. А когда метки не существует в природе, сигналом становится награда, и оптимизм UCB покупает информацию тем же расчётом, что активное обучение — метку. Бюджет один; искусство — в портфеле. И последняя рифма курса: экономика меток — это статистика урока 05, повёрнутая из измерения в управление. Там мы спрашивали, сколько стоит узнать долю с заданной точностью; здесь — сколько стоит выучить границу с заданным качеством. Ответ в обоих случаях один: дороже всего обходятся не данные, а незнание того, какие данные нужны.

Задачи