<返回更多

使用Python检测虚假新闻

2020-06-14    
加入收藏

数据科学, 社交媒体真假

盖尔·库泽尔·迈耶斯

使用Python检测虚假新闻

> Photo by Shahadat Rahman on Unsplash

 

社交媒体网络上充斥着假新闻。 有没有办法检测到它?

2016年总统大选最有争议的方面之一是它在Facebook上的批评。 社交媒体庞然大物引起了来自各个方面的批评。 批评人士认为,Facebook拒绝核实和审查其平台上所列新闻的真实性是危险的。

几年后,马克·扎克伯格(Mark Zuckerberg)出现在国会并回答了一系列问题。 美国国会议员指责Facebook首席执行官允许2020年大选之前传播政治信息。

在所有紧张局势中,扎克伯格因缺乏对政治广告活动的事实核实而感到震惊。

"我可以针对主要目标的共和党人投放广告,说他们投票赞成绿色新政吗?" —亚历山大·奥卡西奥·科尔特斯—

扎克伯格大吃一惊,很难回答。 这些事件表明,群众对采取行动打击假冒内容的意识日益增强。

使用Python检测虚假新闻

> Photo by Kon Karampelas on Unsplash

 

在社交媒体上消费新闻是一双刃剑-价格适中,易于访问且可传播大量信息。 人们保持与全球事务的最新状态,交流思想。

然而,通常,这种优势被用于病毒式营销。 尽管包含错误事实,但还是有意宣传低质量新闻。 社交媒体上的虚假新闻可以采用多种形式。 创建了几个恶意帐户来传播假新闻,例如巨魔,电子人用户和社交机器人。

假新闻的迅速传播可能对社会产生负面影响。 它可能会引起误解,甚至危及生命。 2016年总统大选期间最受欢迎的政治新闻是基于虚假事实本身。 因此,在真实媒体上查找基于事实的新闻绝对必要。

你应该知道什么

在继续前进之前,了解某些概念很重要:

特遣部队

在机器学习中,存在一个主要的难题:算法计算数字。 但是,自然语言主要包含文本。 因此,需要将该文本转换为数字,该过程通常称为文本矢量化。 它是机器学习的重要组成部分,有助于进行文本分析。 向量化算法会产生不同的结果,因此您需要仔细选择一个。

TF-IDF是一种统计量度,用于确定单词在文档集中放置时在文档中的相关性。 它是通过将以下两个指标相乘得出的:

·术语频率是单词在文档中出现的次数。

·反向文档频率是单词在一组文档中出现的次数。

您将使用TfidfVectorizer将文本转换为特征向量。

被动攻击性分类器

被动进取算法是在线学习算法。 它们用于从大量数据中学习。 例如,您的系统正在从Twitter 24/7收集推文,而您想根据该数据进行预测。 由于存储限制,这是不可行的。

您不能在内存中存储太多数据。 被动进取算法从这些示例中学习并在使用后立即将其丢弃,而无需将其存储在内存中。

这些算法之所以称为被动算法,是因为它们在分类结果保持正确之前是服从的。 一旦发现计算错误,他们就会变得积极,更新并调整模型。

混淆矩阵

如果输出应该生成两个或更多类,则在机器学习分类中使用它进行性能测量。 有四个可能的结果:

·True Positive-您预测为肯定,结果是真实的。

·True Negative-您预测为否定,事实证明这是事实。

·False Positive 误报-您预测为肯定,但事实证明是错的。

·False Negative-您的预测否定,事实证明是错误的。

问题

假设您已经在Python中构建了一个Web抓取应用程序,该应用程序会收集来自社交媒体网络(例如Facebook)的所有新闻链接。 您应该如何知道这些网站上的信息是来自真实事实?

我们已经在Python中建立了一个可以识别新闻链接是否真实的系统。 我们已经使用sklearn为数据集创建一个TfidfVectorizer。 Tfidf的目的是将文本转换为特征向量。 这使您可以将它们用作估计器的输入。

先决条件

打开命令行并下载并安装Numpy。 Numpy是数字python的缩写。 它为大量的多维数组和矩阵以及一些有用的数学函数提供支持。 运行以下命令:

pip install numpy

接下来,安装Pandas。 熊猫可以帮助您对数据执行各种操作,例如导入,准备,合并,重塑,联接,处理,分析和调整数据。 它围绕DataFrame对象进行组织。 运行以下命令:

pip install pandas

最后,是时候安装我们项目中最重要的库sklearn了。 它主要用于机器学习。 它包含内置的算法,这些算法包含用于模型选择,模式,聚类,回归和聚类的功能。 运行以下命令:

pip install sklearn

您还需要安装Jupyter Lab。 JupyterLab是用于Jupyter数据,代码和笔记本的基于Web的工具。 它很灵活。 您可以自定义它以在机器学习,科学计算和数据科学中的多个工作流上工作。 运行以下命令:

pip install jupyter lab

安装后,您可以在命令提示符下键入以下命令。

C:> jupyter lab

浏览器打开一个新窗口。 转到"新建"à"控制台"。 检查下方的文本框-您将在此处输入代码。 输入Shift + Enter运行命令。

我们将使用什么数据集?

我们使用的大型数据集包含7796行和4列。 这些列表示:

您可以从此链接下载数据集。

社交媒体上的事实检查新闻

导入刚在JupyterLab控制台中安装的所有库。 运行以下代码:

import numpy as ny
import pandas as ps
import itertools
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import PassiveAggressiveClassifier
from sklearn.metrics import accuracy_score, confusion_matrix

我们需要将Excel数据转换为二维数据结构(矩阵)。 为此,我们将使用pandas中的DataFrame。 它是一个二维数据结构,可以包含异构列。 通过使用形状和头部属性,我们可以确定格式并检查数据集的行。 运行以下代码:

#从数据集中读取

df = ps.read_csv('C: SocialFactCheckPython  news.csv')
df.shape
df.head(6)
使用Python检测虚假新闻

 

使用DataFrame获取正确和错误的事实。 运行以下代码:

#检查标签

factcheck = df.label
factcheck.head(7)
使用Python检测虚假新闻

 

现在是常见的任务-将数据集分为两组:训练和测试。

#分割数据集

a_train,a_test,b_train,b_test = train_test_split(df ['text'],
	factcheck,
  test_size = 0.15,
  random_state = 8)

初始化一个TfidfVectorizer。 设置英语停用词并指定最大文档频率为0.65。 这表示将删除包含较高文档频率的术语。

我们总是过滤掉停用词以进行自然语言处理。 TfidfVectorizer用于将一组原始文档转换为TF-IDF功能矩阵。 随机状态用于指定随机生成的种子。 它确保火车分割测试始终是确定性的。

使用矢量化器来拟合和变换训练集和测试集。 .fit_transform学习词汇和反向文档频率。 作为响应,它创建术语文档矩阵。 .transform返回术语文档矩阵。 运行以下代码:

tfidf_vectorizer = TfidfVectorizer(stop_words =" english",max_df = 0.65)
tfidf_train = tfidf_vectorizer.fit_transform(a_train)
tfidf_test = tfidf_vectorizer.transform(a_test)

现在,您需要初始化PassiveAggressive分类器,该分类器将安装在tfidf_train和b_train上。 TfidfVectorizer有助于通过sklearn.metrics的准确性score()对测试集进行预测,并进行事实检查准确性。

在多标签分类中,准确性score()函数用于处理子集的准确性。 为样本预测的标签必须与其他子集中的相应标签完全匹配。

运行以下代码:

pclass = PassiveAggressiveClassifier(max_iter = 60)
pclass.fit(tfidf_train,b_train)
b_pred = pclass.predict(tfidf_test)
factcheckscore = accuracy_score(b_test,b_pred)
print(f’Fact-check Accuracy Is {round(factcheckscore*100,2)}%’)

这表明从假新闻中调用真实新闻时,我们的模型准确率为94.43%。 让我们看看它是对的。 运行以下代码:

使用Python检测虚假新闻

 

这意味着我们有456个真实阳性,442个真实阴性,27个假阳性和49个假阳性。

最后的想法

Python可用于检测社交媒体上的虚假新闻。 我们从包含政治新闻的数据集中提取数据,使用TfidfVectorizer将其转换为向量,运行
PassiveAggressiveClassifier,然后拟合模型。 最终,我们产生了94.43%的准确性。

(本文翻译自Gayle Kurtzer-Meyers的文章《Using Python to Detect Fake News》,参考:
https://medium.com/datadriveninvestor/using-python-to-detect-fake-news-7895101aebb8)

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>