使用预训练的 VADER 模型进行 NLTK 情绪分析

本文是使用 Python 和开源自然语言工具包的情感分析系列的第三篇文章。在本文中,我们将介绍可用于开始进行实际 NLP 分析的技术。

NLTK 除了文本语料库外,还包括预训练模型。VADER Sentiment Lexicon 模型,旨在对社交媒体进行情绪分析。让我们看看它是如何工作的。

如果您曾被要求以 1 到 10 的等级对您在客户支持方面的体验进行评分,那么您可能已经为净推荐值 (NPS) 做出了贡献。使用这种客户体验方法,您通常会寻找促销员,他们的体验评分为 9-10,因为他们是您品牌的拥护者,并且会继续购买、消费并告诉他人他们的体验。

在 NPS 的背景下,批评者是指以 0-6 分对他们的体验进行评分的任何人。他们不开心,经常通过负面的口碑传播他们的不满。这些客户通常是外展的优先事项。7-8 的值被认为是被动的、满意的和中立的。

情绪分析可以为 NPS 提供见解,但不需要我们的受众直接进行调查。情绪分析可以通过评估人们在社交媒体或公共论坛上对您的评价来帮助您找到支持者和批评者。

在为自然语言处理寻找数据中,我们讨论了用于 NLP 的文本数据集以及通过从 Reddit 讨论中收集帖子和评论来创建自定义数据集的技术。

在本文中,我们将介绍可用于开始进行实际 NLP 分析的技术。我们将以上一篇文章中收集的数据为基础。

VADER 情绪分析仪

VADER(Valence Aware Dictionary and sEntiment Reasoner)于 2014 年开发,是一个预先训练的模型,它使用基于规则的值来调整来自社交媒体的情绪。它评估消息的文本,不仅可以评估正面和负面,还可以评估这种情绪的强度。

它使用可以评估的术语词典。从 GitHub 存储库中,这包括以下示例:

  • 否定 – 一个改变短语含义的修饰语(“不太好”)。
  • 收缩 – 否定,但更复杂(“不是很好”)。
  • 标点符号 – 增加强度(“太棒了!!!”)。
  • 俚语 – 俚语的变体,例如“kinda”、“sux”或“hella”。

它甚至能够理解首字母缩略词(“lol”)和表情符号(❤)。

评分是属于每个类别的文本比例的比率。语言不是非黑即白的,所以很少看到完全正面或完全负面的分数。由于该模型已经针对社交媒体进行了预训练,因此它应该非常适用于用户在 Reddit 上发表的评论。

让我们首先看一个之前从 Reddit 检索到的评论中的示例。

Comments[116].body     # Output: 'This is cool!'

# If you haven’t already, download the lexicon
nltk.download('vader_lexicon')

# Initialize the VADER sentiment analyzer
from nltk.sentiment.vader import SentimentIntensityAnalyzer
analyzer = SentimentIntensityAnalyzer()
analyzer.polarity_scores(comments[116].body)

该分析的输出是:

{'neg': 0.0, 'neu': 0.436, 'pos': 0.564, 'compound': 0.3802}

在 Reddit 上,类似“这很酷!”的帖子 是高度赞扬。

我们已下载 ( nltk.download('vader_lexicon')) 并导入 ( from nltk.sentiment.vader import SentimentIntensityAnalyzer) Vader 情绪分析器,并使用它从评论集合 ( ) 中对特定评论进行评分analyzer.polarity_scores(comments[116].body)

的结果polarity_scores为我们提供了使用否定词、中性词和肯定词选择的数值。复合值反映了整体情绪,从 -1 表示非常消极到 +1 表示非常积极。

您可以从 pydoc 页面找到更多关于 NLTK 情绪使用的信息:https ://www.nltk.org/api/nltk.sentiment.html 。

对 Reddit 帖子的所有评论的情绪

让我们看一下这篇文章的整体情绪,而不仅仅是一条评论。有 119 条评论需要分析,我们会将它们放入桶中以保持计数。

len(comments)  # Output: 119

# Initializing a dictionary to keep tally of results
result = {'pos': 0, 'neg': 0, 'neu': 0}
for comment in comments:
    score = analyzer.polarity_scores(comment.body)
    if score['compound'] > 0.05:
        result['pos'] += 1
    elif score['compound'] < -0.05:
        result['neg'] += 1
    else:
       result['neu'] += 1

print(result)

输出是:

{'pos': 65, 'neg': 25, 'neu': 29}

我们了解到,对于这篇文章,总体上的评论是积极的。

如果您开始使用这样的模型分析您自己的帖子,您可能需要调高或调低阈值。例如,仅查看复合分数 +/- 0.5 而不是 0.05 会突出显示更极端的意见。

你能用这些信息做什么?如果您试图优先考虑如何与您的社区互动,您可能会查看积极的评论并将他们视为您的支持者。如果您试图赢回批评者,您可能会关注负面分数,看看您是否可以从他们的评论中找到建设性的反馈,以改善您的产品或个人外展工作以解决特定客户的问题。

下一步

如您所见,我们可以从各种来源获取文本并进行快速分析以了解正面和负面情绪。这是了解产品、服务或内容是否受欢迎的有用反馈。它还可以帮助优先考虑社区参与。

作为下一步,我们可以考虑使用 VADER 进行 NLTK 情绪分析的优缺点。

我们还可以通过利用机器学习方法来理解语言并尝试改进我们在 NLTK 和机器学习方面的结果,从而进一步推进这个分析项目。

发表评论

邮箱地址不会被公开。 必填项已用*标注