使用Flair在Python中进行情感分析

Using Flair for sentiment analysis in Python.

欢迎来到情感分析系列博文的下一篇!今天,我们将探索Flair,这是Python情感分析库中使用的一种方法。

Photo by Brian Lundquist on Unsplash

情感分析是使用收集到的Twitter数据对电影“Extraction 2”进行的。您可以在kaggle.com上找到该数据,并从此链接下载。您可以在此链接中找到包括从Twitter提取数据,预处理,使用TextBlob进行情感分析以及使用Vader进行情感分析的完整系列情感分析。

Flair情感分析:一种强大的自然语言处理库

Flair是由Zalando Research [1]开发的自然语言处理库,专注于情感分析任务。它使用序列标记的深度学习方法,训练模型以预测文本中每个单词或标记的情感标签 [2]。这使得模型能够捕捉句子或文档中单词或短语所表达的情感。Flair提供了多种语言的预训练模型 [3],可以在不需要大量初始训练的情况下使用。此外,它还支持使用与特定应用程序或领域相关的独特数据集对预训练模型进行微调。

Flair的主要优势是它能够提取上下文信息 [2],考虑附近的单词和句子结构,更全面地理解复杂和混乱的文本中所传达的情绪。在使用Flair预测输入的情感之前,需要先对文本数据进行预处理,并加载和使用预训练模型。用户友好且简单的API使得将情感分析功能集成到自然语言处理应用程序中更加容易。Flair是学术界和开发人员创建精确情感分析模型的有效工具,适用于各种应用,包括社交媒体监控、客户反馈分析和舆情挖掘 [2]。

注意:要安装Flair,我们可以使用pip install flair

classifier = TextClassifier.load('en-sentiment')for index, row in df.iterrows():    text = row['tokens']      sentence = Sentence(text)    classifier.predict(sentence)    sentiment = sentence.labels[0].value    score = sentence.labels[0].score    df.loc[index, 'sentiment'] = sentiment    df.loc[index, 'score'] = scoreprint(df.head())

下面是使用Flair进行情感分析的主要代码片段。

# 加载预训练的情感分析模型classifier = TextClassifier.load('en-sentiment')# 遍历DataFrame中的每一行 # :( 这真的很耗时间 :(for index, row in df.iterrows():    text = row['tokens']      sentence = Sentence(text)        # 预测当前句子的情感    classifier.predict(sentence)        # 获取预测的情感和得分    sentiment = sentence.labels[0].value    score = sentence.labels[0].score        # 更新DataFrame中的情感和得分    df.loc[index, 'sentiment'] = sentiment    df.loc[index, 'score'] = score# 打印DataFrame的'sentiment'列print(df['sentiment'])

代码示例使用Flair包将情感分类到DataFrame中。使用已经训练好的情感分析模型处理DataFrame中的每个条目。使用分类器确定每个文本的情感和得分预测。然后将预测的情感和得分添加到DataFrame中。

以上代码添加了两列新的列,它们是

Image source: From the author.

可视化

接下来,将matplotlib库导入为plt。代码计算DataFrame的‘sentiment’列中每个情感类别的出现次数,并将计数存储在sentiment_counts变量中。然后创建一个条形图。

import matplotlib.pyplot as plt# 计算每个情感标签的出现次数sentiment_counts = df['sentiment'].value_counts()# 绘制饼图plt.pie(sentiment_counts.values, labels=sentiment_counts.index, autopct='%1.1f%%')plt.title('情感分析结果')plt.show()# 打印每个情感的计数for sentiment, count in sentiment_counts.items():    print(f"{sentiment}: {count}")
图片来源:来自作者。

结论

根据使用Flair对从Twitter上获取的Extraction 2电影数据进行情感分析的结果,我们有以下情感计数:

消极情感:6073

积极情感:3926

我们可以看到,它只包含消极和积极情感。有趣的是,它忽略了中性情感。这其中一个明显的原因是Flair的预训练情感分析模型中通常包含积极和消极情感标签,但没有中性情感。

我们可以通过训练一个自定义模型来扩展Flair的情感分析能力,以包括中性情感标签。然而,请注意,这需要收集或注释一个合适的数据集,并针对所需的情感分类任务专门训练模型。

基于以上情感计数,看起来该电影收到了消极的反馈,这是由于预训练模型中缺乏中性情感。所以它可能不能反映我们所期望的清晰分析。在我们的数据上构建一个自定义模型并进行进一步分析是明智的选择。

参考资料

[1] Zalando Research. (n.d.). Flair — a powerful NLP library. 检索自 https://github.com/zalandoresearch/flair

[2] Akbik, A., Blythe, D., & Vollgraf, R. (2018). Contextual String Embeddings for Sequence Labeling. 检索自 https://www.aclweb.org/anthology/C18-1139/

[3] Akbik, A., Bergmann, T., Blythe, D., Rasul, K., Schweter, S., Vollgraf, R., & Zalando SE. (2019). FLAIR: An Easy-to-Use Framework for State-of-the-Art NLP. 检索自 https://www.aclweb.org/anthology/N19-4010/

关注我,成为我在VoAGI上的数据分析师之旅的一部分。

让我们在Twitter上保持联系,或者您可以通过[email protected]给我发送电子邮件,以进行项目合作、知识共享或指导。