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

29 / 37 · Задачи NLP

Классификация текстов

Задача, которая прошла через весь курс, в одном месте: постановка, метрики, все результаты на AG News и SST-2 от TF-IDF до дообученных трансформеров вместе с протоколом каждого, современные варианты (энкодер с выходным слоем или языковая модель с ограниченным выходом), что на самом деле дало предобучение и ошибки оценки, характерные именно для классификации.

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

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

Обозначения. Входной текст xx, метка y∈{1,…,K}y \in \{1, \dots, K\}; модель выдаёт p(y∣x)p(y \mid x) и предсказывает y^=arg⁡max⁡yp(y∣x)\hat y = \arg\max_y p(y \mid x).

Постановка задачи#

Отобразить текст в одну из KK заданных меток. Варианты различаются структурой выхода:

ВариантВыходФункция потерьПримеры
Бинарнаяодна из двухбинарная кросс-энтропиятональность (SST-2), спам
Многоклассоваяодна из KKкросс-энтропия с softmaxтема (AG News, K=4K = 4), намерение
Многометочнаялюбое подмножество KKKK бинарных кросс-энтропийтеги, виды токсичности
Порядковаяодна из KK упорядоченныхкросс-энтропия или регрессиязвёздные оценки

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

Метрики#

Из заметки об оценке: доля правильных ответов — для сбалансированных классов с одинаковой ценой ошибок; иначе — точность, полнота и F1F_1 по классам, с макроусреднением, когда каждый класс одинаково важен. AG News сбалансирован (по 30 000 на класс), а SST-2 почти сбалансирован (44/56), поэтому для обоих наборов приводится доля правильных ответов; промышленный классификатор с важным редким классом так оценивать нельзя.

Результаты по всему курсу#

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

AG News, четыре темы, 120 000 обучающих и 7600 тестовых статей, доля правильных ответов:

МодельОбучаемые параметрыРазмер обученияНа чём оцененоЧто выбрано по оценочному наборуДоля верных
TF-IDF + логистическая регрессия, счётчики слов4×29 3504 \times 29\,350120 000тестничего (фиксированные настройки)0.918
TF-IDF, счётчики 1–3-грамм4×101 2844 \times 101\,284120 000тестничего (фиксированные настройки)0.920
Многослойная CNN, замороженный Word2Vec, d=100d = 10061 тыс.120 000тестничего (последняя из 5 эпох)0.899
TextCNN, замороженный Word2Vec122 тыс.120 000тестничего (последняя из 5 эпох)0.901
TextCNN, обучаемые эмбеддинги2.9 млн120 000тестничего (последняя из 10 эпох)0.911
Энкодер трансформера из 4 блоков с нуля, WordPiece 4 тыс., d=32d = 32158 тыс.120 000тестлучшая из 20 эпох0.906
BERT, zero-shot с пропуском, выходной слой MLM0неттестничего / слово-метка0.456 / 0.613
BERT [CLS] + логистическая регрессия, заморожен4×7684 \times 768120 000тестничего0.902
BERT, дообученный, все слои110 млн108 00012 000, отложенные из обученияничего (3 эпохи)0.949

SST-2, бинарная тональность, GPT-2 small, 50 000 обучающих фраз. Каждый режим оценён на валидационной части из 872 фраз, которая служит тестом, после фиксированного числа шагов, по одному прогону. У этих строк общий протокол, и их можно сравнивать напрямую в пределах шума 872 примеров: около 0.9 одна стандартная ошибка — примерно 0.010.

РежимОбучаемые параметрыДоля верных
Линейное зондирование1.5 тыс.0.737
Настройка промпта10.8 тыс.0.663
LoRA, r=8r = 8296 тыс.0.899
Полное дообучение124 млн0.890
LP-FT124 млн0.900

Три вывода, каждый настолько сильный, насколько позволяет его протокол. Во-первых, настроенный базовый уровень на счётчиках — сильный классификатор тем: ни одна модель, обученная с нуля на 120 000 статей, не превзошла его на тесте, даже трансформер, чьё число — лучшая из 20 оценок на тесте и потому оптимистично. Во-вторых, единственное число выше 0.92 — 0.949 у дообученного BERT, измеренное на отложенной десятой части обучающей выборки, а не на тесте. Оно указывает в ту же сторону, что и опубликованные результаты о предобучении, но это не сопоставленное сравнение: чтобы говорить о выигрыше в три пункта, дообученный BERT нужно оценить на тех же 7600 тестовых статьях. В-третьих, на SST-2, где у строк общий протокол, режим обучения одной и той же сети на 124 млн параметров даёт разброс в 24 пункта; три лучших режима различаются примерно на пункт, то есть в пределах шума.

Подходы эпохи трансформеров#

Энкодер с выходным слоем классификации. Предобученный энкодер, линейный слой на векторе [CLS] (или на среднем векторов токенов), дообученный с маленьким шагом обучения или с LoRA. Это выбор по умолчанию для задачи с размеченными данными: один прямой проход на документ, без декодирования, наибольшая точность на параметр и модель, которую дёшево обслуживать и оценивать. LoRA часто подходит близко к полному дообучению. В этом курсе так вышло для GPT-2 на SST-2 (0.899 против 0.890), а не для энкодера, поэтому выбор — сначала вопрос цены, а затем то, что нужно проверить на конкретной задаче и модели.

Языковая модель с ограниченным выходом. Описать классы в промпте и попросить модель-декодер, обученную на инструкциях, назвать метку. Это работает совсем без размеченных данных и конкурирует с дообученными энкодерами только у больших моделей; это стоит порождения на каждый документ; а сырой выход — текст, который нужно разбирать. У задачи разбора есть чистое решение: ограниченное декодирование (constrained decoding) на каждом шаге оставляет только токены, которые ещё могут завершить допустимый выход. Со схемой Literal["Positive", "Negative", "Neutral"] модель не может выдать ничего другого, а со схемой JSON выдаёт разбираемый объект с типизированными полями; заметка о RAG использует тот же механизм для извлечения структурированных данных. Без ограничений модель «классифицирует» с пояснениями, оговорками и форматированием, которые на какой-то доле входов ломают разбор.

Рисунок

Ограниченное декодирование для классификации

Распределение следующего токена до и после маскиThe 0.30, Positive 0.24, I 0.14, Negative 0.10, Sure 0.08, Neutral 0.06. После маски: Positive 0.60, Negative 0.25, Neutral 0.15.схема: Literal["Positive", "Negative", "Neutral"]распределение моделиThe0.30Positive0.24I0.14Negative0.10Sure0.08Neutral0.06остальные токены: 0.08после маски схемыTheзапрещеноPositive0.60IзапрещеноNegative0.25SureзапрещеноNeutral0.15Распределение следующего токена до и после маскиThe 0.30, Positive 0.24, I 0.14, Negative 0.10, Sure 0.08, Neutral 0.06. После маски: Positive 0.60, Negative 0.25, Neutral 0.15.схема: Literal["Positive", "Negative", "Neutral"]распределение моделиThe0.30Positive0.24I0.14Negative0.10Sure0.08Neutral0.06остальные токены: 0.08после маски схемыTheзапрещеноPositive0.60IзапрещеноNegative0.25SureзапрещеноNeutral0.15
Первый шаг порождения, когда модель с инструкциями просят дать метку тональности. Слева — её распределение следующего токена: самый вероятный токен начинает вежливую фразу, а не метку. Справа — то же распределение после маски, которую строит схема: токены, не способные начать допустимый выход, получают нулевую вероятность, а оставшиеся три перенормируются (0.24 / 0.40 = 0.60 и так далее). Модель больше не может выдать ничего, кроме одной из трёх меток. Вероятности условные, метки для наглядности считаются одним токеном; настоящая метка может занимать несколько токенов, и тогда маска пересчитывается на каждом шаге.
Дообученный энкодерДекодер с промптом
Размеченные данныеНужны (от сотен до тысяч)Не нужны или несколько примеров в промпте
Цена на документОдин проход энкодераОдно порождение
ТочностьНаибольшая при наличии данныхЗависит от размера модели и промпта
ВыходЛогитыТекст; его нужно ограничить
Смена набора метокПереобучить выходной слойПоправить промпт
ОбъясненияНетМожно попросить (не обязательно правдивые)

Что улучшилось, а что нет#

При тех же метках дообученный BERT получил 0.95 на отложенной части обучающей выборки AG News против 0.92 у TF-IDF на тесте; чтобы назвать величину выигрыша, нужно сравнение на одних и тех же тестовых статьях. Выигрыш больше, когда меток мало: с несколькими сотнями примеров модели на счётчиках и сети, обученные с нуля, разваливаются, а дообученные энкодеры остаются пригодными (Howard and Ruder, 2018). Что не изменилось: задаче по-прежнему нужен набор меток, соответствующий данным (эксперимент zero-shot потерял класс из-за названия метки), метрики по-прежнему скрывают провалы на уровне классов, если о них не спросить, а модель с 95% по-прежнему ошибается на одном документе из 20, что для одних приложений слишком много, а для других неважно.

Ловушки оценки, характерные для классификации#

  • Слепота к классам. Общие 0.456 скрывали 0.03 на одном классе. Всегда печатать матрицу ошибок.
  • Обрезка. Энкодеры обрезают вход до 128–512 токенов; метка, зависящая от конца длинного документа, недостижима. Прежде чем выбирать предел, проверить, где находится сигнал.
  • Утечка метки через артефакты. Метка источника, URL или дата в тексте могут предсказывать метку без чтения текста; проба с удалением одного токена из заметки о CNN находит такие короткие пути.
  • Выбор порога. Для бинарных и многометочных задач доля правильных ответов при пороге 0.5 — одна точка на кривой точность–полнота; приводить кривую или порог, выбранный на валидации.
  • Чувствительность к промпту. Доля правильных ответов классификатора с промптом меняется от формулировки, названий меток и порядка примеров; оценивать нужно тот промпт, который будет использоваться, с тем сэмплером, с каким он будет работать.
  • Загрязнение теста. Предобученная модель могла видеть бенчмарк; модель с промптом могла видеть его вместе с метками.

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

Классификатор отвечает на один фиксированный вопрос. Сменить вопрос — значит новые метки и новый выходной слой или новый промпт и новая оценка. Задачам, ответ в которых — фрагмент, набор сущностей или предложение, нужны модели из следующих заметок, а задачам, ответ в которых зависит от информации вне текста, нужен поиск, который строит раздел о системах на LLM.

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

  • Классификация отображает текст в одну из KK меток; бинарный, многоклассовый и многометочный варианты различаются выходным слоем и функцией потерь.
  • AG News: TF-IDF 0.918 на тесте, дообученный BERT 0.949 на отложенной десятой части обучающей выборки — это не сопоставленное сравнение; ничто, обученное с нуля, не превзошло базовый уровень на счётчиках на тесте. Рядом с каждым числом указывать оценочное разбиение и то, что по нему выбиралось. SST-2: режим обучения одной модели даёт от 0.663 до 0.900.
  • С метками — дообучать энкодер (полностью или через LoRA). Без меток — декодер с промптом и ограниченным выходом.
  • Приводить метрики по классам, проверять обрезку и артефакты и оценивать именно тот промпт и сэмплер, которые будут использоваться.

Ноутбук#

Результаты в таблицах взяты из ноутбуков заметок, ссылки на которые там стоят, каждое число — из прогона, сохранённого в курсе; число дообученного BERT сохранено более ранней версией его ячейки, как объясняет заметка о переносе обучения. Пример ограниченного выхода: week09_RAG.ipynb, ячейки 94–99 (номера ячеек считают все ячейки, включая текстовые, начиная с 1): модель на 3 млрд параметров, обученную на инструкциях, сначала просят оценить отзыв по шкале 1–5 свободным текстом, а затем ограничивают через outlines до Literal из трёх тональностей и до pydantic-схемы Rating с целым полем в пределах [1,5][1, 5]. Сохранённые выходы этих ячеек пусты; механизм описан в примерах самой библиотеки.

Дальше#

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

Литература#