Преодолевая даталенд

Дзен и искусство оптимизации моделей

Сравнение моделей в задаче НЛП в социальных сетях

Дзен и искусство ухода за мотоциклами была одной из моих любимых книг в колледже. Действие книги разворачивается во время путешествия отца и сына по Соединенным Штатам на мотоцикле. В книге рассказывается, как вести осмысленную жизнь. Возможно, основная идея, сформулированная автором Робертом Пирсигом, заключается в том, что мы достигаем совершенства только тогда, когда мы полностью заняты поставленной задачей - сердцем и разумом. Если что-то стоит делать, то стоит и хорошо.

Примерно в то же время курсы дизайна исследования и статистического вывода научили меня важности интерпретируемости и экономичности. Коммуникация действительно широко рассматривается (надеется?) Как важный навык для специалиста по данным. Несомненно, проще объяснить непрофессионалам открытия и работу определенных моделей, чем других моделей. Для многих из нас в повседневной работе оптимизированные интерпретируемые модели могут работать почти так же, а иногда даже превосходить более сложные модели. Если модель стоит запускать, то ее стоит запускать и оптимизированной.

Методическая очистка данных, тщательный выбор / проектирование функций, разумный выбор показателей оценки и точная настройка гиперпараметров модели могут значительно повысить производительность модели. В этой статье я сравниваю логистическую регрессию (логит) и мультиноминальный наивный байесовский анализ (MNB) с классификатором случайного леса (RF) и Поддержка векторной классификации (SVC) в задачах обработки естественного языка.

Логистическая регрессия давно используется для статистического вывода и является рабочей лошадкой для задач классификации машинного обучения, в то время как MNB считается одной из базовых моделей для NLP. Хотя алгоритмы случайного леса не являются «черными ящиками», они менее интерпретируемы, чем logit или MNB. Однако машины опорных векторов определенно являются черными ящиками. Я не занимаю никакой позиции в великой дискуссии между предсказанием и умозаключением и выбираю НЛП, потому что это та область, где предсказание является единственной целью.

Классификация обработки естественного языка

Выбранный набор данных взят из библиотеки данных Crowdflower для всех, содержащей 5000 сообщений из аккаунтов американских политиков в социальных сетях. Сообщения были классифицированы по нескольким аспектам, таким как предвзятость, целевая аудитория и тематика. Я постараюсь предсказать политическую предвзятость - «партийную» или «нейтральную» - в сообщениях.

В наборе данных одинаковое количество сообщений Facebook и твитов Twitter, но только 26% сообщений классифицируются как «пристрастные». Таким образом, у нас есть несбалансированный набор данных, в котором «нейтральных» сообщений почти в три раза больше, чем «пристрастных». Другими словами, если бы это был мешок с комбинацией из четырех черных и белых шаров в нем, был бы только (приблизительно) один черный шар против трех белых. Так что у меня были бы большие шансы, если бы моей целью было выбрать черный шар, а именно предсказать «партизанское» послание.

Класс «партизан» кодируется как 1 , а «нейтральный» - как 0 в целевой переменной. Учитывая мою цель прогнозирования «партийных» сообщений, я откажусь от общей оценки точности модели и вместо этого сосредоточусь на балле F1 для класса «партийность» (меньшинство) вместе со статистикой Каппа Коэна .

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

Естественно, прогнозы, скорее всего, не на 100% точны, поэтому мы можем сгруппировать эти «положительные» прогнозы как правильные (истинно положительные) или неправильные (ложные положительные). Мы могли бы сделать то же самое с «отрицательными» прогнозами. Уровень точности для «положительного» класса будет суммой истинных положительных результатов, деленной на общее количество положительных прогнозов класса (или истинных положительных результатов + ложных положительных результатов). Итак, точность - это вероятность того, что модель выберет истинно положительный результат среди своих предсказанных положительных наблюдений.

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

Точность и коэффициент отзыва являются более полезными показателями предсказательной силы модели, когда положительный класс составляет меньшинство в несбалансированных наборах данных, и главная цель состоит в том, чтобы правильно идентифицировать эти положительные наблюдения. Оценка F1 - это среднее гармоническое значение точности и повторяемости.

Каппа Коэна - это более широкая статистика, которая говорит нам, насколько лучше модель работает при прогнозировании как «положительных», так и «отрицательных» классов, чем только случайный случай. Статистика каппа выше 0 означает, что модель лучше случайности, и чем выше она достигает максимального потолка, равного 1, тем лучше модель классифицирует данные.

Мешок слов

«мешок слов» (BoW) - это базовая техника машинного обучения в НЛП. В Интернете есть бесчисленное количество сообщений, подробно описывающих BoW, поэтому мне нет необходимости делать это подробно. Достаточно сказать, что подход BoW отбирает отдельные слова из предварительно классифицированных текстов, игнорируя грамматику и порядок. Предполагается, что смысл и сходство между текстами закодированы в абстрактной лексике. Хотя это может показаться довольно упрощенным, но работает на удивление хорошо.

Одна из основных проблем BoW заключается в том, что извлечение отдельных слов в качестве признаков быстро приводит к богатству, иначе известному как «проклятие размерности». Помимо потенциальной проблемы наличия большего количества функций, чем наблюдений, частота слов обычно следует за длинным хвостом распределением Ципфа, что может отрицательно сказаться на производительности обобщенных линейных моделей. Если бы этого было недостаточно, другой проблемой стала бы мультиколлинеарность.

Например, в нашей выборке из 5000 сообщений в социальных сетях будут извлечены десятки тысяч отдельных слов и символов, многие из которых не имеют отношения к делу (например, https, www, @, сегодня и т. Д.). Проклятие размерности имеет тенденцию быть проблемой для логистической регрессии (усугубляемой распределением длинного хвоста), а также другими проблемами, такими как kNN и деревья решений. Однако MNB, как правило, преуспевает в этом контексте. RF тоже может преуспеть, учитывая, что он основан на повторной выборке со случайными комбинациями регрессоров.

Таким образом, нам нужно безжалостно отсеивать возможное количество переменных. Я начал с очистки текста, удаления ненужных символов и увеличения списка стоп-слов, чтобы уменьшить размерность объекта. Ниже показано сравнение двух сообщений из набора данных, где сравниваются необработанная и очищенная версии. Очевидно, что с очищенными сообщениями требуется дополнительная работа, и следующим шагом будет составление списка стоп-слов.

Затем следует основание или лемматизация, и обычно достаточно одного или другого. Построение объединяет слова вместе, отбрасывая множественность, род, время, падеж, количество элементов и т. Д., А также по сути является формой НЛП проектирования функций для уменьшения пространства функций. Я вставил алгоритм выделения Porter в CountVectorizer, чтобы ограничить текстовые данные . Другие варианты разработки функций, которые я мог бы использовать, - это параметры n_grams и min_df в CountVectorizer .

Грид-поиск по процедурам и моделям

Я запустил GridsearchCV на следующих четырех моделях: logit, MNB, RF Classifier и SVC. Библиотека sklearn в Python позволяет вам изменять параметр class-weight для logit, RF и SVC, и рекомендуется указать class_weight = «сбалансированный» при работе с несбалансированными данные.

Gridsearch был настроен на оптимизацию оценки F1 для «партизанского» класса по сравнению с конвейером, который включал CountVectorizer (с помощью стеммера Porter , n_gram и min_df), TfidfTransformer и модель. Данные были подвергнуты разделению на 80–20 обучающих тестов, а обучающий набор подвергся дополнительной процедуре перекрестной проверки cv = 5.

SVC взял наивысший средний балл CV (F1) на обучающем наборе, но имел самый низкий балл F1 на тестовом наборе. И RF, и SVC достигли заметно более высоких показателей общей точности, чем logit или MNB на тестовом наборе (зеленые столбцы на диаграмме ниже). Однако и logit, и MNB превзошли более сложные модели, когда дело дошло до оценки F1 на тестовом наборе (красные столбцы на диаграмме ниже).

Все результаты были основаны на индивидуально оптимизированных алгоритмах с подробностями, перечисленными ниже. Интересно, что MNB оказался победителем с точки зрения тестового набора F1, несмотря на то, что он отказался от использования как Porter Stemmer, так и TfidfTransformer. Все другие модели прибегали к использованию стеммера, хотя SVC также не использовала TfidfTransformer.

Изучение деталей соответствующих матриц путаницы поможет понять, как работает каждая из моделей. Матрицы результатов набора тестов для моделей logit и SVC показаны ниже для иллюстрации.

Согласно матрице заблуждений logit, он правильно выбрал 203 истинно положительных («партизанских») сообщения из своих 435 положительных прогнозов (или 203 + 232), что дало ему точность 46,7%. 203 истинно положительных сообщения также можно сравнить с общим количеством фактических положительных сообщений 262 (или 203 + 59), что подразумевает коэффициент отзыва 77,5%. Таким образом, логит-модель получила оценку F1 58,2%.

Модель SVC, напротив, в этом отношении показала плохие результаты. Ему удалось получить 99 истинно положительных сообщений из 175 положительных предсказаний (или 99 + 76). Хотя показатель точности может выглядеть не так уж плохо, 99 истинно положительных прогнозов необходимо сравнить с общим количеством фактических положительных сообщений 262 (или 99 + 163). Слабый коэффициент отзыва снизил оценку SVC в F1 до 45,3%. Похоже, что предсказательная сила SVC была больше сосредоточена на отрицательном классе, что дало ему более высокий общий балл точности, но это не было целью здесь.

Повторная выборка класса меньшинства

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

Я подумал, что было бы более плодотворным пойти другим путем, особенно с учетом проблемы несбалансированных данных, а именно: передискретизировать обучающий набор, чтобы модели обучались на более сбалансированных данных. Выбранные алгоритмы - это популярный SMOTE (технология передискретизации синтетических меньшинств) и комбинация SMOTE-Tomek.

SMOTE помогает сбалансировать классы за счет передискретизации класса меньшинства, и это достигается путем создания синтетических наблюдений за классом меньшинства путем линейной интерполяции пространства между ними (используя методология k-ближайших соседей). Процедура интерполяции означает, что она будет генерировать только синтетические наблюдения из доступных примеров.

Ссылки Томека, с другой стороны, представляют собой процедуру недостаточной выборки, которая удаляет наблюдения класса большинства, чтобы создать более четкое разграничение пространства между классами большинства и меньшинства. Алгоритм SMOTE-Tomek в основном сочетает в себе процедуры ссылок SMOTE и Tomek.

Я повторил разделение обучающих тестов на 80–20 с дополнительной пятикратной процедурой перекрестной проверки на обучающей выборке. Процедуры повторной выборки должны выполняться только на обучающем наборе, после чего обученная модель затем оценивается на неизмененном тестовом наборе.

Для краткости я буду сообщать только результаты передискретизации SMOTE и SMOTE-Tomek с оптимизированными параметрами модели, описанными выше. SMOTE помог повысить общую оценку точности логит-модели и каппу Коэна на тестовом наборе, но дал лишь незначительное улучшение по шкале F1. SMOTE-Tomek был лучше для модели MNB, хотя улучшения не были значительными.

С другой стороны, методы повторной выборки ослабили оценки моделей RF и SVC. Это, казалось, подтвердило, что эти более сложные модели фокусировали свою предсказательную силу на большинстве «отрицательных» классов в этом наборе данных. В любом случае и logit, и MNB по-прежнему показывают более низкие оценки точности, чем RF и SVC, но их превосходные оценки F1 еще выше.

MNB выиграл в итоге как по баллу F1 в классе «партизан», так и по статистике Каппа Коэна, достигнув наивысших баллов с помощью повторной выборки SMOTE-Tomek. Логит был на втором месте. Давайте сравним матрицы путаницы тестового набора из моделей MNB и RF, следуя процедуре SMOTE-Tomek.

Мы можем наблюдать, что MNB достиг 50% точности и даже лучше - 72,1%. Модель RF, с другой стороны, получила уровень точности 51,9% и коэффициент отзыва 52,7%. Подобно модели SVC, классификатор случайного леса, по-видимому, уделял больше внимания отрицательному классу большинства.

Таким образом, logit и MNB превзошли RF и SVC в этой задаче NLP с целью прогнозирования «партийных» политических посланий. Помните, что базовая вероятность случайного предсказания «партизанского» сообщения составляла всего 26%. Модели MNB и logit достигли значений F1 0,58–0,59, а каппа Коэна - 0,39–0,40. Алгоритмы RF и SVC показали более высокие показатели точности, но более низкие оценки F1 по целевому «партизанскому» классу.

Заключение

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

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

«А что хорошо, Федр, а что нет - нужно ли нам просить кого-нибудь рассказать нам об этом?»