В этом современном мире данные очень важны, и к 2020 году будет генерироваться 1,7 мегабайта данных в секунду. Итак, существует множество технологий, которые меняют мир с помощью такого большого количества данных. Машинное обучение - одна из них, и мы используем эту технологию для обнаружения фейковых новостей.

Машинное обучение

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

  1. Контролируемое обучение
  2. Неконтролируемое обучение
  3. Обучение с подкреплением

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

Узнайте больше здесь

Что такое фейковые новости?

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

Для средств массовой информации способность привлекать посетителей на свои веб-сайты необходима для получения доходов от онлайн-рекламы. Так что необходимо обнаруживать фейковые новости.

Рабочий процесс:

Источник: к науке

На приведенной выше диаграмме показано, как этот конвейер генерирует числовые характеристики и передает их в алгоритм машинного обучения. В этом проекте мы используем некоторые библиотеки машинного обучения и обработки естественного языка, такие как NLTK, re (регулярное выражение), Scikit Learn.

Обработка естественного языка

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

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

Набор данных

Вы можете найти множество наборов данных для обнаружения фейковых новостей на Kaggle или многих других сайтах. Я скачиваю эти наборы данных из Kaggle. Есть два набора данных: один для фейковых новостей, а другой - для настоящих. В истинных новостях 21417 новостей, а в фейковых - 23481 новость. Оба набора данных имеют столбец меток, в котором 1 для фейковых новостей и 0 для истинных новостей. Мы объединили оба набора данных с помощью встроенной функции pandas.

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

Наш окончательный набор данных сбалансирован, потому что обе категории имеют примерно одинаковые номера. примеров

Очистка данных

Мы не можем использовать текстовые данные напрямую, потому что в них есть непригодные для использования слова, специальные символы и многое другое. Если мы использовали его напрямую, не очищая, то алгоритму машинного обучения очень сложно обнаружить закономерности в этом тексте, а иногда он также генерирует ошибку. Так что мы всегда должны сначала очищать текстовые данные. В этом проекте мы создаем одну функцию «clean_data», которая очищает данные.

Лемматизация: преобразование слова или лексемы в его базовую форму.

Примеры :

Пребывание, пребывание, пребывание, пребывание - - ›Пребывание

Дом, Дома, Жилье - - ›Дом

Стоп-слова: слова, которые встречаются слишком часто и не считаются информативными.

Примеры :

{‘The’, ‘a’, ‘an’, ‘and’, ‘but’, ‘for’, ‘on’, ‘in’, ‘at’…}

Разделить данные

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

Мы разделяем наши 80% данных для обучающего набора и оставшиеся 20% данных для набора для тестирования.

Tfidf Vectorizer

Tfidf-Vectorizer: ( частота термина * обратная частота документа)

1.Частота сроков: количество раз, когда слово появляется в документе, деленное на общее количество слов в документе. Каждый документ имеет свою частоту использования.

2. Обратная частота документов: журнал количества документов, разделенный на количество документов, содержащих слово w. Частота обратных данных определяет вес редких слов во всех документах в корпусе.

Наконец-то векторизатор Tfidf

Этот векторизатор уже предопределен в Scikit Learn Library, поэтому мы можем импортировать его:

Теперь мы сначала создаем объект TfidfVectorizer с некоторыми аргументами.

Вы можете проверить значение аргументов здесь

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

После векторизации данных он вернет разреженную матрицу, поэтому для алгоритмов машинного обучения мы должны преобразовать ее в массивы. Функция toarray сделает эту работу за нас.

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

Наивный байесовский метод. Метод наивного байесовского классификатора основан на теореме Байеса и особенно подходит для данных большой размерности.

Формула:

Ознакомьтесь с дополнительной информацией Теорема Байеса

Полиномиальный наивный байесовский метод:

Он используется для классификации в дискретной форме. Это очень полезно при обработке текста. Каждый текст будет преобразован в вектор количества слов. Он не может иметь дело с отрицательными числами.

Он предопределен в Scikit Learn Library. Итак, мы можем импортировать этот класс в наш проект, а затем создать объект Multinomial Naive Bayes Class.

1. Подгоните классификатор к нашим векторизованным данным поезда.

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

Показатели классификации

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

  1. Матрица путаницы
  2. Оценка точности
  3. Точность
  4. Отзывать
  5. F1-Оценка

Матрица неточностей. Обычно это показатели того, сколько результатов предсказано правильно, а сколько результатов неверно.

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

Подробная информация о Точность, отзывчивость и F1-Score

Подробнее о показателях классификации

Как видите, у нас очень хорошие показатели точности, отзыва и F1. Таким образом, мы можем сказать, что наша модель отлично работает с невидимыми данными. Оценка точности набора тестовых данных составляет 95%, что очень хорошо.

Теперь мы видим отчет о классификации по обучающей выборке.

Мы также получаем очень хорошую оценку точности на тренировочной выборке.

Оценка точности на поезде и тестовом наборе

Вы можете видеть, что обе точности почти равны. Так что мы можем сказать, что наша модель работает хорошо.

Сохраните модель

После хорошей производительности с данными мы можем сохранить нашу модель, чтобы в следующий раз мы могли использовать ее напрямую. Библиотеки joblib и pickle, используемые для сохранения модели машинного обучения. На следующем шаге вы можете сохранить и загрузить свою модель.

Еще один способ сохранить и загрузить вашу модель Оформить заказ здесь

Код:



Резюме

Сегодня мы научились обнаруживать фейковые новости с помощью Python. Мы взяли набор данных Fake и True News, реализовали функцию очистки текста, TfidfVectorizer, инициализировали полиномиальный наивный байесовский классификатор и соответствовали нашей модели. В итоге мы получили точность 95,31% по величине.

Надеюсь, вам понравился этот проект.

Свяжитесь со мной:

Github:



Средний:



LinkedIn:



Последнее примечание:

Спасибо за внимание! Если вам понравилась эта статья, нажмите кнопку "хлопать" 👏 столько раз, сколько сможете. Это будет много значить и побудит меня продолжать делиться своими знаниями.