机器学习在新闻真伪鉴别中的应用

在本千年,技术发展迅速,带来了众多新闻渠道的出现,包括电子媒体(如在线和电视)和印刷媒体。平台和渠道数量的增加也带来了日益激烈的竞争。为了吸引观众的注意力,尤其是电子媒体,有时会采用耸人听闻的方式来吸引眼球,有时甚至涉及到假新闻。机器学习在区分真实新闻和假新闻方面显示出了潜力。本文将使用数据集来探讨机器学习在检测假新闻中的技术细节。

数据集

本文使用的数据集包含了真假新闻,可以通过以下链接下载:

https://www.kaggle.com/datasets/clmentbisaillon/fake-and-real-news-dataset

导入依赖

首先,将导入以下代码行中提到的依赖项:

import numpy as np import pandas as pd import re from nltk.corpus import stopwords from nltk.stem.wordnet import WordNetLemmatizer import string from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score, confusion_matrix

首先导入numpy、pandas和re。‘re’是一个内置包,代表正则表达式。然后,将导入nltk中的stopwords,stopwords是一些不太重要的词,如a、an等。接下来,将导入WordNetLemmatizer进行词形还原,这是一种将词转换为其基本形式的过程。

词形还原

词形还原是将词转换为其基本形式的过程。还有一个过程叫做词干提取,它也做同样的事情,但词形还原比词干提取更具上下文相关性。将使用nltk.stem中的WordNetLemmatizer进行词形还原。

数据预处理

在开发数据模型之前,需要对数据进行预处理。使用shape函数,可以识别数据的行数和列数。

data.shape

数据显示有44898行和5列。然后,使用head()函数打印数据的前5行。

data.head()

使用isnull()函数查找数据集中的缺失值。

data.isnull()

输出显示数据集中没有缺失或空值。接下来,将列合并到一个名为‘content’的公共pandas数据框中。

data['content'] = data['title'] + ' ' + data['text']

然后,使用print函数生成content的输出。

print(data['content'])

现在,将数据和目标分开。

X = data.drop(columns='Target', axis=1)Y = data['Target']

然后,打印存储在变量X和Y中的数据和目标。

print(X)print(Y)

将进行词形还原,将词转换为其基本形式。

def clean(doc): stop = stopwords.words('english') punct = string.punctuation wnl = WordNetLemmatizer() stopwords_free = " ".join([i for i in doc.lower().split() if i not in stop]) punctuations_free = "".join(ch for ch in stopwords_free if ch not in punct) normalized = " ".join(wnl.lemmatize(word) for word in punctuations_free.split()) return normalized

然后,打印content数据框。

print(data['content'])

接下来,将使用.values方法查看字典的值作为列表。还将分离存储在X和Y中的数据和目标,并打印两者。

X = data['content'].valuesY = data['Target'].valuesprint(X)print(Y)

现在,将使用TfidfVectorizer将文本数据转换为数值数据。

vectorizer = TfidfVectorizer()vectorizer.fit(X)X = vectorizer.transform(X)

已经对X进行了转换。现在,将打印X以查看转换结果。

print(X)

从上述输出中,可以推断出‘X’已成功转换。接下来,将数据集分割为训练和测试数据。

X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, stratify= Y, random_state=5)

在上述代码行中,测试数据将是数据集的20%。

模型开发

模型开发的第一步是训练模型。这里,将使用逻辑回归分类算法来区分假新闻和真新闻。这将通过拟合数据来完成。

model = LogisticRegression()model.fit(X_train, Y_train)

模型已经开发完成,现在将评估模型。

模型评估是通过准确度分数和混淆矩阵来完成的。首先,将使用以下代码行获得训练数据集的准确度分数。

X_train_prediction= model.predict(X_train)training_data_accuracy = accuracy_score(X_train_prediction, Y_train)

然后,将找到训练数据集的准确度分数。

print('训练数据的准确度分数 : ', training_data_accuracy)

从上述输出中,训练数据集的准确度为99.19%,几乎达到了完美的100%。接下来,将找到测试数据集的准确度分数,代码与为训练数据集所做的非常相似。

X_test_prediction = model.predict(X_test)test_data_accuracy = accuracy_score(X_test_prediction, Y_test)

然后,将找到测试数据集的准确度分数。

print('测试数据的准确度分数 : ', test_data_accuracy)

从上述输出中,测试数据集的准确度为98.99%,几乎达到了99%。最后一步是生成一个混淆矩阵,以识别数据集被分类为真阳性、真阴性、假阳性和假阴性的百分比。混淆矩阵如下所示:

预测:是 预测:否 总计 实际:是 a (T.P) b (F.N) a+b (实际是) 实际:否 c (F.P) d (T.N) c+d (实际否) 总计 a+c (预测是) b+d (预测否) a+b+c+d

在这里,T.P = 真阳性,F.N = 假阴性,F.P = 假阳性,T.N = 真阴性。

print(confusion_matrix(X_test_prediction,Y_test))

在这个数据集中,模型可以将4243分类为T.P,将4647分类为F.P,表明误分类的百分比很小。

  • 理解了如何导入依赖项,特别是在自然语言处理方面。
  • 了解了词形还原和向量化在数据预处理中的应用。
  • 逻辑回归作为二元分类的强大工具,能够以99%的准确度区分假新闻和真新闻。
  • 误分类的百分比非常小,只有49个被分类为假阴性,41个被分类为假阳性。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485