Проект обнаружения фейковых новостей на Python [с кодированием]

Опубликовано: 2020-12-14

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

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

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

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

Читайте: Идеи и темы проекта Python

Существует много наборов данных для этого типа приложений, но мы будем использовать упомянутый здесь . Данные содержат около 7500+ новостных лент с двумя целевыми ярлыками: фейковые или настоящие. Набор данных также состоит из заголовка конкретной новости.

Шаги конвейера обработки естественного языка будут следующими:

  1. Получение и загрузка данных
  2. Очистка набора данных
  3. Удаление лишних символов
  4. Удаление знаков препинания
  5. Удаление стоп-слов
  6. Стемминг
  7. Токенизация
  8. Извлечение функций
  9. Векторизатор TF-IDF
  10. Счетчик-векторизатор с преобразователем TF-IDF
  11. Обучение и проверка модели машинного обучения

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

Код:

импортировать панд как pd
импортировать numpy как np
импортировать повторно
строка импорта
из nltk.corpus импортировать стоп-слова
из nltk.tokenize импортировать word_tokenize

stop_words = set(stopwords.words( 'английский' ))

Первым шагом является получение данных. Мы уже предоставили ссылку на файл CSV; но также важно обсудить другой способ генерации ваших данных.

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

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

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

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

Код:

df_text = pd.read_csv( 'fake_or_real_news.csv' , encoding= 'latin-1' )
df_text.columns = [ 'id' , 'заголовок' , 'текст' , 'метка' ] df_text.drop(['id', 'заголовок'], ось = 1)

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

Первым шагом в конвейере очистки является проверка, содержит ли набор данных какие-либо лишние символы, которые необходимо удалить. Это могут быть веб-адреса или любые другие ссылочные символы, такие как at(@) или хэштеги. Вот код:

Код:

# Удалить URL
text = re.sub( r”http\S+|www\S+|https\S+” , , text, flags=re.MULTILINE)
# Удалить ссылки пользователя @ и '#' из текста
текст = re.sub( r'\@\w+|\#' , " , текст)

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

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

Код:

text = text.translate(str.maketrans( " , " , string.punctuation))

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

Код:

токены = word_tokenize (текст)
слова = [w для w в токенах , если не w в стоп-словах]

Следующий шаг — решающий. Преобразование токенов в значащие числа. Этот шаг также известен как извлечение признаков. Для нашего приложения мы будем использовать метод TF-IDF для извлечения и создания функций для нашего конвейера машинного обучения.

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

TF-IDF можно легко рассчитать, смешав оба значения TF и ​​IDF. Обе формулы включают простые соотношения.

ТФ = нет. количество раз, когда термин появляется в документе / общее количество терминов.

IDF = журнал (общее количество документов / количество документов, в которых появляется термин)

Теперь у Python есть две реализации для преобразования TF-IDF. Первый — это векторизатор TF-IDF, а второй — преобразователь TF-IDF. Разница в том, что преобразователь требует реализации пакета слов перед преобразованием, в то время как векторизатор объединяет оба шага в один. Мы также могли бы использовать векторизатор подсчета, который является простой реализацией набора слов. Но TF-IDF будет лучше работать с конкретным набором данных.

Вот как можно реализовать TF-IDF.

Код:

из sklearn.feature_extraction.text импортировать TfidfVectorizer

tf_vector = TfidfVectorizer (sublinear_tf = True )
tf_vector.fit(df_text[ 'текст' ])

Следующим шагом является конвейер машинного обучения. Как и в типичном конвейере ML, нам нужно передать данные в X и y. Для этого мы используем X в качестве матрицы, предоставленной в качестве выходных данных векторизатора TF-IDF, которую необходимо сгладить.

Мы можем использовать функцию перемещения в Python для преобразования матрицы в массив. Значения y не могут быть добавлены напрямую, поскольку они по-прежнему являются метками, а не числами. Чтобы преобразовать их в 0 и 1, мы используем кодировщик меток sklearn.

Этот кодировщик преобразует тексты меток в пронумерованные цели. Например, предположим, что у нас есть список таких ярлыков: ['настоящий', 'поддельный', 'поддельный', 'поддельный']

По сути, нам нужен такой список: [1, 0, 0, 0]. Что делает кодировщик меток, так это то, что он берет все отдельные метки и составляет список. В нашем примере список будет ['фальшивый', 'настоящий'].

Вот реализация того же самого:

Код:

X_text = tf_vector.transform(df_text[ 'текст' ].ravel())
y_values ​​= np.array(df_text[ 'label' ].ravel())

предварительная обработка импорта из sklearn
le = предварительная обработка.LabelEncoder()
le.fit(y_values) le.transform(y_values)

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

Код:

из sklearn.model_selection импорта train_test_split

X_train, X_test, y_train, y_test = train_test_split (X_text, y_values, test_size = 0,15 , random_state = 120 )

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

Код:

из sklearn.metrics импорта precision_score

из sklearn.linear_model импортировать LogisticRegression

модель = Логистическая регрессия (решатель = 'lbfgs' )
model.fit(X_train, y_train)
y_predict = model.predict(X_test)
печать (accuracy_score (y_test, y_predict))

Модель ведет себя очень хорошо. 92-процентная точность регрессионной модели — это довольно прилично. Вы также можете реализовать другие доступные модели и проверить их точность.

Итак, вот как вы можете реализовать проект обнаружения фейковых новостей с помощью Python.

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

Читайте также: Идеи проектов с открытым исходным кодом Python

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

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

Если вам интересно изучать науку о данных, чтобы быть в авангарде быстро развивающихся технологий, ознакомьтесь с программой Executive PG upGrad & IIIT-B по науке о данных и повышайте свою квалификацию для будущего.

Какие навыки необходимы для разработки проекта по обнаружению фейковых новостей на Python?

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

Как компании используют проекты Python по обнаружению фальшивых новостей?

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

Каковы другие реальные приложения Python?

Python имеет широкий спектр реальных приложений. Python поддерживает кроссплатформенные операционные системы, что делает разработку приложений с его использованием гораздо более управляемой. Python используется для работы некоторых из самых известных в мире приложений, включая YouTube, BitTorrent и DropBox. Python часто используется при создании инновационных игр. Python также используется в машинном обучении, науке о данных и искусственном интеллекте, поскольку он помогает создавать повторяющиеся алгоритмы на основе сохраненных данных. Python спасает жизнь, когда дело доходит до извлечения огромных объемов данных с веб-сайтов, которые пользователи могут впоследствии использовать в различных реальных операциях, таких как сравнение цен, размещение вакансий, исследования и разработки и так далее.