Тысяча слов стоит картинки (или двух)



Цели:

  • Используйте обработку естественного языка и машинное обучение, чтобы предсказать Subreddit, из которого возник новый пост, на основе его заголовка и текста описания.
  • Создайте интерактивную информационную панель для анализа компонентов и понимания влияния различных методов НЛП на производительность модели.

Методы:

  • Собирайте заголовки сообщений и тексты описаний из двух субреддитов.
  • Векторизация извлеченных данных с использованием обработки естественного языка
  • Обучайте модели бинарной классификации на векторизованных данных.
  • Визуализируйте влияние различных методов векторизации и инженерных функций на моделирование.
  • Оцените точность модели по ряду различных параметров.

Данные

Я выбрал два субреддита, заполненных исключительно ботами, генерирующими естественный язык (NLG), и собрал заголовок и описательный текст для всех сообщений в каждой категории, используя pushshift Reddit API.

Обзор класса:

  1. r/SS | 32,299 сообщений от 6/2015–1/2020 удалено из 240s*

r/SubredditSimulator использует марковскую цепочку генерации естественного языка для симуляции субреддита, ограничивая публикации и комментарии набором предварительно созданных учетных записей ботов. Этот субреддит предназначен для просмотра, а не взаимодействия с ним.

2. r/GPT2 | 11,311 сообщений от 5/2019–1/2020 удалено из 118s*

r/SubSimulatorGPT2 похож на (и был вдохновлен) r/SubredditSimulator, с основным отличием в том, что он использует GPT-2, а не простую модель цепи Маркова для генерации сообщения/комментарии.

*pushshift ограничивает запросы до 1000 сообщений, поэтому я сегментировал парсинг по месяцам в r/SubredditSimulator (пик 688 сообщений в месяц) и по третям месяцев в r/SubSimulatorGPT2 (пик 2061 сообщений в месяц) с задержкой в ​​1 секунду между запросами.

Полный словарь данных доступен по адресу pushshift.io/api-parameters/

3. Word2Vec

Векторизатор подсчета

Модуль CountVectorizer в sklearn возвращает вектор для общего количества каждого слова в корпусе. Анализируя соответствующие частоты тысяч слов и фраз по мере их появления в разных классах, модель машинного обучения может предсказать класс незнакомого текста на основе ассоциаций, которые она «выучила» между определенными векторами (словами) и классами, на которых она обучалась ( r/SS и r/GPT2 в данном случае).

Такие слова, как «the» и «of», появляются так часто, что могут создавать шум, затмевая слова, которые встречаются реже, но имеют большую прогностическую ценность. Мы называем их stop-words. Ниже представлены первые 5 слов по общему количеству в обоих сабреддитах, включая и исключая стоп-слова.

Как показано выше, слово «the» появляется чаще в r/GPT2, чем в r/SS. Это и подобные различия в подсчете стоп-слов между классами, вероятно, означают артефакт соответствующих алгоритмов генерации естественного языка: по неизвестным причинам GPT2 боты используют определенные стоп-слова со значительно отличающейся скоростью, чем их SS аналоги. Таким образом, хотя мы часто удаляем стоп-слова в НЛП, для этого проекта стоп-слова могут оказаться полезными для предсказаний.

Векторизация TF-IDF

Вместо того, чтобы вручную идентифицировать и удалять стоп-слова, мы также можем вычислить вектор частоты термина и обратной частоты документа (TF*IDF). Частота терминов отражает важность слова в данном документе (как долю от общего количества слов в документе), в то время как обратная частота документов (IDF) добавляет веса терминам в зависимости от их важности (редкости) во всех документах.

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

Расчет TF-IDF: This is an example sentence. TF для термина «пример» здесь равен 1/5 или .2. Если термин «пример» появляется в общей сложности в 15 документах в нашем корпусе из 100 документов, приведенная выше кривая IDF предполагает соответствующий IDF примерно 2. Таким образом, вектор TF-IDF для «примера» в этом предложении равен TF*IDF = .2*2 = .4.

Я также рассчитал mean TF-IDF score для каждого вектора, взяв среднее значение баллов в документах, где термин получил .1 или больше (адаптировано из метода, описанного в этой статье). Применение минимального порога к вычислению среднего позволяет избежать пересчета стоп-слов, которые появляются так часто, что их средний балл искажается. Этот расчетный показатель предназначен для приблизительного определения средней важности термина по всему корпусу.

Начальная загрузка

Путем «загрузки» случайных выборок из r/GPT2 данных (первоначально 11 311 сообщений) я создал фрейм данных почти в три раза больше, чтобы соответствовать количеству сообщений из r/SS (32 299). Начальная загрузка требует выборки с заменой, потому что мы увеличиваем масштаб, используя дубликаты исходных данных. Ниже приведено упрощение: берутся изначально несбалансированные классы 5 и 2 и загружаются до 5 и 5 для сбалансированного набора данных.

4. Моделирование

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

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

Эксперименты с дополнительными параметрами

Наконец, я создал интерактивную панель инструментов в Tableau для одновременного управления несколькими параметрами НЛП. Панель инструментов включает данные из многочисленных методов и моделей векторизации и позволяет искать определенные слова или фразы, чтобы увидеть, как различные векторы влияют на модель.

Результаты

Я стремился оптимизировать для отзыва или возможности точно идентифицировать сообщения, созданные ботами на основе GPT2. Поскольку NLG, стоящий за r/GPT2, более совершенен, чем в r/SS, человеку довольно легко догадаться, какой алгоритм отвечает за данный образец текста. Я стремился построить модель, которая могла бы делать аналогичные прогнозы между двумя классами авторов ИИ.

Чтобы лучше понять последствия несбалансированных занятий, я протестировал 15 одноклассников на аналогичной задаче. Участникам дали 2 минуты, чтобы прочитать 10 случайно выбранных сообщений из каждого класса с включенными ярлыками, а затем 2 минуты, чтобы угадать классы для 10 новых сообщений без ярлыков. Участники не знали, что данные тестирования были отобраны из несбалансированных данных. Ниже приведены суммарные результаты этих тестов в дополнение к оценкам нескольких моих наиболее эффективных моделей машинного обучения:

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

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

Выводы:

  • Необходимы дальнейшие исследования, чтобы понять артефакты стоп-слов, присутствующие в тексте, созданном NLG.
  • Учитывая компромисс между величинами коэффициента Риджа и средними показателями TF-IDF, обработку данных и моделирование нельзя рассматривать изолированно, а скорее как часть более крупного процесса.
  • Несбалансированные классы могут значительно снизить производительность модели, если с ними не обращаться должным образом. Это проблема не только машин, но и людей, когда речь идет о прогнозировании новых данных.

Спасибо за чтение!