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( 'english' ))

第一步是获取数据。 我们已经提供了 CSV 文件的链接; 但是,讨论生成数据的另一种方法也很重要。

其中一种方法是网页抓取。 为此,我们需要编写一个网络爬虫并指定您需要从中获取数据的站点。 但要小心,这种方法有两个问题。

首先,废弃许多网站可能是非法的,因此您需要注意这一点。 其次,数据将非常原始。 整个管道将附加一个步骤列表,以将原始数据转换为可用的 CSV 文件或数据集。 因此,我们使用带有组织数据的预设 CSV 文件。

但是,如果有兴趣,您可以查看 upGrad 的数据科学课程,其中有足够的可用资源以及对数据工程和网络抓取的适当解释。 请务必在此处查看这些内容

这就是我们导入数据集并附加标签的方式。 请注意我们如何从数据集中删除不必要的列。 如果需要更高的值,您可以保持这些列。 但现在,我们的假新闻检测项目只在文本和目标标签列上运行顺利。

代码:

df_text = pd.read_csv( 'fake_or_real_news.csv' ,编码= 'latin-1' )
df_text.columns = [ 'id' , 'title' , 'text' , 'label' ] df_text.drop(['id', 'title'], axis=1)

继续,下一步是清理现有数据。 为什么这一步是必要的? 至关重要的是要了解我们正在使用机器并教它区分假货和真实货品。 现在,我们有文本数据,但计算机处理数字。 因此,首先需要将它们转换为数字,而在此之前的一步是确保我们只转换那些理解所必需的文本。

清理管道的第一步是检查数据集是否包含任何要清除的额外符号。 它可以是网址或任何其他引用符号,例如 at(@) 或主题标签。 这是代码:

代码:

# 删除网址
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(文本)
words = [w for w in tokens if not w in stop_words]

下一步是至关重要的一步。 将令牌转换为有意义的数字。 此步骤也称为特征提取。 对于我们的应用程序,我们将使用 TF-IDF 方法为我们的机器学习管道提取和构建特征。

TF-IDF 本质上是指词频-逆文档频率。 正如名称所暗示的那样,我们通过其术语频率以及整个数据集或文档集合中术语的频率来收集有关数据集的信息。

TF-IDF 可以很容易地通过混合 TF 和 IDF 的值来计算。 这两个公式都涉及简单的比率。

TF = 没有。 术语出现在文档中的次数/术语总数。

IDF = log of (总文件数/出现该术语的文件数)

现在 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 中的 travel 函数将矩阵转换为数组。 y 值不能直接附加,因为它们仍然是标签而不是数字。 要将它们转换为 0 和 1,我们使用 sklearn 的标签编码器。

该编码器将标签文本转换为编号目标。 例如,假设我们有一个这样的标签列表:['real', 'fake', 'fake', 'fake']

我们本质上需要的是一个像这样的列表:[1, 0, 0, 0]。 标签编码器所做的是,它获取所有不同的标签并制作一个列表。 对于我们的示例,列表将是 ['fake', 'real']。

这是相同的实现:

代码:

X_text = tf_vector.transform(df_text[ 'text' ].ravel())
y_values = np.array(df_text[ 'label' ].ravel())

sklearn导入预处理
le = preprocessing.LabelEncoder()
le.fit(y_values) le.transform(y_values)

完成后,训练和测试拆分就完成了。 可以通过使用sklearn的预处理包,导入train test split函数来实现。

代码:

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 导入 accuracy_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 实现假新闻检测项目的方法。

请注意,这里有很多事情要做。 NLP 管道尚未完全完成。 还有许多其他可用功能可用于获得更好的特征提取。

另请阅读: Python 开源项目理念

假新闻适应技术的方式,需要越来越好的处理模型。 这些模型将更多地用于自然语言理解,而不是作为机器学习模型本身。 模型还可以根据使用的功能进行微调。 可以使数据集动态适应以使其适用于当前数据。 但这需要一个对当前新闻文章进行详尽训练的模型。

因此,如果有更多的数据可用,可以制作更好的模型,并提高假新闻检测项目的适用性 但内部方案和核心管道将保持不变。 解释的管道高度适用于您可能想要进行的任何实验。 随意尝试和玩不同的功能。

如果您对学习数据科学以走在快节奏的技术进步的前沿感到好奇,请查看 upGrad 和 IIIT-B 的数据科学执行 PG 计划,并为未来提升自己的技能。

用 Python 开发假新闻检测项目需要哪些必备技能?

Python 用于构建假新闻检测项目,因为它具有动态类型、内置数据结构、强大的库、框架和社区支持。 在 Python 中开发假新闻检测项目所需的其他必要技能是机器学习、自然语言处理和人工智能。 对于打算做这个项目的学习者来说,这些技能的知识是必须的。 学习者可以轻松地在线学习这些技能。

公司如何使用 Python 的假新闻检测项目?

由于大多数假新闻都是在社交媒体平台上发现的,因此很难区分真假新闻。 社交媒体平台和大多数媒体公司利用假新闻检测项目来自动确定正在传播的新闻是否是捏造的。 除了项目之外,大多数公司还使用机器学习来自动化查找假新闻的过程,而不是依靠人类来完成繁琐的任务。

python的其他一些实际应用是什么?

Python 具有广泛的实际应用程序。 Python 支持跨平台操作系统,这使得使用它开发应用程序更易于管理。 Python 用于为一些世界上最著名的应用程序提供支持,包括 YouTube、BitTorrent 和 DropBox。 Python 经常用于制作创新游戏。 Python 还用于机器学习、数据科学和人工智能,因为它有助于创建基于存储数据的重复算法。 在从网站提取大量数据方面,Python 是救命稻草,用户随后可以将这些数据用于各种实际操作,例如价格比较、职位发布、研发等。