11 / 37 · Нейросетевые модели последовательностей
CNN для классификации текстов
Одномерная свёртка по последовательности векторов слов находит локальные шаблоны n-грамм, а max-pooling собирает их в вектор фиксированного размера; на AG News результат достигает 0.90–0.91 правильных ответов, ниже базового уровня TF-IDF, а обучаемая таблица эмбеддингов при более длинном обучении закрывает бо́льшую часть разрыва.
На этой странице 10
Классификатор TF-IDF из заметки о мешке слов набирает 0.92 на AG News, игнорируя порядок слов и считая каждый токен не связанным ни с каким другим. Теперь у нас есть эмбеддинги, в которых родственные слова расположены рядом. Вопрос этой заметки — справится ли лучше сеть, которая читает последовательность эмбеддингов и потому видит короткие фразы. На этом наборе данных ответ — нет, и причины поучительнее, чем была бы победа.
Обозначения. Документ — последовательность из токенов с эмбеддингами , собранными в . Батч — тензор формы , где — длина самой длинной последовательности в батче. — число классов, здесь 4.
От последовательности векторов к одному вектору#
Классификатору нужен один вектор на документ. Заметка об эмбеддингах усредняла векторы токенов, что снова выбрасывает порядок. Альтернатива, которую развивает эта заметка, сохраняет локальный порядок: двигаем вдоль последовательности небольшое окно, считаем признак в каждой позиции окна и оставляем самый сильный отклик каждого признака по всему документу.
Батчи из последовательностей разной длины#
Прежде любой модели данные нужно сделать прямоугольными. Статьи имеют разную длину, батч — один тензор, поэтому короткие последовательности дополняются. Когда на входе предобученные векторы, дополнение — нулевой вектор, и батч имеет форму с . После предобработки у половины обучающих статей AG News от 22 до 30 токенов, для которых есть вектор, а у 95% — не больше 39, так что в перемешанном батче из 32 статей обычно около 50, и короткие статьи дополняются двадцатью и более нулевыми векторами.
Одномерная свёртка по времени#
Свёртка с размером ядра и входными каналами хранит для каждого выходного фильтра тензор весов . В позиции она вычисляет
Один фильтр — скалярное произведение шаблона с каждым окном из соседних векторов токенов; он откликается, когда окно похоже на шаблон. При фильтрах выход — тензор (PyTorch ставит каналы вторыми, поэтому вход сначала переставляется в ). Один и тот же фильтр применяется в каждой позиции, поэтому число параметров не зависит от : у фильтра параметров, а у слоя из 100 фильтров размера 3 над 100-мерными входами — .
Поскольку входные векторы — эмбеддинги слов, фильтр размера 3 — выученный детектор шаблона из трёх слов в пространстве эмбеддингов, а поскольку у похожих слов похожие векторы, шаблон, выученный на stock market falls, срабатывает, хоть и слабее, и на share prices drop. Это тот перенос, которого не хватало n-граммной модели, и причина вообще использовать эмбеддинги.
Max-pooling по времени#
После свёртки каждый фильтр дал отклик в каждой позиции. Глобальный max-pooling оставляет для каждого фильтра наибольший отклик в документе:
Результат — вектор фиксированного размера при любом : «встретился ли этот шаблон где-нибудь и насколько сильно». Линейный слой отображает в логитов, а функция потерь — кросс-энтропия из заметки о TF-IDF. На max-pooling же уходит и информация о порядке: вектор после пулинга записывает, что шаблон сработал, но не где, поэтому два документа с одним и тем же набором трёхсловных шаблонов в разном порядке после пулинга неразличимы. Поэтому и считается, что свёрточные классификаторы текстов лучше всего работают на коротких текстах, где «какие фразы встречаются» — почти вся история.
Две архитектуры#
Многослойная CNN. Два свёрточных слоя по 100 фильтров с , ReLU после каждого, глобальный max-pooling, линейный слой на 4 класса. Второй слой видит окна признаков первого слоя, поэтому его рецептивное поле — 5 токенов. Параметры: .
TextCNN (Kim, 2014). Три параллельные свёртки с по 100 фильтров каждая применяются к одному и тому же входу; к каждой применяется max-pooling; три 100-мерных вектора конкатенируются в 300 признаков; затем дропаут (dropout, 0.1) и линейный слой на 4 класса. Ядра разных размеров ловят в одном слое фразы разной длины. Параметры: .
TextCNN: детекторы фраз и max-pooling
Обе модели крошечные рядом с таблицей эмбеддингов, которую они читают (2.7 млн параметров: 27 451 слово при ); в первых двух экспериментах она заморожена.
Результаты на AG News#
Обучение: Adam с шагом обучения и затуханием весов (weight decay) , размер батча 32, 5 эпох; входные векторы — из модели Word2Vec, обученной только на предобработанных обучающих статьях.
| Модель | Вход | Эпохи | Доля верных (тест) | Потери (тест) |
|---|---|---|---|---|
| TF-IDF + логистическая регрессия | счётчики | — | 0.918 | — |
| Многослойная CNN | замороженный Word2Vec, | 5 | 0.899 | 0.298 |
| TextCNN | замороженный Word2Vec, | 5 | 0.901 | 0.288 |
| TextCNN | обучаемые эмбеддинги, | 10 | 0.911 | 0.269 |
Три наблюдения.
CNN проигрывают базовому уровню на счётчиках. Тему новостного заголовка несёт то, какие слова в нём есть, а у TF-IDF уже каждое слово — признак с подобранным весом. CNN должна сжать ту же информацию через 100 фильтров и максимум и немного проигрывает. Заявленное преимущество нейросетевых классификаторов проявляется в задачах, где фразы важнее словаря, и на бо́льших обучающих выборках.
Несколько размеров ядра немного помогают. TextCNN лучше многослойной CNN на 0.2 пункта — в пределах шума на 7600 тестовых примерах — при вдвое большем числе параметров. Механизм (фразы нескольких длин) здравый; данные здесь его не вознаграждают.
Лучший результат — у обучаемой таблицы при более длинном обучении. Третий запуск меняет сразу три вещи: таблица эмбеддингов получает градиенты функции потерь классификации, она начинается со случайных векторов вместо Word2Vec, а шаг обучения и число эпох удвоены. Вместе это даёт целый пункт и сокращает разрыв с базовым уровнем больше чем вдвое, но запуск не говорит, какая часть пункта приходится на обучение таблицы; для этого нужны замороженная и обучаемая таблицы с одинаковой инициализацией, шагом и числом эпох. Правдоподобный механизм: векторы слов, выученные на задаче, сближают слова, предсказывающие одну и ту же тему, независимо от того, встречаются ли они вместе, — это та геометрия, которая нужна классификатору, а не та, которую даёт Word2Vec.
Обучаемые эмбеддинги#
Входной конвейер меняется: документы переводятся в целочисленные идентификаторы по словарю Word2Vec с добавленным идентификатором [PAD], батчи дополняются этим идентификатором, а модель начинается с nn.Embedding(|V| + 1, 100), выход которого идёт в ту же TextCNN. Таблица эмбеддингов теперь — 2.7 млн обучаемых параметров рядом с 0.12 млн в свёртках; шаг обучения и число эпох удваиваются, чтобы таблица успела сдвинуться от случайной инициализации. Распространённый промежуточный путь, который здесь не запускался, — инициализировать таблицу предобученными векторами и затем дообучить её; так сохраняется покрытие предобучения и появляется геометрия, подогнанная под задачу.
Что использует классификатор#
Свёрточный классификатор нельзя интерпретировать по весам, но его можно прощупать возмущениями: удалить из документа один токен, снова прогнать модель и записать, как изменилась вероятность истинного класса. Токен, удаление которого снижает вероятность, был свидетельством за класс; токен, удаление которого её повышает, — свидетельством против. Если применить пробу к TextCNN с обучаемыми эмбеддингами на четырёх обучающих заголовках, wall и street оказываются сильнейшими свидетельствами за Business в статье об Уолл-стрит, а reuters — сильнейшим против; в статье из Business о технологической компании, которая судится с бывшими сотрудниками, company тянет к Business, а technology — прочь; в статье об олимпийском плавании к Sports тянут athens, olympic и swimmer. Сильнейшее свидетельство за Sci/Tech в статье о проверке сделки Microsoft регуляторами ЕС — метка новостного агентства ap, впереди msft и microsoft: проба заодно показывает, что классификатор выучил из артефактов набора данных. Проба дешёвая (один прямой проход на токен, батчами) и локальная; она говорит, что использовала эта модель для этого документа, а не что означает класс.
Что изменилось#
| TF-IDF + линейная модель | CNN поверх эмбеддингов | |
|---|---|---|
| Единица | Счётчики токенов | Окна из векторов токенов |
| Похожие слова | Не связанные признаки | Близкие входы одного фильтра |
| Порядок | Нет (n-граммы как доп. признаки) | Внутри окна из ; теряется при пулинге |
| Признаки | Один вес на запись словаря | 100–300 выученных детекторов фраз |
| Параметры | Эмбеддинги + 0.06–0.12 млн | |
| AG News | 0.918 | 0.899–0.911 |
Ограничения#
- Рецептивное поле. Фильтр видит токенов; наслоение слоёв медленно его расширяет. Зависимости через всё предложение недостижимы.
- Пулинг отбрасывает позицию. После максимума модель знает, какие шаблоны сработали, но не где и не в каком порядке.
- Только короткие тексты. Архитектура предполагает, что документ — мешок фраз. Длинным документам нужны либо иерархические модели, либо модели последовательностей из следующих заметок.
- У замороженных векторов неправильная для задачи геометрия. Сходство по совместной встречаемости — не сходство по меткам; исправление (обучение таблицы) стоит меток и вычислений.
- Нет порождения. Архитектура выдаёт один вектор на документ; она не может предсказать следующий токен или породить текст. Рекуррентные модели из следующей заметки умеют и то и другое.
Что нужно запомнить#
- Одномерная свёртка по последовательности эмбеддингов — набор выученных детекторов n-грамм; число её параметров не зависит от длины последовательности.
- Глобальный max-pooling превращает отклики переменной длины в вектор фиксированного размера и убирает позицию.
- На AG News: TF-IDF 0.918; CNN на замороженном Word2Vec 0.899–0.901; TextCNN с обучаемыми эмбеддингами 0.911. Сильный базовый уровень на счётчиках трудно превзойти в классификации по темам.
- Здесь обучаемая таблица (случайный старт, удвоенные шаг и число эпох) обошла замороженный Word2Vec на пункт; запуск меняет сразу три вещи, поэтому вклад самого обучения таблицы он не выделяет. Распространённый выбор по умолчанию — инициализировать предобученными векторами и дообучать.
- Возмущение (удалить токен, измерить изменение) — дешёвая проба того, на что опирается классификатор текстов.
Ноутбук#
week02_NN_text_classification.ipynb. Номера ячеек считают все ячейки, включая текстовые, начиная с 1. Приведённые числа взяты из прогона, сохранённого в курсе; у ячеек, изменённых с тех пор под текущие версии библиотек, сохранённого выхода нет.
- Ячейки 5–12 загружают AG News и предобрабатывают каждый текст (нижний регистр, токены
\w+, удаление стоп-слов, леммы WordNet). - Ячейка 13 обучает 100-мерную модель Word2Vec на обучающих текстах; ячейки 14–15 переводят каждый текст в последовательность векторов; ячейка 17 строит гистограмму длин текстов.
- Ячейки 19–24 строят наборы данных и загрузчики с
collate_fn, который дополняет последовательности нулевыми векторами; ячейка 24 печатает батч и его метки. - Ячейки 26–31 определяют многослойную CNN, цикл обучения (
nn.CrossEntropyLoss, Adam, логирование в Weights & Biases) и оценку подtorch.inference_mode()и приводят долю правильных ответов на тесте 0.8987 после 5 эпох. - Ячейки 34–38 определяют TextCNN с размерами ядер 3, 4, 5 и приводят 0.9011.
- Ячейки 40–43 определяют и обучают однослойный классификатор на GRU на тех же входах (его описывает заметка о RNN) и печатают его долю правильных ответов на тесте; в сохранённом прогоне у них нет вывода.
- Ячейки 45–57 перестраивают данные в целочисленные идентификаторы с индексом
[PAD], определяютEmbeddingTextCNN, обучают 10 эпох с шагом обучения и приводят 0.9109. - Ячейки 59–66 реализуют пробу с удалением одного токена (
explain), применяют её кEmbeddingTextCNNи раскрашивают токены четырёх обучающих заголовков по их влиянию (синий — свидетельство за класс, красный — против); примеры выше прочитаны по этим цветам.
Дальше#
Свёртка видит окно; документ — последовательность. Следующая заметка вводит сеть, которая читает по одному токену, неся состояние, так что в принципе каждый токен может влиять на представление каждого следующего. Она умеет классифицировать и умеет предсказывать следующий токен, что делает её первой нейросетевой языковой моделью курса и возвращает измерение перплексии из n-граммной заметки.
Литература#
- Y. Kim. Convolutional Neural Networks for Sentence Classification. EMNLP, 2014. TextCNN.
- X. Zhang, J. Zhao, Y. LeCun. Character-level Convolutional Networks for Text Classification. NeurIPS, 2015. AG News и его базовые уровни.
- Y. Zhang, B. Wallace. A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification. IJCNLP, 2017. Что меняют размеры ядер, число фильтров и предобученные векторы.
- M. T. Ribeiro, S. Singh, C. Guestrin. “Why Should I Trust You?”: Explaining the Predictions of Any Classifier. KDD, 2016. Объяснения на основе возмущений.
- Основы свёрток и градиентов для этого курса — в заметке курса по генеративным моделям об основах обучения.