在互联网上,关于Twitter情绪分析的讨论无处不在。这些项目讨论的是如何找到已经被抓取的推文的情绪。这些项目使用的是为特定目的而抓取的结构化数据集。但是,如果想实时了解推特用户对某个名人或事件(比如COVID)的情绪,该怎么办呢?本文将介绍如何使用Tweepy、HuggingFaceTransformers 和 Streamlit 构建这样的实时Twitter情绪分析器,并使用streamlit sharing部署该应用,实时查看任何名人的情绪。
将简要介绍应用中将要使用的不同的库。
Tweepy是一个开源的Python包,用于访问Twitter API。使用这个包,可以检索用户推文、转推、状态、关注者等。还可以使用这个包创建Twitter机器人,代表发布信息。可以流式传输用户推文并检查他们的实时状态。Tweepy可以做很多事情。可以通过文档了解这个Python包的全部功能。在项目中,将使用这个包根据给定的搜索字符串获取实时推文。
HuggingFace是一家旨在通过开源民主化人工智能的公司。它包含了所有可以用于情绪分析、文本生成、基于上下文的问题回答的自然语言处理工具。它有一个模型库,可以根据应用选择一个模型。最近它增加了一个名为Spaces的新功能,用于托管用Streamlit和Gradio构建的应用。
Streamlit是一个开源的Python包,用于在短时间内构建机器学习Web应用。它非常容易学习。它最适合于原型设计机器学习模型。还可以利用这个工具构建可视化应用、仪表板。它还提供了一种通过‘Streamlit sharing’将应用部署到其服务器上的方式。也可以在GCP、AWS、Heroku或选择的任何平台上部署Streamlit应用。
目标是找到特定主题或人物的实时推文情绪。为此,需要根据要求从Twitter获取推文。找到这些推文的情绪。将结果连同相应的推文一起显示给用户。因此,作为第一步,使用Tweepy从Twitter获取推文,然后使用huggingface transformers找到这些推文的情绪,用户通过用Streamlit构建的界面控制整个过程,以查看最终结果。
首先,安装并导入必要的库。如果系统上已经安装了这些库,可以跳过一些库的安装。
pip install tweepy
pip install transformers
pip install streamlit
pip install pandas
现在已经安装了所有必要的库,打开VS代码或最喜欢的IDE,创建一个.py文件,并导入安装的库如下:
import tweepy as tw
import streamlit as st
import pandas as pd
from transformers import pipeline
已经导入了所有必要的库。现在在应用设置中看到的第一步是获取Twitter的推文。为此,需要访问Twitter API并使用它来获取推文。要访问Twitter API,需要API密钥和API密钥秘密。要获得它们,请按照以下步骤操作:
所以如果想构建自己的应用,必须从Twitter获取自己的值。
获取这些密钥的详细解释在这个中有解释。请按照这个视频中给出的步骤操作。如果不理解视频中给出的步骤,或者如果有任何关于获取这些值的疑问,请在本文下方评论,会回复澄清疑问。
现在已经拥有了访问Twitter API所需的所有密钥,使用以下Tweepy代码来访问它:
consumer_key = 'API密钥'
consumer_secret = 'API密钥秘密'
access_token = '访问令牌'
access_token_secret = '访问令牌秘密'
auth = tw.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tw.API(auth, wait_on_rate_limit=True)
上述代码在应用和Twitter之间建立了连接。
现在已经在应用和Twitter之间建立了连接,让定义一个使用hugging face transformers的pipeline函数的情绪分析实例,已经导入了这个函数。
classifier = pipeline('sentiment-analysis')
现在已经定义了实例,并在应用和Twitter之间建立了连接,让使用Streamlit给应用一个标题。使用了以下名称,可以选择喜欢的名称:
st.title('使用Tweepy和HuggingFace Transformers进行实时Twitter情绪分析')
上述代码给出了一个标题和应用的简要描述。
def run():
with st.form(key='输入名称'):
search_words = st.text_input('输入想要了解情绪的名称')
number_of_tweets = st.number_input('输入想要了解情绪的最新推文数量(最多50条)', 0, 50, 10)
submit_button = st.form_submit_button(label='提交')
if submit_button:
tweets = tw.Cursor(api.search_tweets, q=search_words, lang="en").items(number_of_tweets)
tweet_list = [i.text for i in tweets]
p = [i for i in classifier(tweet_list)]
q = [p[i]['label'] for i in range(len(p))]
df = pd.DataFrame(list(zip(tweet_list, q)), columns=['Latest '+str(number_of_tweets)+' Tweets'+' on '+search_words, 'sentiment'])
st.write(df)
if __name__=='__main__':
run()
上述代码的解释:
需要输入一个名称或短语,所以使用Streamlit的st.text_input来获取想要的名称。
同样,需要知道想要显示多少推文的情绪。由于这是一个将被部署在免费托管平台上的演示应用,有有限的计算资源。因此,限制了要检索的推文数量。在这种情况下,它只是50。使用st.number_input来获取推文的数量。
然后给出一个提交按钮st.form_submit_button。如果用户给出了搜索字符串和要检索的推文数量以进行情绪分析,并按下提交按钮,需要根据该输入字符串获取推文,并对这些推文进行情绪分析,然后显示它们作为一个数据框架。if代码块正是做这个工作的。
变量tweets存储了使用Tweepy库根据用户输入获取的推文。但是,获取的推文是以Cursor对象的形式存在的。所以需要获取这些推文的文本。变量tweet_list包含了文本形式的推文。
下一个变量p包含了所有使用之前定义的classifier实例的情绪输出。变量q存储了推文的情绪标签(正面或负面)。如上所示获取它们。
在下一行中,创建了一个包含提取的推文和相应情绪标签的数据框架。使用Streamlit命令st.write(),将最终结果显示给用户。
按Ctrl+S保存.py文件中的代码。所以最后构建了应用。
测试应用非常简单。打开终端,输入以下代码:
streamlit run your_app_name.py
这将在新窗口中打开浏览器中的应用,可以开始给应用输入以获取实时情绪。
现在已经构建并测试了应用,是时候部署应用了。将使用Streamlitsharing来部署应用。Streamlit提供了一个选项,可以在其服务器上免费托管三个应用。要使用Streamlit sharing部署应用,必须创建一个名为requirements.txt的文件。创建一个名为requirements.txt的文本文件,并输入在应用中使用的库:
tweepy
streamlit
pandas
transformers
tensorflow
在requirements.txt文件中输入上述内容。如果注意到输入了TensorFlow。但应用程序中没有使用它。这是因为streamlit需要两个深度学习库中的一个来运行transformers库。所以也给出了这个库作为要求。
创建这个文件后,创建一个新的GitHub仓库,并上传上面创建的.py文件和requirements.txt文件。
前往stream share网站,并创建一个账户(如果还没有的话)。可以看到一个‘New app’按钮,点击它并给出刚刚创建的GitHub仓库名称,然后点击部署。