在 Python 中开始使用社交媒体情感分析

学习自然语言处理的基础知识,并探索两个有用的 Python 包。
120 位读者喜欢这篇文章。
Raspberry Pi and Python

Raspberry Pi 基金会。CC BY-SA 4.0。

自然语言处理 (NLP) 是一种机器学习类型,它处理口语/书面语言与计算机辅助语言分析之间的相关性。我们在日常生活中体验到 NLP 的众多创新,从写作辅助和建议到实时语音翻译和解释。

本文研究了 NLP 的一个特定领域:情感分析,重点是确定输入语言的正面、负面或中性性质。本文将解释 NLP 和情感分析背后的背景知识,并探索两个开源 Python 包。第 2 部分 将演示如何开始构建您自己的可扩展情感分析服务。

在学习情感分析时,对 NLP 有一般的了解会很有帮助。本文不会深入探讨数学原理,而是旨在阐明 NLP 中的关键概念,这些概念对于以实际方式将这些方法融入您的解决方案至关重要。

自然语言和文本数据

一个合理的起点是定义:“什么是自然语言?” 它是我们人类彼此交流的方式。主要的交流方式是口头和文本。我们可以更进一步,只关注文本交流;毕竟,生活在 Siri、Alexa 等普及的时代,我们知道语音离文本只有一组计算之遥。

数据格局和挑战

将我们自己限制在文本数据上,关于语言和文本我们能说些什么呢?首先,语言,尤其是英语,充满了规则的例外、含义的多样性以及上下文差异,这些差异甚至可能使人类翻译感到困惑,更不用说计算机翻译了。在小学,我们学习词性和标点符号,从说我们的母语中,我们获得了关于哪些词在寻找意义时不太重要的直觉。后者的例子是词性,例如“a”、“the”和“or”,在 NLP 中被称为停用词,因为传统上 NLP 算法对意义的搜索在序列中遇到这些词之一时停止。

由于我们的目标是自动化将文本分类为属于情感类别的过程,我们需要一种以计算方式处理文本数据的方法。因此,我们必须考虑如何向机器表示文本数据。众所周知,利用和解释语言的规则很复杂,并且输入文本的大小和结构可能会有很大差异。我们需要将文本数据转换为数字数据,这是机器和数学选择的形式。这种转换属于特征提取领域。

在提取输入文本数据的数字表示之后,一个改进可能是,给定一个输入文本主体,确定上面列出的词性的一组定量统计数据,并可能根据它们对文档进行分类。例如,大量的副词可能会让文案撰稿人感到厌烦,或者过度使用停用词可能有助于识别内容填充的学期论文。诚然,这可能与我们的情感分析目标没有太大关系。

词袋

当您评估一个文本语句是正面还是负面时,您使用哪些上下文线索来评估其极性(即,文本是否具有正面、负面或中性情感)?一种方法是内涵形容词:被称为“令人厌恶”的东西被认为是负面的,但如果同一件事被称为“美丽”,您会将其判断为正面的。根据定义,俗语给人一种熟悉感,通常是积极的,而脏话可能是敌意的迹象。文本数据还可以包括表情符号,这些表情符号带有内在的情感。

理解单个词的极性影响为 词袋 (BoW) 文本模型提供了基础。它考虑一组词或词汇表,并提取关于这些词在输入文本中存在性的度量。词汇表是通过考虑极性已知的文本形成的,称为标记训练数据。从这组标记数据中提取特征,然后分析特征之间的关系,并将标签与数据关联。

“词袋”这个名称说明了它利用的东西:即,没有考虑空间局部性或上下文的单个词。词汇表通常由训练集中出现的所有词构建,然后倾向于修剪。停用词,如果未在训练前清除,则由于其高频率和低上下文效用而被删除。很少使用的词也可以删除,因为它们缺乏为一般输入案例提供的信息。

然而,重要的是要注意,您可以(并且应该)进一步考虑词的出现,而不仅仅是在训练数据的单个实例中使用它们,或者所谓的 词频 (TF)。您还应该考虑一个词在所有输入数据实例中的计数;通常,词在所有文档中的不常见性是值得注意的,这被称为 逆文档频率 (IDF)。这些指标注定会在关于该主题的其他文章和软件包中被提及,因此了解它们只能有所帮助。

BoW 在许多文档分类应用中很有用;然而,在情感分析的情况下,当利用缺乏上下文意识时,事情可能会被操纵。考虑以下句子

  • 我们不喜欢这场战争。
  • 我讨厌下雨天,幸好今天阳光明媚。
  • 这不是生死攸关的问题。

对于人类翻译来说,这些短语的情感是值得怀疑的,并且由于严格关注单个词汇词的实例,对于机器翻译来说也很困难。

词组,称为 n-gram,也可以在 NLP 中考虑。二元语法考虑两个相邻词的组合,而不是(或除了)单个 BoW。这应该缓解上述“不喜欢”的情况,但由于其上下文意识的丧失,它仍然容易被操纵。此外,在上面的第二个句子中,句子的后半部分的情感上下文可能被认为否定了前半部分。因此,上下文线索的空间局部性也可能在这种方法中丢失。从务实的角度来看,使事情复杂化的是从给定输入文本中提取的特征的稀疏性。对于一个完整而庞大的词汇表,为每个词维护一个计数,这可以被认为是一个整数向量。大多数文档的向量中将有大量的零计数,这会给操作增加不必要的空间和时间复杂度。虽然已经提出了许多巧妙的方法来降低这种复杂性,但这仍然是一个问题。

词嵌入

词嵌入是一种分布式表示,它允许具有相似含义的词具有相似的表示。这是基于使用实值向量来表示词与它们所保持的联系,就像它一样。重点是词的使用方式,而不是简单地它们的存在。此外,词嵌入的一个巨大的务实优势是它们专注于密集向量;通过摆脱具有相应数量的零值向量元素的词计数模型,词嵌入在时间和存储方面提供了更有效的计算范式。

以下是两种突出的词嵌入方法。

Word2vec

这些词嵌入中的第一个,Word2vec,是在 Google 开发的。当您深入研究 NLP 和情感分析时,您可能会看到提到这种嵌入方法。它使用连续词袋 (CBOW) 或连续跳跃图模型。在 CBOW 中,词的上下文是在训练期间根据围绕它的词学习的。连续跳跃图学习倾向于围绕给定词的词。尽管这超出了您可能需要解决的范围,但如果您曾经面临生成自己的词嵌入的任务,Word2vec 的作者提倡 CBOW 方法用于速度和评估常用词,而跳跃图方法更适合于稀有词更重要的嵌入。

GloVe

第二个词嵌入,词表示的全局向量 (GloVe),是在斯坦福大学开发的。它是 Word2vec 方法的扩展,旨在将通过经典全局文本统计特征提取获得的信息与 Word2vec 确定的局部上下文信息相结合。在实践中,GloVe 在某些应用中优于 Word2vec,而在其他应用中则不如 Word2vec 的性能。最终,您的词嵌入的目标数据集将决定哪种方法是最佳的;因此,了解每种方法的存在和高级机制是很好的,因为您可能会遇到它们。

创建和使用词嵌入

最后,了解如何获取词嵌入是有用的;在第 2 部分中,您将看到我们站在巨人的肩膀上,就像它一样,通过利用社区中其他人的大量工作。这是一种获取词嵌入的方法:即,使用现有的经过训练和验证的模型。实际上,英语和其他语言存在无数模型,并且有可能其中一个模型可以满足您的应用程序的开箱即用需求!

如果不是,就开发工作而言,频谱的另一端是训练您自己的独立模型,而不考虑您的应用程序。本质上,您将获取大量的标记训练数据,并可能使用上述方法之一来训练模型。即使这样,您仍然只处于获得对输入文本数据的理解的阶段;然后,您需要开发一个特定于您的应用程序的模型(例如,分析软件版本控制消息中的情感效价),这反过来又需要自己的时间和精力。

您还可以在特定于您的应用程序的数据上训练词嵌入;虽然这可以减少时间和精力,但词嵌入将是特定于应用程序的,这将降低可重用性。

可用的工具选项

您可能想知道,考虑到所需的密集时间和计算能力,您将如何才能解决您的问题。实际上,开发可靠模型的复杂性可能令人生畏;但是,有一个好消息:已经有许多经过验证的模型、工具和软件库可用,它们可能提供您所需的大部分内容。我们将专注于 Python,它方便地为这些应用程序提供了大量的工具。

SpaCy

SpaCy 提供了许多语言模型,用于解析输入文本数据和提取特征。它经过高度优化,并被吹捧为同类库中最快的。最重要的是,它是开源的!SpaCy 执行标记化、词性分类和依存关系注释。它包含用于为超过 46 种语言执行此操作和其他特征提取操作的词嵌入模型。您将在本系列的第二篇文章中看到如何将其用于文本分析和特征提取。

vaderSentiment

vaderSentiment 包提供了正面、负面和中性情感的度量。正如 原始论文 的标题(“VADER:用于社交媒体文本情感分析的简约规则模型”)所示,这些模型是专门为社交媒体文本数据开发和调整的。VADER 是在大量人工标记数据上训练的,其中包括常见的表情符号、UTF-8 编码的表情符号以及口语术语和缩写(例如,meh、lol、sux)。

对于给定的输入文本数据,vaderSentiment 返回一个包含极性评分百分比的 3 元组。它还提供了一个单一的评分度量,称为 vaderSentiment 的复合指标。这是一个实值度量,范围在 [-1, 1] 内,其中情感被认为对于大于 0.05 的值是正面的,对于小于 -0.05 的值是负面的,否则是中性的。

第 2 部分 中,您将学习如何使用这些工具将情感分析功能添加到您的设计中。

标签
Picture of Michael's face
Michael McCune 是红帽新兴技术部门的软件开发人员。他是多个 radanalytics.io 项目的积极贡献者,也是 OpenStack API 特别兴趣小组的核心审阅者。自从加入红帽以来,他一直在为云平台开发和部署应用程序。
User profile image.
Jason Schlessman 是红帽公司的数据科学家和机器学习工程师。自 2017 年加入红帽以来,他一直在开发可扩展的基于云的机器学习和数据科学解决方案。在加入红帽之前,Jason 开发了计算机视觉和传感器融合驱动的嵌入式系统,用于监控人类活动。

评论已关闭。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.