【 BERTopic应用 02/3】 分析卡塔尔世界杯推特数据
摄影:Fauzan Saari on Unsplash
一、说明
这是我们对世界杯推特数据分析的第3部分,我们放弃了。我们将对我们的数据进行情绪分析,以了解人们对卡塔尔世界杯的感受。我将在这里介绍的一个功能强大的工具包是Hugging Face,您可以在其中找到各种模型,任务,数据集,它还为刚开始学习机器学习的人提供课程。在这篇文章中,我们将使用一个情绪分析模型和拥抱面孔令牌来完成我们的任务。
二、情绪分析
情感分析是使用自然语言处理(NLP)来识别,提取和研究情感状态和主观信息。我们可以将这种技术应用于客户评论和调查响应,以对我对产品或服务的意见。
让我们看几个例子:
- 我喜欢今天的天气!标记: 正面
- 天气预报说明天会多云。标签: 中性
- 雨不会停。野餐计划被推迟了。无赖。。。标签: 负面
上面的例子清楚地显示了推文的极性,因为文本的结构很简单。以下是一些难以轻易发现情绪的挑战性案例。
- 我不喜欢下雨天。(否定)
- 我喜欢在刮风的时候跑步,但不会推荐给我的朋友。(有条件的积极情绪,难以分类)
- 一杯好咖啡真的需要时间,因为它让我等了30分钟才喝一口。(讽刺)
现在我们已经介绍了什么是情绪分析以及如何应用这种技术,让我们学习如何在我们的 Twitter 数据上实现这种方法。
遇见“推特-罗伯塔-基地-情绪-最新"
用于情绪分析的 Twitter-roBERTa-base 是一个 RoBERTa-base 模型,从 124 年 2018 月到 2021 年 <> 月在 ~<>M 条推文上训练,并使用 TweetEval 基准对情绪分析进行了微调。我不会深入探讨 RoBERTa-base 模型的细节,但简单地说,RoBERTa 从预训练过程中删除了下一句预测 (NSP) 任务,并引入了动态掩码,因此掩码标记在训练期间会发生变化。对于更详细的评论,我建议阅读Suleiman Khan的文章和Chandan Durgia的文章。
要启动此模型,我们可以使用由Hugging Face团队创建的推理API。推理 API 允许您对 NLP、音频和计算机视觉中的任务进行文本文本和评估 80, 000 多个机器学习模型。查看此处以获取详细文档。它很容易使用推理API,您只需这样做即可获得您的拥抱脸令牌(它是免费的)。首先,您应该创建一个拥抱脸帐户并注册。然后,单击您的个人资料并转到设置。
- 读取:如果您只需要从拥抱人脸中心读取内容(例如,在下载私有模型或进行推理时),请使用此角色。
- 写入:如果需要创建内容或将内容推送到存储库(例如,在训练模型或修改模型卡时),请使用此令牌。
由作者创建
User access tokens
现在我们有了我们需要的一切,让我们做一些分析!
三、准备我们的数据
首先,我们需要导入一些依赖项并加载数据。对我们拥有的 10, 000 条推文运行情绪分析需要一些时间。出于演示目的,我们将从池中随机抽取 300 条推文。
import pandas as pd
import pickle
import requests
import randomwith open('world_cup_tweets.pkl', 'rb') as f:data = pickle.load(f)tweets = data.Tweet_processed.to_list()
tweets = random.sample(tweets, 300)
四、运行分析
然后我们将语言模型和我们的拥抱脸令牌分别传递给变量。
model = "cardiffnlp/twitter-roberta-base-sentiment-latest"
hf_token = "YOUR OWN TOKEN"
我们定义了一个采用单个参数的分析函数:数据。此函数将我们的 Twitter 数据转换为 JSON 格式,其中包含对传递给函数的输入数据的模型推理结果。
API_URL = "https://api-inference.huggingface.co/models/" + model
headers = {"Authorization": "Bearer %s" % (hf_token)}def analysis(data):payload = dict(inputs=data, options=dict(wait_for_model=True))response = requests.post(API_URL, headers=headers, json=payload)return response.json()
我们初始化一个空列表,以存储每条推文的情绪分析结果。我们对列表中的每条推文使用循环。然后我们使用 try-except 块技术:
- 对于可以分析的推文,我们调用我们定义的函数分析,将当前推文作为输入,并从返回的列表中检索第一个结果。此结果应为字典列表,每个词典都包含情绪标签和分数。我们使用内置的 max 函数在情绪结果中查找得分最高的字典。我们将一个新词典附加到tweets_analysis列表中,其中包含推文及其相应的标签,其中包含得分最高的情绪。
- 对于无法分析的推文,我们使用 except 块,该块捕获 try 块中发生的任何异常并打印错误消息。情绪分析功能可能无法分析某些推文,因此包含此块以处理这些情况。
tweets_analysis = []
for tweet in tweets:try:sentiment_result = analysis(tweet)[0]top_sentiment = max(sentiment_result, key=lambda x: x['score']) # Get the sentiment with the higher scoretweets_analysis.append({'tweet': tweet, 'sentiment': top_sentiment['label']})except Exception as e:print(e)
然后我们可以将数据加载到数据框中并查看一些初步结果。
# Load the data in a dataframe
df = pd.DataFrame(tweets_analysis)# Show a tweet for each sentiment
print("Positive tweet:")
print(df[df['sentiment'] == 'positive']['tweet'].iloc[0])
print("\nNeutral tweet:")
print(df[df['sentiment'] == 'neutral']['tweet'].iloc[0])
print("\nNegative tweet:")
print(df[df['sentiment'] == 'negative']['tweet'].iloc[0])
# Outputs: (edited by author to remove vulgarity)Positive tweet:
Messi, you finally get this World Cup trophy. Happy ending and you are officially called球王 Neutral tweet:
Nicholas the Dolphin picks 2022 World Cup Final winner Negative tweet:
Yall XXXX and this XXXX world cup omg who XXXX CARESSS
我们还应该使用 groupby 函数来查看样本中有多少推文是正数或负数。
sentiment_counts = df.groupby(['sentiment']).size()
print(sentiment_counts)# Outputs:
sentiment
negative 46
neutral 63
positive 166
dtype: int64
既然我们在这里,为什么不使用饼图来可视化结果:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(6,6), dpi=100)
ax = plt.subplot(111)
sentiment_counts.plot.pie(ax=ax, autopct='%1.1f%%', startangle=270, fontsize=12, label="")
由作者创建
似乎大多数人对卡塔尔世界杯感到满意。伟大!
人们在正面和负面推文中谈论什么?我们可以使用词云来显示这些组中的关键字。
# pip install first if you have not installed wordcloud in your environment from wordcloud import WordCloud
from wordcloud import STOPWORDS# Wordcloud with positive tweets
positive_tweets = df[df['sentiment'] == 'positive']['tweet']
stop_words = ["https", "co", "RT"] + list(STOPWORDS)
positive_wordcloud = WordCloud(max_font_size=50, max_words=50, background_color="white", stopwords = stop_words).generate(str(positive_tweets))
plt.figure()
plt.title("Positive Tweets - Wordcloud")
plt.imshow(positive_wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()# Wordcloud with negative tweets
negative_tweets = df[df['sentiment'] == 'negative']['tweet']
stop_words = ["https", "co", "RT"] + list(STOPWORDS)
negative_wordcloud = WordCloud(max_font_size=50, max_words=50, background_color="white", stopwords = stop_words).generate(str(negative_tweets))
plt.figure()
plt.title("Negative Tweets - Wordcloud")
plt.imshow(negative_wordcloud, interpolation="bilinear")
plt.axis("off")
plt.show()
由作者创建

五、总结
现在我希望你已经学会了如何在拥抱脸中使用推理 API 对推文进行情感分析。这是一个功能强大的工具,高度适用于各个领域。关注我以获取更多想法和技术。
相关文章:

【 BERTopic应用 02/3】 分析卡塔尔世界杯推特数据
摄影:Fauzan Saari on Unsplash 一、说明 这是我们对世界杯推特数据分析的第3部分,我们放弃了。我们将对我们的数据进行情绪分析,以了解人们对卡塔尔世界杯的感受。我将在这里介绍的一个功能强大的工具包是Hugging Face,您可以在…...
TypeScript教程(三)变量声明
一、变量声明 变量是一种使用方便的占位符,用于引用计算机内存地址,可以将变量看做存储数据的容器 命名规则: 1.变量名称可以包含数字和字母 2.除了下划线_和美元$符号外,不能包含其他特殊字符,包括空格 3.变量名…...

【数据结构】堆的实现,堆排序以及TOP-K问题
目录 1.堆的概念及结构 2.堆的实现 2.1初始化堆 2.2销毁堆 2.3取堆顶元素 2.4返回堆的大小 2.5判断是否为空 2.6打印堆 2.7插入元素 2.8堆的向上调整 2.9弹出元素 2.10堆的向下调整 3. 建堆时间复杂度 4. 堆的应用 4.1 堆排序 4.2 TOP-K问题 1.堆的概念及结构 …...

释放马氏距离的力量:用 Python 探索多元数据分析
一、说明 马哈拉诺比斯距离(Mahalanobis Distance)是一种测量两个概率分布之间距离的方法。它是基于样本协方差矩阵的函数,用于评估两个向量之间的相似程度。Mahalanobis Distance考虑了数据集中各个特征之间的协方差,因此比欧氏距…...

【不限于联想Y9000P电脑关盖再打开时黑屏的解决办法】
不限于联想Y9000P电脑关盖再打开时黑屏的解决办法 问题的前言问题的出现问题拟解决 问题的前言 事情发生在昨天,更新了Win11系统后: 最惹人注目的三处地方就是: 1.可以查看时间的秒数了; 2.右键展示的内容变窄了; 3.按…...

策略模式实战应用
场景 假设做了个卖课网站,会员等级分为月vip、年vip、终生vip,每个等级买课的优惠力度不一样,传统的写法肯定是一堆的 if-else,现在使用策略模式写出代码实现 代码实现 策略模式的核心思想就是对扩展开放,对修改关闭…...
JAVA集合-Map
// 【Map】:双列集合,键值对形式存储,映射关系(kay,value) // 实现:HashMap // 子接口:SortedMap Map的子接口 // 实现类:TreeMap // HashMap // 1。可以插入null // …...

利用Simulink Test进行模型单元测试 - 1
1.搭建用于测试的简单模型 随手搭建了一个demo模型MilTestModel,模型中不带参数 2.创建测试框架 1.模型空白处右击 测试框架 > 为‘MilTestModel’创建 菜单 2.在创建测试框架对话框中,点击OK,对应的测试框架MilTestMode_Harness1就自动…...
深入探讨代理技术:保障网络安全与高效爬虫
1. Socks5代理与IP代理的区别与应用 Socks5代理和IP代理是代理技术中的两个重要方面,它们有着不同的特点和应用场景。Socks5代理是一种协议,支持TCP和UDP流量传输,适用于需要实时数据传输的场景,例如在线游戏或实时通信应用。而I…...

HDMI接口的PCB布局布线要求
高清多媒体接口(High Definition Multimedia Interface),简称:HDMI,是一种全数字化视频和声音发送接口,可以发送未压缩的音频及视频信号。随着技术的不断提升,HDMI的传输速率也不断的提升&#…...
Linux tar包安装 Prometheus 和 Grafana(知识点:systemd Unit/重定向)
0. 介绍 用tar包的方式安装 Prometheus 和 Grafana Prometheus:开源的监控方案Grafana:将Prometheus的数据可视化平台 Prometheus已经有了查询功能为什么还需要grafana呢?Prometheus基于promQL这一SQL方言,有一定门槛!Grafana基于浏览器的操作与可视化图表大大降低了理解难…...

【Vue框架】用户和请求
前言 在上一篇 【Vue框架】Vuex状态管理 针对Vuex状态管理以getters.js进行说明,没有对其中state引入的对象进行详细介绍,因为整体都比较简单,也就不对全部做详细介绍了;但其中的user.js涉及到获取用户的信息、前后端请求的token…...

NGINX组件(rewrite)
一、location匹配的规则和优先级(*) URI:统一资源标识符,是一种字符串标识,用于标识抽象的或者是物理资源;如:文件、图片、视频等 nginx中的URI匹配的是:网址”/“后的路径 如&…...

网页显示摄像头数据的方法---基于web video server
1. 背景: 在ros系统中有发布摄像头的相关驱动rgb数据,需求端需要将rgb数据可以直接在网页上去显示。 问题解决: web_video_server功能包,相关链接: web_video_server - ROS Wiki 2. 下载,安装和编译&a…...

SIFT 算法 | 如何在 Python 中使用 SIFT 进行图像匹配
介绍 人类通过记忆和理解来识别物体、人和图像。你看到某件事的次数越多,你就越容易记住它。此外,每当一个图像在你的脑海中弹出时,它就会将该项目或图像与一堆相关的图像或事物联系起来。如果我告诉你我们可以使用一种称为 SIFT 算法的技术来教机器做同样的事情呢? 尽管…...

K8S系列四:服务管理
写在前面 本文是K8S系列第四篇,主要面向对k8s新手同学。阅读本文需要读者对k8s的基本概念,比如Pod、Deployment、Service、Namespace等基础概念有所了解,尚且不了解的同学推荐先阅读本系列的第一篇文章《K8S系列一:概念入门》[1]…...

冠达管理:融券卖出交易规则?
融券卖出买卖是指投资者在没有实际持有某只股票的情况下,经过借入该股票并卖出来取得赢利的一种股票买卖方式。融券卖出买卖规矩针对不同市场、不同证券公司之间可能会存在一些差异,但基本的规矩包含如下几个方面。 一、融资融券的资历要求 在进行融券卖…...

图像变形之移动最小二乘算法(MLS)
基本原理 基于移动最小二乘的图像变形是通过一组源控制点和目标控制点来控制变形,对于每一个待求变形后位置的点而言,根据预设的形变类型(如仿射变换、相似变换、刚性变换)求解一个最小二乘优化目标函数估计一个局部的坐标变换矩阵…...
搭建一个功能齐全的网站
搭建一个功能齐全的网站,需要准备和掌握的一些关键技术和功能可概括如下: 前端技术: HTML/CSS - 网页内容结构和样式JavaScript - 实现网页交互功能前端框架(Vue、React等) - 更高效开发交互页面响应式设计 - 网站适配移动端 后端技术: 服务器(Linux、Nginx等) - 提供网站访…...
Java-jar和war包的区别
jar包和war包的区别: 1、war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。 2、war包是做好一个web应用后,通…...

UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...