Содержание курса 04 / 37

04 / 37 · Основы работы с текстом

Корпусы и оценка качества

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

На этой странице 11

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

Обозначения. Размеченный корпус — множество пар (xi,yi)(x_i, y_i). Классификатор выдаёт y^i\hat y_i. Для класса kk величина TPk\mathrm{TP}_k считает примеры с y=ky = k и y^=k\hat y = k, FPk\mathrm{FP}_k — примеры с y≠ky \ne k и y^=k\hat y = k, а FNk\mathrm{FN}_k — примеры с y=ky = k и y^≠k\hat y \ne k.

Три части и назначение каждой#

Модель обучается на обучающей выборке. Каждый выбор, который не делается градиентным спуском (шаг обучения, число эпох, размер словаря, формулировка промпта, решение остановиться), делается по валидационной выборке. Тестовая выборка используется один раз, в конце, чтобы получить число для отчёта.

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

Рисунок

Протокол оценки и пути утечки

Части корпуса и их назначениеТри части одного корпуса в верхнем ряду: обучение, валидация, тест. Обучающая часть обучает веса модели, валидационная выбирает настройки, которые задаются модели, тестовая один раз даёт итоговое число для итоговой модели. Красные пунктирные стрелки — утечки: от теста к обучающей части (дубликаты и общая предобработка) и от теста к настройкам (подбор по тесту).обучениевалидациятестмодельвесанастройкишаг, эпохи, словарьитоговое числосчитается один разобучитьвыбратьодин раззадатьитоговая модельутечка: дубликаты, предобработка по всем частямподбор по тестуЧасти корпуса и их назначениеТри части одного корпуса в верхнем ряду: обучение, валидация, тест. Обучающая часть обучает веса модели, валидационная выбирает настройки, которые задаются модели, тестовая один раз даёт итоговое число для итоговой модели. Красные пунктирные стрелки — утечки: от теста к обучающей части (дубликаты и общая предобработка) и от теста к настройкам (подбор по тесту).обучениевалидациятестмодельвесанастройкишаг, эпохиитоговоечислообучитьвыбратьодин разитоговая модельутечка: дубликаты, общая предобработкапо тесту
Протокол этой заметки. У каждой части одного корпуса одна задача: обучающая часть обучает веса, валидационная выбирает всё, что не обучается (шаг обучения, число эпох, словарь, момент остановки), а тестовая используется один раз — итоговой моделью, чтобы получить число для отчёта. Красные пунктирные стрелки — утечки, из-за которых это число выходит оптимистичным: одни и те же примеры или общий шаг предобработки (токенизатор, словарь TF-IDF, векторы слов) у тестовых и обучающих данных и решения, принятые по результатам на тесте. Ещё одна утечка — бенчмарк внутри корпуса для предобучения — разобрана в заметке об оценке LLM.

Наборы данных этого курса следуют этому соглашению, насколько позволяют их авторы:

КорпусОбучениеВалидацияТестГде используется
AG News (4 темы)120 000—7600классификация
Multi30k (De→En)29 00010141000перевод
SST-2 (тональность)67 3498721821 (метки скрыты)дообучение
CoNLL-2003 (NER)14 041 предложение32503453NER
SQuAD 1.1 (QA)87 59910 570—ответы на вопросы

У двух из них тестовых меток нет или они скрыты, поэтому их результаты приводятся на валидационной выборке; это честно, пока на ней ничего не настраивается. AG News поставляется без валидационной части. Большинство экспериментов с классификацией в этом курсе приводят долю правильных ответов на тесте после фиксированного числа эпох без всякого отбора; это честно только потому, что на тесте ничего не настраивалось. Дообучение BERT в заметке о переносе обучения, напротив, отрезает 10% обучающей выборки под валидационную и приводит результат на ней.

Утечка: когда разбиение не разделяет#

Утечка (leakage) — любой путь, по которому информация об оценочных примерах попадает к модели или к человеку, который её настраивает. В текстах часто встречаются четыре формы:

  • Дубликаты в разных частях. Веб-корпусы и коллекции вопросов содержат почти-дубликаты. Если один и тот же вопрос есть и в обучающей, и в тестовой выборке, модель получает награду за запоминание. Удалять дубликаты нужно до разбиения и по нечёткому критерию, а не по точному совпадению строк.
  • Предобработка, обученная на всём. Токенизатор, словарь TF-IDF или модель векторов слов, обученные на обучающей и тестовой выборках вместе, уже видели тестовые слова. Заметка о TF-IDF обучает векторизатор только на обучающих текстах, а затем преобразует обе выборки. То же правило действует для модели Word2Vec в заметке о CNN: она обучена на обучающих текстах.
  • Временна́я утечка. Если задача — предсказывать что-то о будущих текстах, случайное разбиение позволяет модели учиться на документах более поздних, чем те, на которых её проверяют. Разбивать нужно по времени.
  • Настройка по тесту. Запускать тест после каждого изменения и оставлять лучший результат — утечка через исследователя. Именно для того, чтобы её избежать, существует валидационная выборка.

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

Доля правильных ответов и когда она обманывает#

Для классификатора очевидное число — доля правильных ответов (accuracy):

Acc=1N∑i=1N1[y^i=yi].\mathrm{Acc} = \frac{1}{N}\sum_{i=1}^N \mathbb 1[\hat y_i = y_i].

Это правильное число, когда классы сбалансированы и все ошибки стоят одинаково. В AG News по 30 000 обучающих примеров на класс, поэтому во всех экспериментах на нём используется доля правильных ответов. SST-2 — 44% отрицательных и 56% положительных примеров, достаточно близко к балансу.

Доля правильных ответов не работает, когда один класс доминирует. В корпусе NER большинство токенов помечены O (не сущность), поэтому модель, которая везде предсказывает O, в большинстве случаев права и бесполезна. Кроме того, это число скрывает, какой класс проваливается. Zero-shot-классификатор в заметке о переносе обучения показывает 45.6% правильных ответов на четырёх темах AG News — похоже на слабую, но работающую модель, пока не разбить долю правильных ответов по классам: 96% для Business, 51% для Sports, 32% для Sci/Tech и 3% для World. Класс World модель не выучила вовсе: почти все его примеры она относит к другим меткам. Одно число скрыло полный провал на четверти данных.

Точность, полнота и F1#

Исправление — считать ошибки по каждому классу и в двух направлениях. Сколько из примеров, которым модель приписала kk, действительно относятся к kk (точность, precision), и сколько из примеров, действительно относящихся к kk, модель нашла (полнота, recall)?

Pk=TPkTPk+FPk,Rk=TPkTPk+FNk.P_k = \frac{\mathrm{TP}_k}{\mathrm{TP}_k + \mathrm{FP}_k}, \qquad R_k = \frac{\mathrm{TP}_k}{\mathrm{TP}_k + \mathrm{FN}_k}.

Каждую из них тривиально сделать идеальной за счёт другой: если предсказывать kk для всего, полнота равна 1, если предсказывать kk только при полной уверенности, точность равна 1. F1-мера (F1 score) — их среднее гармоническое,

F1=2PRP+R=2 TP2 TP+FP+FN,F_1 = \frac{2 P R}{P + R} = \frac{2\,\mathrm{TP}}{2\,\mathrm{TP} + \mathrm{FP} + \mathrm{FN}},

которое близко к меньшей из двух величин: у модели с P=1P = 1 и R=0.1R = 0.1 получается F1≈0.18F_1 \approx 0.18, а не 0.550.55. Именно этого свойства мы и ждём от одного числа; среднее арифметическое вознаграждало бы тривиальные стратегии.

Когда классов несколько, объединить их можно двумя способами. Макроусреднение (macro averaging) считает F1F_1 для каждого класса и усредняет, так что каждый класс весит одинаково независимо от размера. Микроусреднение (micro averaging) сначала суммирует счётчики TP, FP и FN по классам, что даёт каждому примеру одинаковый вес и для классификации с одной меткой совпадает с долей правильных ответов.

Разобранный пример#

Игрушечный классификатор на 100 документах с тремя темами; строки — истинные классы, столбцы — предсказания (матрица ошибок, confusion matrix):

истина \ предсказаниеABCвсего
A505560
B520530
C53210
всего602812100

Доля правильных ответов равна (50+20+2)/100=0.72(50 + 20 + 2)/100 = 0.72. По классам:

КлассTPFPFNPPRRF1F_1
A5010100.8330.8330.833
B208100.7140.6670.690
C21080.1670.2000.182

Макро-F1=(0.833+0.690+0.182)/3=0.568F_1 = (0.833 + 0.690 + 0.182)/3 = 0.568; микро-F1=0.72=F_1 = 0.72 = доля правильных ответов. Маленький класс C почти пропущен, доля правильных ответов этого почти не замечает, а макро-F1F_1 замечает. Какое число приводить, зависит от того, так же ли важен класс C, как класс A; это решение о задаче, а не о статистике.

Фрагменты, а не токены#

В разметке последовательностей единицей оценки должно быть то, что мы хотим извлечь. Системы NER предсказывают метку для каждого токена, но наполовину распознанная сущность (New помечен, York пропущен) не наполовину верна. Поэтому соглашение seqeval, которое используется в заметке о NER, считает точность, полноту и F1F_1 по целым фрагментам-сущностям: фрагмент засчитывается как верно найденный, только если совпадают и его границы, и тип.

Внутренняя и прикладная оценка#

Некоторые модели не являются классификаторами, и доли правильных ответов у них нет. Языковая модель приписывает тексту вероятности, модель эмбеддингов размещает слова в векторном пространстве, поисковая система возвращает ранжированный список. У каждой есть внутренняя (intrinsic) метрика, которая измеряет собственную цель модели:

МодельВнутренняя метрикаЗаметка
Языковая модельПерплексияn-граммы
Векторы словДоля решённых аналогий, корреляция сходствавекторы слов
Поисковая модельPrecision@k, средний обратный ранг (MRR)семантический поиск
Перевод / суммаризацияBLEU / ROUGE относительно эталоновперевод, суммаризация

Внутренняя метрика дёшева и сравнима между моделями, но измеряет не то. Меньшая перплексия не гарантирует лучший сгенерированный текст; лучший результат на аналогиях не гарантирует лучший классификатор поверх этих векторов. Прикладная (downstream) оценка обучает или запускает модель внутри той задачи, которая нас действительно интересует, и измеряет метрику этой задачи. Это и есть важное число, но оно дорогое, привязано к задаче и шумное. Обычная практика — итерировать по внутренним метрикам, а решать по прикладным.

Ловушки, которые переживают правильное разбиение#

  • Различия реализаций. У BLEU несколько реализаций, которые по-разному токенизируют и сглаживают и дают разные числа на одних и тех же выходах. Сравнения корректны только в пределах одной реализации; заметка о переводе фиксирует одну и использует её везде.
  • Усреднение по батчам. Если усреднять долю правильных ответов, посчитанную на батчах разного размера (последний неполный батч или разное число токенов без паддинга), примеры получают разный вес. Нужно суммировать счётчики и делить один раз.
  • Лучшая эпоха по тесту. Это валидация, а не тест.
  • Уверенность без доверительного интервала. На валидационной выборке SST-2 из 872 примеров один пример — это 0.11%; разница в 0.5% между двумя запусками лежит в пределах шума от инициализации и порядка данных. Прежде чем называть разницу реальной, нужно повторить запуски с разными начальными значениями генератора (seed).
  • Насыщение метрики. Когда все модели набирают около 100%, бенчмарк перестаёт их ранжировать.

Ограничения#

Правильная оценка говорит, как модель ведёт себя на данных, полученных так же, как тестовые. Она не говорит, как модель ведёт себя на других данных, на входах, подобранных противником, или на длинном хвосте, которого нет в тестовой выборке из 7600 примеров. Результат на бенчмарке — необходимое условие, а не достаточное; заметка об оценке LLM разбирает, что остаётся, когда модель — система, а не классификатор.

Что нужно запомнить#

  • Обучающая выборка — чтобы обучить, валидационная — чтобы выбрать, тестовая — один раз, чтобы отчитаться. Отбор по выборке смещает оценку на этой выборке.
  • Утечка приходит через дубликаты, предобработку, обученную на тестовых данных, время и человека, который настраивает модель.
  • Доля правильных ответов годится для сбалансированных классов с одинаковой ценой ошибок. Иначе нужно приводить точность, полноту и F1F_1 по классам и осознанно выбирать макро- или микроусреднение.
  • F1F_1 — среднее гармоническое, поэтому оно следует за худшей из точности и полноты.
  • Внутренние метрики — для итераций, прикладные — для решений. Нужно пользоваться одной реализацией метрики, суммировать счётчики до деления и повторять запуски, прежде чем доверять малым разницам.

Ноутбук#

Нужные ячейки разбросаны по ноутбукам, где вводится каждый набор данных. Номера ячеек считают все ячейки, включая текстовые, начиная с 1. Приведённые числа взяты из прогона, сохранённого в курсе; у ячеек, изменённых с тех пор под текущие версии библиотек, сохранённого выхода нет.

  • week01_word_embeddings.ipynb, ячейки 33–38: размеры обучающей и тестовой частей AG News и гистограмма классов; ячейки 44–48: векторизатор TF-IDF обучается только на обучающих текстах, а доля правильных ответов приводится для обеих частей (0.94 на обучающей, 0.918 на тестовой).
  • week06_BERT.ipynb, ячейки 36–39: общая доля правильных ответов zero-shot 0.456 и разбивка по классам, приведённая выше; ячейка 60 отделяет 10% обучающей выборки под валидационную перед дообучением.
  • week07_nlp_tasks.ipynb, ячейки 28–30: точность, полнота и F1F_1 на уровне сущностей с seqeval после удаления меток -100, которыми помечены специальные токены и продолжения слов.
  • week04_lstm_attention_transformer.ipynb, ячейка 36: выбор одной реализации BLEU; ячейка 42 содержит то самое усреднение доли правильных ответов по батчам, о котором говорит ловушка выше, вместе с комментарием, признающим это.

Дальше#

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

Литература#