
Что такое мультиэтикетка?
Понимание и реализация мультимаркировки текста с помощью XGBoost и рекуррентных нейронных сетей
Допустим, вам интересно знать, какие темы новостей обсуждаются в Интернете? Может быть, вы хотите написать свой собственный код, чтобы увидеть, что в тренде в Твиттере? Или, может быть, вы хотите знать, что рецензенты говорят о вашем продукте или бренде?
Общим для всех этих вопросов является то, что их можно свести к множественной маркировке текстовых данных. На самом деле, почти все проблемы в области обработки естественного языка можно свести к множеству меток, что делает ее отличной темой для исследований и применения!
Что такое мультиэтикетка?
Мультимаркировка — это процесс присвоения меток документу, при котором каждая метка выбирается из независимого списка параметров. Ключевым моментом использования нескольких меток является возможность назначить каждому документу более одной метки. Вы можете использовать структуру для определения тем, тем и особенностей текста, чтобы понять смысл большого объема текстовых документов.
Multi-label vs Multi-Class
Мультикласс — это подмножество мультиметки, в котором число меток фиксировано и равно 1. Классы должны быть взаимоисключающими и не могут обрабатывать независимые метки. Вы бы использовали эту структуру для категоризации.
- Взаимоисключающие метки — это те, в которых наличие одного класса предотвращает существование каких-либо других классов, т. е. предложение с положительной тональностью не может одновременно иметь негативную или нейтральную тональность. Используйте несколько классов!
- Независимые ярлыки – это те, в которых наличие одного ярлыка не влияет на другие ярлыки, т. е. фильм может быть боевиком, комедией, анимационным фильмом или некоторыми комбинациями параметров, включая боевик-комедия или анимация-боевик. Используйте несколько ярлыков!
Итак, теперь мы знаем, когда использовать несколько меток, а когда — несколько классов, давайте рассмотрим некоторые важные технические различия между ними.
Технические отличия
Основное отличие заключается в формате вывода модели. В случае нескольких классов выходными данными будет функция плотности вероятности, нормализованная по всем возможным классам. Это причудливый математический способ сказать, что сумма всех предсказанных вероятностей должна быть равна 1. Таким образом, если вероятность того, что документ принадлежит классу A, равна 0,8, то вероятность того, что он принадлежит всем остальным классам, должна быть 0,2. Побеждает класс с наибольшей вероятностью. Таким образом, чем больше вероятность того, что документ принадлежит к классу А, тем меньше вероятность того, что он может принадлежать к любому из других классов. Это должно иметь смысл, учитывая то, что мы знаем о взаимоисключающих метках.
Многометка рассматривает каждую метку как собственную уникальную двоичную классификацию. Для каждой метки прогнозируемое значение вероятности должно быть между 0 и 1, если прогнозируемая вероятность больше 0,5, выбирается метка. В этом случае вероятность, присвоенная классу А, не влияет на вероятность любых других классов.
Типы моделей:
Некоторые модели могут быть адаптированы непосредственно для использования с несколькими этикетками, в то время как другие требуют небольшой модификации. Sklearn предлагает полный список потенциальных моделей мультилейблов здесь.

Архитектуры ансамбля: для алгоритмов, которые не поддерживают несколько меток напрямую, мы можем использовать оболочку ансамбля One-Vs-Rest. Цель оболочки — разбить проблему с несколькими метками на серию бинарных задач, которые можно решить с помощью бинарной классификации. Скажем, у нас есть 6 меток для назначения, вместо того, чтобы обучать одну модель распознавать все 6 меток, мы вместо этого обучаем 6 отдельных классификаторов, чтобы каждая из них распознавала только одну метку. Каждый классификатор ищет только одну конкретную метку и, следовательно, может сделать двоичный прогноз о наличии метки.
Для получения дополнительной информации об этом методе вы можете обратиться к литературе по Метод бинарной релевантности.
Классификаторы нейронных сетей. Любой классификатор нейронных сетей можно использовать для мультиметок, просто изменив выходной слой с распределения вероятностей на двоичную классификацию (как обсуждалось ранее). Этого можно достичь, используя плотный выходной слой с сигмовидной функцией активации и используя бинарную кроссэнтропию в качестве функции потерь. Используя сигмовидную функцию активации, мы сообщаем сети, что последний выходной слой должен быть предсказанием от 0 до 1 в каждом узле. Размер выходного слоя должен быть равен количеству меток.
Кодированные примеры: ансамбль XGBoost и двунаправленно-рекуррентная нейронная сеть
Мы будем использовать два очень мощных алгоритма для нашей реализации: Дерево принятия решений с градиентным усилением (также известное как XGBoost) и Двунаправленно-рекуррентная нейронная сеть (bi-RNN). Эти алгоритмы выбраны потому, что они доказали свою эффективность в широком спектре задач текстовой аналитики, однако полное объяснение каждого из них выходит за рамки этой статьи. Для получения дополнительной информации о них ознакомьтесь с этими замечательными вводными статьями: XGBoost, bi-RNN.
Вместо этого мы будем демонстрировать, как оболочку ансамбля one vs rest можно использовать для преобразования любоймодели в модель с несколькими метками и как модифицировать любую > Архитектура нейронной сети позволяет использовать несколько меток.
Загрузка данных
Набор данных, который мы будем использовать, взят из задачи классификации токсичных комментариев Jigsaw, опубликованной на Kaggle. Набор данных содержит 160 тыс. комментариев, помеченных 6 возможными типами токсичности, примеры могут включать несколько меток токсичности.
XGBoost
Создание векторов TF-IDF для преобразования текстовых данных в машиночитаемые данные.
Использование OneVsRestClassifier в качестве оболочки ансамбля для преобразования GradientBoostingClassifier в мульти-метку.
Добавление оболочки OneVsRestClassifier в нашу модель преобразует ее в мультиметочную. Без какой-либо оптимизации или настройки параметров мы можем достичь точности 0,925, что совсем неплохо. Теперь вы можете заменить GradientBoostingClassifier любой из ваших любимых моделей, чтобы создать классификатор с поддержкой нескольких меток и начать настройку для получения оптимальных результатов.
Двунаправленная рекуррентная нейронная сеть
Обработка данных для RNN немного сложнее, потому что слова должны передаваться в RNN по одному, а не как единый вектор признаков, характерный для большинства других моделей.
Мы начинаем с создания словаря каждого слова в корпусе и упорядочиваем их по частоте, так что наиболее распространенное слово имеет значение 1, а второе наиболее распространенное слово имеет значение 2 и т. д. Затем каждый документ преобразуется из последовательности слов в последовательность чисел на основе словарного запаса. Затем последовательности расширяются или сокращаются, чтобы все они были одинаковой длины.
Затем мы настраиваем сеть со следующими слоями:
- Слой Встраивание, создающий n-мерное вложение для каждого слова.
- Уровень двунаправленной RNN, который сохраняет важную информацию из последовательности встраивания слов, используя как прямой, так и обратный порядок. Dropout используется для ограничения переобучения.
- Плотный выходной слой, слой, который преобразует любую нейронную сеть в сеть с несколькими метками, должен иметь сигмовидную функцию активации и количество выходных узлов, равное количеству меток.
Наконец, модель компилируется с двоичной функцией кроссэнтропийных потерь и обучается с использованием данных поезда. Для экономии времени выполнения использовалось только 5 эпох, однако обычно рекомендуется большее количество эпох обучения.
Наконец, тестовые данные преобразуются в последовательные, делаются прогнозы и оцениваются результаты.
Оценка точности оказалась 0,933, что немного лучше, чем с XGBoost, и очень хороший результат для модели без какой-либо настройки или модификации гиперпараметров.
Выводы и будущая работа
Эта статья:
- Объяснение классификации с несколькими метками
- Сравнили различные проблемы классификации, чтобы проиллюстрировать, когда использовать несколько меток против нескольких классов.
- Описано, как преобразовать любой стандартный классификатор в классификатор с несколькими метками с помощью оболочки ансамбля OvR.
- Описано, как преобразовать любую нейронную сеть в классификатор с несколькими метками, используя плотный сигмовидный выходной слой.
- Продемонстрирован закодированный пример с использованием дерева решений с градиентным усилением.
- Продемонстрирован закодированный пример с использованием двунаправленной рекуррентной нейронной сети.
Будущая работа:
Одним из основных препятствий для работы с несколькими метками является несбалансированность данных. Это связано с тем, что существует гораздо больше обучающих примеров без каждой заданной метки, чем с меткой, и это приводит к тому, что модели склонны предсказывать, что метки не существует. Будущая работа должна решить эту проблему с использованием методов повторной выборки или методов обучения с учетом затрат.