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

Полную статью с исходным кодом читайте здесь —https://machinelearningprojects.net/fake-news-classifier-using-lstm/

Посмотреть видео можно здесь — https://youtu.be/XcHtSSKE6PI

Давай сделаем это…

Шаг 1 — Импорт библиотек, необходимых для классификатора фейковых новостей.

import re
import nltk
import numpy as np
import pandas as pd
import tensorflow as tf
from nltk.corpus import stopwords
from nltk.stem.porter import PorterStemmer
from tensorflow.keras.models import Sequential
from sklearn.model_selection import train_test_split
from tensorflow.keras.preprocessing.text import one_hot
from sklearn.metrics import confusion_matrix,accuracy_score
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.layers import Embedding,LSTM,Dense,Dropout

nltk.download('stopwords')

Шаг 2 — Чтение входных данных.

df = pd.read_csv('train.csv')
df.dropna(inplace=True)
df.reset_index(inplace=True)
df.head(10)

Шаг 3 — Создание данных X и Y.

X = df['title']
y = df['label']
  • Для X мы просто берем столбец заголовка.
  • Для y мы просто берем столбец меток.

Шаг 4 — Очистка входных данных.

ps = PorterStemmer()
corpus = []

for i in range(len(X)):
    text = X[i]
    text = re.sub('[^a-zA-Z]',' ',text)
    text = text.lower()
    text = text.split()
    text = [ps.stem(t) for t in text if t not in stopwords.words('english')]
    corpus.append(' '.join(text))
  • Здесь мы переходим в X, а затем просто используем регулярное выражение для очистки наших данных и сохранения их в списке корпусов.
  • Прежде всего, мы просто заменяем пробелом все, что не является алфавитом.
  • Затем мы переводим его в нижний регистр и разбиваем.
  • Затем мы проверяем, не находятся ли слова в стоп-словах, а затем вычленяем их.
  • Просто соедините эти результаты, составьте из них предложение и добавьте его в список корпусов.

Шаг 5 — Кодирование входных данных.

vocab_size = 5000
sent_len = 20

one_hot_encoded = [one_hot(x,vocab_size) for x in corpus]
one_hot_encoded = pad_sequences(one_hot_encoded,maxlen=sent_len)
one_hot_encoded[0]
  • Здесь мы кодируем наши текстовые данные в числовые данные, используя one_hot.
  • Помните, что это горячее не то, что 0s и 1s. В этом горячем кодировании мы присваиваем слову случайное число, используя хеширование. Случайное слово выбирается из диапазона 0-vocab_size.
  • Затем мы дополняем последовательности нулями, чтобы каждая строка была одинаковой длины.
  • А потом просто проверяем, как выглядит наше первое предложение после этих двух операций.

Шаг 6 — Обработка данных X и Y.

X = np.array(one_hot_encoded)
y = np.array(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
  • Преобразование X и y в массивы NumPy и простое разделение данных с помощью traintestsplit.

Шаг 7 — Создание модели.

no_of_output_features = 40

model = Sequential()

model.add(Embedding(vocab_size,no_of_output_features,input_length=sent_len))
model.add(Dropout(0.5))
model.add(LSTM(100))
model.add(Dropout(0.5))
model.add(Dense(1))

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])

model.summary()
  • Здесь мы создаем нашу модель.
  • В нашей модели всего 4 слоя.
  • Первый слой — это слой Embedding, который преобразует числовой массив, который мы видели выше, в вектор из 40 измерений, за которым следует слой Dropout.
  • И затем у нас есть слой LSTM со 100 узлами, за которым следует слой Dropout.
  • Выпадающие слои предназначены для предотвращения переобучения.

Шаг 8 — Обучение модели классификатора фейковых новостей.

model.fit(X_train,y_train,validation_data=(X_test,y_test),batch_size=64,epochs=40)

Шаг 9 — Проверка метрик модели.

pred = model.predict_classes(X_test)
confusion_matrix(y_test,pred)
  • Здесь, на этом этапе, мы просто печатаем Матрицу путаницы, чтобы проверить производительность нашей модели.

Шаг 10 — Проверка точности модели классификатора фейковых новостей.

accuracy_score(y_test,pred)

Дайте мне знать, если есть какие-либо вопросы по этой теме, связавшись со мной по электронной почте или LinkedIn. Я изо всех сил старался объяснить этот код.

Чтобы узнать больше о машинном обучении, глубоком обучении, компьютерном зрении, НЛП и проектах Flask, посетите мой блог — Проекты машинного обучения

Для дальнейшего объяснения кода и исходного кода посетите здесьhttps://machinelearningprojects.net/fake-news-classifier-using-lstm/

Итак, это все для этого блога, ребята, спасибо за то, что прочитали его, и я надеюсь, что вы возьмете что-то с собой после прочтения этого и до следующего раза 👋…

Прочитайте мой предыдущий пост: РАЗЛОЖЕНИЕ СИНГУЛЯРНОГО ЗНАЧЕНИЯ