2016年总统大选,Facebook与特朗普走在了风口浪尖,假新闻一度成为学术界的热门话题。这家社交媒体巨头受到了各方的抨击,因为它认为Facebook拒绝审查和核实其平台上发布的新闻的真实性是有害的。它纵容虚假新闻和误导性信息的传播,助长了阴谋论。例如,有传言称俄罗斯影响了那次选举的结果。多年后,马克·扎克伯格现身国会回答一系列问题,美国立法者指责这位Facebook首席执行官在2020年大选前放任政治虚假信息的传播。在紧张局势中,扎克伯格被问及政治广告活动缺乏事实核查。亚历山大·奥卡西奥-科尔特斯(AlexandriaOcasio-Cortez)问道:“我可以针对初选中的共和党人投放广告,说他们支持绿色新政吗?”扎克伯格吃了一惊,无法回答这个问题。越来越多的人意识到有必要对虚假内容采取行动。在社交媒体上阅读新闻是一把双刃剑。它既便宜又方便,人们可以及时了解全球事务,与他人分享新闻,分享自己的想法。然而,这种优势经常被病毒式营销所利用。例如,一些低质量的新闻即使包含虚假事件,这些新闻仍然会被传播。社交媒体上的假新闻有多种形式,人们创建恶意账户来传播假新闻,例如喷子、半机械人用户、喷子等。假新闻的迅速传播会对社会产生负面影响,它会助长错误的看法,而2016年总统大选期间最受欢迎的政治新闻本身就是一个虚假事实。因此,在媒体中寻找基于事实的新闻是非常有必要的。先停止你应该知道的,我们需要先了解一些概念:1.TF-IDF机器学习的一大困境是算法计算数字,而自然语言主要由文本组成,因此需要将文本转换为数字。这个过程称为文本向量化。它是机器学习的重要组成部分,有助于文本分析。向量化算法会产生不同的结果,因此需要谨慎选择。TF-IDF是一种统计度量,用于确定放置在一组文档中的文档中单词的相关性。可以使用TF-IDFVectorizer将文本转换为特征向量。它是通过将以下两个指标相乘计算得出的:术语频率是一个词在文档中出现的次数。逆文档频率是一个词在一组文档中出现的次数。2.被动攻击分类器被动攻击分类器是一种从大量数据中学习的在线学习算法。例如,系统每天24小时从Twitter收集推文,你想根据这些数据进行预测。但是,由于内存限制,这是不可行的,您不能在内存中存储这么多数据。被动攻击算法从这些示例中学习并在使用后立即丢弃它们,而不是将它们存储在内存中。这些算法被称为被动算法,因为它们在分类结果保持正确之前是温顺的。一旦他们发现计算错误,他们就会变得积极进取,更新和调整模型。3.混淆矩阵(Confusionmatrix)在机器学习分类中,如果输出要生成两个或两个以上的类,则用于性能衡量。有四种可能的结果:TruePositive-做出了积极的预测,结果证明是正确的。TrueNegative-预测是负面的,结果证明是真的。误报-预测是肯定的,但事实证明是错误的。假阴性——预测的结果是错误的。困境假设您用Python构建了一个Web抓取应用程序,用于收集来自社交媒体网络的所有新闻链接。您怎么知道这些网站上的信息是真实事件?1.解决方案使用Python搭建一个可以识别新闻链接是否真实的系统,首先使用sklearn为数据集创建一个TF-IDFVectorizer。TF-IDF的目的是将文本转换为特征向量,这样您就可以将它们用作估计器的输入。2.先决条件打开命令行,下载并安装Numpy。Numpy是numericalpython的首字母缩写,它提供对大量多维数组和矩阵的支持,以及几个有用的数学函数。运行以下命令:Pipinstallnumpy接下来,安装Pandas。Pandas将帮助您对数据执行大量操作,例如导入、准备、合并、重塑、连接、操作、分析和调整数据。它围绕DataFrame对象进行组织。运行以下命令:Pipinstallpandas最后,安装项目中最重要的sklearn库。它主要用于机器学习,并具有内置算法,包括用于模型选择、模式、聚类、回归和聚类的函数。运行以下命令:Pipinstallsklearn还需要安装JupyterLab。JupyterLab是一个基于Web的工具,用于收集Jupyter数据、代码和笔记本。它非常灵活,可以自定义以处理机器学习、科学计算和数据科学中的多个工作流。运行以下命令:Pipinstalljupyterlab安装完成后,可以在命令提示符中输入以下命令:C:>jupyterlabbrowser会打开一个新窗口,进入NewàConsole。选中文本框,在此处输入您的代码,然后按Shift+Enter运行您的命令。3.使用什么数据集?我们将使用一个包含7796行和4列的大型数据集。这些列代表:一个标识符新闻标题新闻文本标签(例如,这条新闻是真还是假)从这个链接下载数据集:https://drive.google.com/file/d/1er9NJTLUA3qnRuyhfzuN0XUsoIC4a-_q/viewforsocialmediaFact-checkingthenewsonImportallthelibrariesyoujustinstalledintheJupyterLabconsole.运行以下代码:importnumpyasnyimportpandasaspsimportitertoolsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.linear_modelimportPassiveAggressiveClassifierfromsklearn.metricsimportaccuracy_score,confusion_matrix将Excel数据转换为二维数据结构(矩阵),我们需要使用来自pandas的DataFrame,它是一个可以包含异常结构的二维数据结构。通过使用shape和head属性,您可以确定数据集的格式并检查行。运行以下代码:#Readfromthedatasetdf=ps.read_csv('C:\SocialFactCheckPython\news.csv')df.shapedf.head(6)然后使用DataFrame获取真假事实。运行以下代码:#Checkthelabelsfactcheck=df.labelfactcheck.head(7)一个常见的任务是将数据集分成两组:训练和测试。#Splitthedataseta_train,a_test,b_train,b_test=train_test_split(df['text'],factcheck,test_size=0.15,random_state=8)初始化TF-IDFVectorizer。设置英文停用词并指定最大文档频率为0.65。这意味着具有更高文档频率的术语将被删除。过滤掉用于自然语言处理的停用词。TF-IDFVectorizer用于将一组原始文档转换为具有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)现在初始化被动攻击算法并将其安装在tfidf_train和b_train上。TF-IDFVectorizer将帮助对测试集进行预测,并使用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-checkAccuracyIs{round(factcheckscore*100),2)}%')这表明该模型在区分真假新闻方面的准确率为94.43%。让我们看看它正确了多少次,运行以下代码:结果,有456个真阳性、442个真阴性、27个假阳性和49个假阴性。Python可用于检测社交媒体上的假新闻。从包含政治新闻的数据集中提取数据,使用TF-IDFVectorizer将其转化为向量,运行被动攻击算法,对模型进行拟合,最终得到94.43%的准确率。来源:unsplash如今,假新闻已经泛滥成灾,是时候“清理”它们了。
