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

Что мы как сообщество можем сделать, чтобы обеспечить безопасное и законное использование этих платформ?

Введите машинное обучение.

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

Допустим, на мгновение мы относимся к этим твитам троллей как к спаму (по сути, это все, чем они являются). Мы можем использовать теорему Байеса, чтобы определить вероятность того, что твит принадлежит аккаунту тролля.

Теорема Байеса утверждает, что вероятность того, что событие является истинным, основана на априорных доказательствах того, что это событие является истинным. Теорема Байеса выражается как

Где P(A|B) – вероятность того, что A будет истинным при данном B, P(B|A) – вероятность или вероятность B при заданном A, P(A) – это вероятность A. быть истинным до того, как мы посмотрим на наше свидетельство (известное как предшествующий термин), а P (B) - это вероятность того, что наше свидетельство истинно (известное как термин доказательства).

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

С этим введением, давайте начнем!

Первое, что нам нужно, это данные. Мне удалось найти на Kaggle набор данных, состоящий примерно из 200 000 твитов троллей. Поскольку мы создаем классификатор, нам также нужно найти данные для законных твитов. Для этого я использовал несколько разных наборов данных, чтобы получить как можно больше данных.

Твиты троллей можно найти здесь.

Настоящие твиты можно найти здесь и здесь.

Всего у нас 92 497 настоящих твитов и 200 000 твитов троллей. Поскольку мне нужен был ровный набор данных для обучения и тестирования, я сократил количество твитов троллей, чтобы они соответствовали реальным.

Затем я поместил все твиты в перетасованный и помеченный обучающий набор из 147 996 твитов и тестовый набор из 36 998 твитов. Тестовый набор составил 20% от общего числа данных.

Это выглядит так:

Очень круто! С помеченными наборами данных мы можем начать работу над классификатором.

Для этого классификатора я обнаружил, что метод мешка слов работает лучше всего. Пакет слов — это способ представления языка путем хранения вхождений каждого слова в структуре данных. Например, давайте взглянем на предложение: «Быстрый серый Дакстер перепрыгивает через ленивую серую Дакоту».

Используя мешок слов, мы получили бы следующий словарь:

bag_of_words = {
    the: 2
    gray: 2
    quick: 1
    daxter: 1
    dakota: 1
    jumps: 1
    over: 1
    lazy: 1
}

Эта модель работает хорошо, потому что мы заставляем наши данные соблюдать правило независимости данных наивных байесовских классификаторов. Мы берем структурированное предложение и выбрасываем всю эту структуру в окно. Оставляя только слова и их вхождения.

Во время тренировки мы будем использовать два мешка. У нас будет пакет для поддельных твитов и пакет для настоящих твитов. Затем мы перебираем все твиты в нашем обучающем наборе и помещаем их в наши сумки в зависимости от их метки.

Как только все наши твиты помещены в соответствующие пакеты, мы можем вычислить P(A) и P(B). Вернее, P (фейковый твит) и P (настоящий твит).

Все это показано ниже:

С нашим обученным классификатором мы можем провести тестирование.

Для нашей классификации мы будем использовать значения p_real и p_fake, которые мы рассчитали во время обучения.

Мы умножим эти значения на вероятность того, что твит настоящий и фейковый. Затем мы сравниваем вероятности и возвращаем то, что выше.

Короче говоря, мы ищем:

p_real * ((word_occurrences + 1) / (number_of_real_tweets + 1 * words_in_tweet))

и

p_fake * ((word_occurrences + 1) / (number_of_false_tweets + 1 * words_in_tweet))

Затем мы сравниваем эти значения. То, что имеет наибольшую вероятность, — это то, к чему мы классифицируем твит.

Мы добавляем 1 к количеству вхождений слова и количеству твитов для категории, чтобы никогда не получить значение 0 ( 0/0заставит ваш компьютер взорваться).

В целом код подтверждения показан ниже:

После тестирования нашего классификатора на тестовом наборе из 36 998 твитов мы смогли правильно классифицировать 33 386 твитов. Это примерно 90% твитов, правильно классифицированных!

Из 3612 твитов, которые были неправильно классифицированы, 3310 были помечены как ложноположительные (настоящие твиты помечены как фальшивые), а 302 — истинно негативные (твиты троллей, помеченные как настоящие).

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

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

Если у вас есть какие-либо комментарии или вы видите вещи, которые можно улучшить, не стесняйтесь оставлять их ниже!

Проверьте код!



Кредиты: