Hugging Face 教程:如何在 Twitter 上做情感分析(含代码与无代码方案)
Getting Started with Sentiment Analysis on Twitter
Hugging Face 发布入门教程,讲解如何用 Inference API 对 Twitter 推文做情感分析,分 coder 与非 coder 两条路径。
教程同时给出代码和无代码两条路径,用 Tweepy 加 Inference API 分析 Notion 相关推文,方法可直接复用到其他品牌。
情感分析是根据文本数据的极性(如正面、负面和中性)对文本数据进行自动分类的过程。公司利用推文的情感分析来了解客户如何谈论其产品和服务,获取洞察以推动业务决策,并及早发现产品问题和潜在的公关危机。
在本指南中,我们将涵盖你开始进行 Twitter 情感分析所需学习的一切内容。我们将分享一个分步流程来进行情感分析,无论你是程序员还是非程序员都适用。如果你是程序员,你将学习如何使用 Inference API,这是一个即插即用的机器学习 API,只需几行代码即可大规模地对推文进行情感分析。如果你不会编程,别担心!我们还将介绍如何使用 Zapier 进行情感分析,这是一个无代码工具,能让你收集推文、用 Inference API 分析它们,最后将结果发送到 Google Sheets ⚡️
继续阅读,或跳转到激发你 🌟 兴趣的部分:
系好安全带,享受这段旅程吧!🤗
什么是情感分析?
情感分析使用 机器学习 来自动识别人们如何谈论某个给定话题。情感分析最常见的用途是检测文本数据的极性,即自动识别一条推文、产品评论或支持工单是在正面、负面还是中立地谈论某事。
举个例子,让我们看看一些提到 @Salesforce 的推文,看看情感分析模型会如何标记它们:
“我越用 @salesforce 就越不喜欢它。它很慢,而且满是 bug。UI 中有一些元素看起来自 2006 年以来就没更新过。当前的烦恼:应用交换页面每 10 秒就刷新一次,停不下来” --> 这第一条推文会被标记为“负面”。
“这就是我喜欢 @salesforce 的地方。它关乎关系,关乎关心他人,而不仅仅是生意和金钱。感谢你们关心 #TrailblazerCommunity” --> 相比之下,这条推文会被归类为“正面”。
“回家:#Dreamforce 重返旧金山庆祝 20 周年。了解更多:http://bit.ly/3AgwO0H 来自 @Salesforce” --> 最后,这条推文会被标记为“中性”,因为它不包含观点或极性。
直到最近,分析提到某个品牌、产品或服务的推文还是一个非常手动、艰难且繁琐的过程;它需要有人手动浏览相关推文,并根据其情感阅读和标记它们。你可以想象,这不仅无法规模化,而且成本高昂、非常耗时,还容易出现人为错误。
幸运的是,最近 AI 的进步使公司能够使用机器学习模型对推文进行情感分析,其效果与人类一样好。通过使用机器学习,公司可以全天候实时分析推文,大规模地进行分析,在几秒钟内分析数千条推文,更重要的是,在需要时获得他们正在寻找的洞察。
为什么要对 Twitter 进行情感分析?公司将其用于各种各样的用例,但最常见的两个用例是分析用户反馈和监控提及以尽早发现潜在问题。
分析 Twitter 上的反馈
倾听客户是发现如何改进产品或服务的见解的关键。尽管反馈来源多种多样,例如调查或公开评论,但 Twitter 提供了关于受众对您产品的看法的原始、未经过滤的反馈。
通过分析人们在 Twitter 上谈论您品牌的方式,您可以了解他们是否喜欢您刚刚推出的新功能。您还可以了解您的定价对目标受众是否清晰。您还可以看到您的产品中哪些方面最受喜爱和最不受喜爱,从而做出业务决策(例如,客户喜欢用户界面的简洁性,但讨厌客户支持的速度太慢)。
监控 Twitter 提及以发现问题
Twitter 已成为分享糟糕客户体验和在使用产品或服务出现问题时表达不满的默认方式。这就是为什么公司监控用户在 Twitter 上如何提及他们的品牌,以便尽早发现任何问题。
通过实施一个实时分析传入提及的情感分析模型,您可以自动收到负面提及突然激增的警报。大多数情况下,这是由需要尽快处理的正在发生的情况引起的(例如,由于服务器中断导致应用无法运行,或与客户支持代表的非常糟糕的体验)。
现在我们已经介绍了什么是情感分析以及它为什么有用,让我们动手实际对推文进行情感分析吧!💥
如何用代码进行 Twitter 情感分析?
如今,开始对 Twitter 进行情感分析非常简单直接 🙌
只需几行代码,您就可以自动获取推文、运行情感分析并可视化结果。而且您可以在几分钟内学会如何完成所有这些事情!
在本节中,我们将通过一个很酷的小项目向您展示如何做到这一点:我们将对提及 Notion 的推文进行情感分析!
首先,您将使用 Tweepy,一个开源 Python 库,通过 Twitter API 获取提及 @NotionHQ 的推文。然后您将使用 Inference API 进行情感分析。获得情感分析结果后,您将创建一些图表来可视化结果并发现一些有趣的见解。
您可以使用这个 Google Colab 笔记本 来跟随本教程。
让我们开始吧!💪
- 安装依赖项
第一步,您需要安装所需的依赖项。您将使用 Tweepy 收集推文,Matplotlib 构建一些图表,以及 WordCloud 构建最常见关键词的可视化:
!pip install -q transformers tweepy matplotlib wordcloud
- 设置 Twitter 凭据
然后,您需要设置 Twitter API 凭据,以便您可以通过 Twitter 进行身份验证,然后使用他们的 API 自动收集推文:
import tweepy
# Add Twitter API key and secret
consumer_key = "XXXXXX"
consumer_secret = "XXXXXX"
# Handling authentication with Twitter
auth = tweepy.AppAuthHandler(consumer_key, consumer_secret)
# Create a wrapper for the Twitter API
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True)
- 使用 Tweepy 搜索推文
现在您已准备好开始从 Twitter 收集数据!🎉 您将使用 Tweepy Cursor 自动收集 1,000 条提及 Notion 的推文:
# Helper function for handling pagination in our search and handle rate limits
def limit_handled(cursor):
while True:
try:
yield cursor.next()
except tweepy.RateLimitError:
print('Reached rate limite. Sleeping for >15 minutes')
time.sleep(15 * 61)
except StopIteration:
break
# Define the term you will be using for searching tweets
query = '@NotionHQ'
query = query + ' -filter:retweets'
# Define how many tweets to get from the Twitter API
count = 1000
# Search for tweets using Tweepy
search = limit_handled(tweepy.Cursor(api.search,
q=query,
tweet_mode='extended',
lang='en',
result_type="recent").items(count))
# Process the results from the search using Tweepy
tweets = []
for result in search:
tweet_content = result.full_text
tweets.append(tweet_content) # Only saving the tweet content.
- 使用情感分析分析推文
现在你有了数据,就可以用情感分析来分析这些推文了!💥
你将使用 Inference API,这是一个易于使用的 API,可通过简单的 API 调用集成机器学习模型。借助 Inference API,你可以使用最先进的模型进行情感分析,而无需为机器学习构建基础设施或处理模型可扩展性问题。你可以在无需涉足 MLOps 的情况下,为情感分析提供最新(也是最棒的!)的开源模型。🤩
要使用 Inference API,首先你需要定义你的 model id 和 Hugging Face API Token:
model ID用于指定你想使用哪个模型来进行预测。Hugging Face 拥有超过 400 个支持多种语言的情感分析模型,其中包括各种专门针对推文情感分析进行微调的模型。在本教程中,你将使用 twitter-roberta-base-sentiment-latest,这是一个在约 1.24 亿条推文上训练并针对情感分析进行微调的情感分析模型。你还需要指定你的
Hugging Face token;你可以在此处免费注册获取一个,然后在这个页面上复制你的 token。
model = "cardiffnlp/twitter-roberta-base-sentiment-latest"
hf_token = "XXXXXX"
接下来,你将使用 model id 和 hf_token 创建 API 调用:
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()
现在,你可以对每条推文进行情感分析了。🔥🔥🔥
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 score
tweets_analysis.append({'tweet': tweet, 'sentiment': top_sentiment['label']})
except Exception as e:
print(e)
- 探索情感分析的结果
想知道 Twitter 上的人们对 Notion 的评价是正面还是负面?或者当用户正面或负面谈论 Notion 时,他们在讨论什么?我们将使用一些数据可视化来探索情感分析的结果并找出答案!
首先,让我们看看被标记为每种情感的推文示例,以了解这些推文的不同极性:
import pandas as pd
# Load the data in a dataframe
pd.set_option('max_colwidth', None)
pd.set_option('display.width', 3000)
df = pd.DataFrame(tweets_analysis)
# Show a tweet for each sentiment
display(df[df["sentiment"] == 'Positive'].head(1))
display(df[df["sentiment"] == 'Neutral'].head(1))
display(df[df["sentiment"] == 'Negative'].head(1))
结果:
@thenotionbar @hypefury @NotionHQ That’s genuinely smart. So basically you’ve setup your posting queue to by a recurrent recycling of top content that runs 100% automatic? Sentiment: Positive
@itskeeplearning @NotionHQ How you've linked gallery cards? Sentiment: Neutral
@NotionHQ Running into an issue here recently were content is not showing on on web but still in the app. This happens for all of our pages. https://t.co/3J3AnGzDau. Sentiment: Negative
接下来,你将统计被标记为正面、负面和中性的推文数量:
sentiment_counts = df.groupby(['sentiment']).size()
print(sentiment_counts)
值得注意的是,大多数关于 Notion 的推文都是正面的:
sentiment
Negative 82
Neutral 420
Positive 498
然后,让我们创建一个饼图,以相对比例可视化每种情感:
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="")
很高兴看到所有推文中有 50% 是正面的,只有 8.2% 是负面的:
最后一步,让我们创建一些词云,看看每种情感中最常用的词是哪些:
from wordcloud import WordCloud
from wordcloud import STOPWORDS
# Wordcloud with positive tweets
positive_tweets = df['tweet'][df["sentiment"] == 'Positive']
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['tweet'][df["sentiment"] == 'Negative']
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()
有趣的是,正面推文中突出的一些词包括“notes”、“cron”和“paid”:
相比之下,“figma”、“enterprise”和“account”是负面推文中使用最多的一些词:
这很有趣,对吧?
只需几行代码,你就能够使用 Tweepy 自动收集提及 Notion 的推文,使用 Inference API 通过情感分析模型对其进行分析,最后创建一些可视化来查看结果。💥
你有兴趣做更多吗?下一步,你可以使用第二个 文本分类器按主题或话题对每条推文进行分类。这样,每条推文都会被标记情感和主题,你就可以获得更细粒度的洞察(例如,用户是在称赞 Notion 易于使用,但在抱怨其定价或客户支持?)。
如何在不编码的情况下进行 Twitter 情感分析?
要开始进行情感分析,你不需要是开发者,也不需要会编码。🤯
有一些很棒的无代码解决方案,可以让你在几分钟内轻松完成情感分析。
在本节中,你将使用 Zapier,这是一个无代码工具,能让用户通过易于使用的界面连接 5,000 多个应用。你将创建一个 Zap,每当有人在 Twitter 上提到 Notion 时就会触发。然后,该 Zap 将使用 Inference API 通过情感分析模型分析推文,最后将结果保存到 Google Sheets:
- 第 1 步(触发器):获取推文。
- 第 2 步:使用情感分析分析推文。
- 第 3 步:将结果保存到 Google Sheets。
别担心,这不会花太多时间;不到 10 分钟,你就能创建并激活这个 zap,并开始看到情感分析结果出现在 Google Sheets 中。
让我们开始吧!🚀
第 1 步:获取推文
首先,你需要创建一个 Zap,并配置 Zap 的第一步,也称为“触发器”步骤。在你的情况下,你需要将其设置为每当有人在 Twitter 上提到 Notion 时触发 Zap。要进行设置,请按照以下步骤操作:
- 首先在“选择应用和事件”中选择“Twitter”,并选择“搜索提及”作为事件。
- 然后将你的 Twitter 账户连接到 Zapier。
- 通过指定“NotionHQ”作为此触发器的搜索词来设置触发器。
- 最后测试触发器,以确保它能收集推文并正确运行。
第 2 步:使用情感分析分析推文
现在你的 Zap 可以收集提到 Notion 的推文了,让我们添加第二步来进行情感分析。🤗
你将使用 Inference API,这是一个易于使用的 API,用于集成机器学习模型。要使用 Inference API,你需要定义你的“模型 id”和你的“Hugging Face API Token”:
model ID用于告诉 Inference API 你想使用哪个模型进行预测。在本指南中,你将使用 twitter-roberta-base-sentiment-latest,这是一个在约 1.24 亿条推文上训练并针对情感分析进行微调的情感分析模型。如果你想使用不同的模型(例如对另一种语言进行情感分析),可以探索 Hugging Face Hub 上提供的 400 多个情感分析模型。你还需要指定你的
Hugging Face token;你可以在此处免费注册获取一个,然后在这个页面上复制你的 token。
一旦你有了模型 ID 和 Hugging Face token ID,请返回你的 Zap,并按照以下说明设置 zap 的第二步:
- 首先在“选择应用和事件”中选择“Code by Zapier”和“Run python”。
- On "Set up action", you will need to first add the tweet "full text" as "input_data". Then you will need to add these 28 lines of python code in the "Code" section. This code will allow the Zap to call the Inference API and make the predictions with sentiment analysis. Before adding this code to your zap, please make sure that you do the following:
- 更改第 5 行并添加你的 Hugging Face token,也就是说,不要用
hf_token = "ADD_YOUR_HUGGING_FACE_TOKEN_HERE",你需要将其更改为类似hf_token = "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"的内容 - 如果你想使用不同的情感分析模型,你需要更改第 4 行,并在此处指定新模型的 id。例如,你可以不使用默认模型,而是使用这个模型对西班牙语推文进行情感分析,方法是将这一行
model = "cardiffnlp/twitter-roberta-base-sentiment-latest"更改为model = "finiteautomata/beto-sentiment-analysis"。
- 更改第 5 行并添加你的 Hugging Face token,也就是说,不要用
- 最后,测试此步骤,以确保它进行预测并正确运行。
第 3 步:将结果保存到 Google Sheets
作为 Zap 的最后一步,你将把情感分析的结果保存到 Google Sheets 上的电子表格中,并将结果可视化。📊
首先,在 Google Sheets 上创建一个新电子表格,并定义以下列:
- Tweet:此列将包含推文的文本。
- Sentiment:将包含情感分析结果的标签(例如 positive、negative 和 neutral)。
- Score:将存储反映模型对其预测有多自信的值。
- Date:将包含推文的日期(这对于创建随时间变化的图表和图形很方便)。
然后,按照以下说明配置最后一步:
- 在“Choose app & Event”中选择 Google Sheets 作为应用,并选择“Create Spreadsheet Row”作为事件。
- 然后将你的 Google Sheets 账户连接到 Zapier。
- Next, you'll need to set up the action. First, you'll need to specify the Google Drive value (e.g. My Drive), then select the spreadsheet, and finally the worksheet where you want Zapier to automatically write new rows. Once you are done with this, you will need to map each column on the spreadsheet with the values you want to use when your zap automatically writes a new row on your file. If you have created the columns we suggested before, this will look like the following (column → value):
- Tweet → Full Text(来自 zap 第 1 步的值)
- Sentiment → Sentiment Label(来自第 2 步的值)
- Sentiment Score → Sentiment Score(来自第 2 步的值)
- Date → Created At(来自第 1 步的值)
- 最后,测试这最后一步,确保它能够向你的电子表格添加新行。确认其正常工作后,你可以删除电子表格中的这一行。
4. 打开你的 Zap
至此,你已经完成了 zap 的所有步骤!🔥
现在,你只需要打开它,这样它就可以开始收集推文、使用情感分析对其进行分析,并将结果存储到 Google Sheets 中。⚡️
要打开它,只需点击屏幕底部的“Publish”按钮:
几分钟后,你将看到你的电子表格开始填充推文和情感分析结果。你还可以创建一个图表,随着推文的到来实时更新:
超级酷,对吧?🚀
总结
Twitter 是公共的市政厅,人们在这里分享对各种话题的想法。从谈论政治、体育或科技的人,到分享对一款闪亮新应用反馈的用户,再到因航班取消而向航空公司投诉的乘客,Twitter 上的数据量非常庞大。情感分析能够实时理解所有这些数据,从而发现可推动业务决策的洞察。
幸运的是,像 Inference API 这样的工具让在 Twitter 上开始情感分析变得超级容易。无论你是否会编程,和/或是否有机器学习经验,你都可以在几分钟内设置一个流程,实时收集推文,使用最先进的情感分析模型对其进行分析,并通过一些很酷的可视化来探索结果。🔥🔥🔥
如果你有问题,可以在 Hugging Face forum 中提问,这样 Hugging Face 社区可以帮助你,其他人也能从查看讨论中受益。你也可以加入我们的 Discord 服务器,与我们以及整个 Hugging Face 社区交流。
来源:Hugging Face:Blog · huggingface.co