在社交媒体数据分析领域,一个热门的研究领域是Twitter数据的情感分析。推特是世界上最受欢迎的社交媒体平台之一,拥有3.3亿月度活跃用户,每天发送5亿条推文。通过仔细分析这些推文的情绪--例如,它们是正面的、负面的还是中性的--我们可以了解很多关于人们对某些话题的感受。
理解推文的情绪很重要,原因有很多:商业营销、政治、公众行为分析和信息收集只是其中的几个例子。对推特数据的情绪分析可以帮助营销人员了解客户对产品发布和营销活动的反应,也可以帮助政党了解公众对政策变化或公告的反应。
然而,Twitter数据分析并非易事。每秒大约有6000条推文发布。这可是一大堆推特数据啊!尽管人类很容易理解一条推文的情绪,但人类情绪分析是不可扩展的。
在这篇文章中,我们将着眼于构建一个可伸缩的Twitter情绪分析系统,以帮助我们更好地理解机器学习在社交媒体数据分析中的作用。
在本文中,我们将学习如何识别带有负面情绪的推文。为此,我们将创建一个情感分析器,以文本格式对正面和负面推文进行分类。虽然我们将使用我们的分类器来分析Twitter数据,但它也可以用于分析来自其他来源的文本数据。
在本文的整个过程中,我们将介绍数据集、各种文本处理和嵌入技术,然后使用机器学习模型来处理我们的数据。
让我们从我们的Twitter数据开始。我们将使用开源的Twitter Twets Data for Sentiment Analysis数据集。它包含3.2万条推文,其中2000条包含负面情绪。
这个数据集的目标变量是‘Label’,它将负面的tweet映射为1,将其他任何内容映射为0。把目标变量想象成你想要预测的。对于我们的机器学习问题,我们将对这些数据训练一个分类模型,这样它就可以预测我们给它的任何新推文的类别。
数据通常来自各种不同的来源,并且通常采用各种不同的格式。因此,清理原始数据是准备数据集的重要部分。然而,清理并不是一个简单的过程,因为文本数据通常包含冗余和/或重复的单词。在Twitter情感分析中尤其如此,因此处理我们的文本数据是迈向解决方案的第一步。
这一阶段涉及删除不会增加文本含义的单词或字符。以下是一些标准清洁步骤:
降低文本的大小写非常重要,原因如下:单词“tweet”、“tweet”和“tweet”都为句子增添了相同的价值。降低所有单词的大小写有助于通过减小词汇量来降低维度。
在推特上提到这一点是很常见的。然而,由于它们不会增加解读推文情绪的价值,我们可以删除它们。提及总是以“@提及”的形式出现,因此我们可以删除以“@”开头的字符串。
这种文本处理技术将有助于处理像“万岁”和“万岁!”这样的单词。以同样的方式。在此阶段,我们删除所有标点符号。
停顿词是一种语言中常见的单词,如‘the’,‘a’,‘an’,‘is’等。我们可以在这里删除它们,因为它们不会为我们的Twitter数据分析提供任何有价值的信息。
Def Remove_Stop_Words(Words):返回结果=[I for I in Words if I not in English_STOP_Words]返回结果。
现在我们可以从数据中删除URL了。Tweet中包含URL的情况并不少见,但我们不需要分析它们来完成我们的任务。
标记化是将文本分割成更小的块的过程,称为标记化。每个令牌都是作为特征的机器学习算法的输入。自然语言工具包(Natural Language Toolkit,NLTK)提供了对数据进行标记化的实用函数。
词干是移除和替换令牌中的后缀以获得单词的词根或基本形式的过程。这被称为“茎”。例如,“满意”、“满意”和“满意”这三个词的词干就是“满意”,所有这些词的词干都暗示着同样的感觉。
波特茎段技术是一种应用广泛的茎段修剪技术。Nltk.stem提供了阻止“PorterStemmer”的实用函数。
From nltk.stem.porter导入PorterStemmer stemmer=PorterStemmer()def STEM_WODS(TEXT):获取并返回#34;";.Join([stemmer.stem(Word)for Word in Text])twets_data[';tweet';]=twets_data[';tweet';].Apply(lambda text:STEM_WODS(TEXT))。
有大量的文本格式的数据。分析文本数据对于机器来说是一项极其复杂的任务,因为机器很难理解文本背后的语义。在这个阶段,我们将使用Word嵌入将文本数据处理成机器可理解的格式。
单词嵌入只是将文本格式的数据转换为数值(或向量),这样我们就可以将这些向量作为机器的输入,并使用代数的概念来分析数据。
但是,重要的是要注意,当我们执行此转换时,可能会丢失数据。因此,关键是要在转换和保留数据之间保持平衡。
接下来,让我们更详细地研究以上每一种技术,然后决定将哪种技术用于我们的Twitter情感分析模型。
Bag of Words使用唯一单词词典将文档简单转换为向量。这只需两个步骤即可完成,如下所述。
以向量的形式为数据语料库中的所有独特单词创建词典。让语料库中唯一单词的数量为‘d’。所以每个词都是一个维度,因此这个词典向量是一个d维向量。
对于每个文档,根据词典构造vᵢ,使得词典中的每个单词按照该单词在文档中出现的次数来再现。
对于每个文档,根据词典构造vᵢ,使得词典中的每个单词被再现为:
现在,我们有了每个文档的向量和一个字典,其中包含来自数据语料库的一组唯一单词。这些向量可以通过以下方式进行分析,
计算向量之间的距离以获得相似度(向量越接近,则越相似)。
这里的 有三个元素:Word、文档、语料库。术语频率 - 反转文档频率,简称TF-idf,使用这些元素之间的关系将文本数据转换为向量。
词频是指单词和文档之间的关系。反转文档频率指的是词与语料库之间的关系。
词频是单词wⱼ在文档rᵢ中出现的概率。计算如下。
一个单词在评论中的高词频意味着该单词在该评论中经常出现。一个词在评论中的词频很低,这意味着这个词在那次评论中很少见。
反向文档频率(IDF)表示单词在整个语料库中出现的频率。这是按如下方式计算的。
较低的反向文档频率意味着该词在语料库中很频繁。较高的反向文档频率意味着该词在语料库中很少见。
由于比例关系,我们使用对数而不是简单的倒数比。术语频率是一个概率,范围在0到1之间。它的反比可以取0到无穷大的值,并且可能会偏向IDF。使用日志来解决这个问题是一个简单且被广泛接受的原因。
在每个文档的向量形式中,我们有每个单词的TF-IDF。使用TF-IDF值将文档转换为向量称为TF-IDF矢量化。
在词袋和TF-IDF中,我们将句子转换为向量。但在word2vec中,我们将单词转换为向量。因此得名,word2vec!
Word2vec将一个大型文本语料库作为其输入,并生成一个通常为数百维的向量空间,语料库中的每个唯一单词都被分配给该空间中的一个相应向量。词向量的定位是以这样的方式完成的,即在语料库中具有共同上下文的词在空间上定位得更近。
例如,从男人到女人的载体是平行于国王到王后的,等等。
当谈到将哪种嵌入技术用于机器学习模型时,没有明显的答案:这真的取决于用例。
词袋通常用于文档分类应用,其中每个单词的出现被用作训练分类器的特征。
在我们的推特情绪分析中,我们将使用“词袋”作为一种单词嵌入技术。本网站的学习库提供了“CountVectorizer”功能来执行词袋操作。使用“CountVectorizer”,我们将处理后的数据转换为向量。
Logistic回归是一种广泛应用于互联网应用的有监督机器学习分类算法。它是解决分类问题的最简单的算法,但效率很高。我们将利用这一点在我们的Twitter数据分析中获得情绪的概率。
使用sklearn.线性模型,我们可以实现Logistic回归。该模型输出输入属于类的概率,使我们能够对新推文的推特数据进行情感分析。
From sklearn.line_model导入Logistic Regession model=Logistic Regpression()model.fit(twets_Train,target_Train)#训练模型forection=model。Forecast_Proba(Twets_Test)#测试集上的预测值Forecast_int=预测值[:,1]>;=0.3#如果预测值大于或等于0.3,则1否则1个预测值_INT=预测值_int.astype(np.int)。
现在我们有了一个Twitter情感分析模型,它可以输出一条推文属于特定类别的概率,我们需要一些方法来判断它的性能。准确率和查全率是分类模型中使用最广泛的两个性能指标。
精度是所有检索到的实例中相关实例的分数。这有助于我们理解结果的用处。
召回是指所有相关实例中相关实例的分数。回想帮助我们理解结果的覆盖面。
例如,假设一个搜索查询有30个页面,其中20个是相关的,但是结果没有显示40个其他相关的结果。在本例中,精确度为20/30,召回率为20/60。因此,我们的F1比分是4/9。
From sklearn.metrics从sklearn.metrics导入F1_SCORE。metrics导入Conflication_Matrix,f1_Score,Precision_Score,Recall_Score cf_Matrix=Conflication_Matrix(Target_test,Prediction_int)tn,fp,fn,tp=Conflication_Matrix(Target_test,Prediction_int).ravel()print(";Precision:{:.2f}%";.Format(100*Precision_Score(Target_test,Prediction_int))print(。.Format(100*Recall_Score(target_test,recast_int))打印(";F1分数:{:.2F}%";.Format(100*F1_Score(Target_test,Forecast_int)。
将海运导入为SNS导入matplotlib.pylot为PLT ax=plt.sublot()#annot=True以注释单元格sns.heatmap(cf_Matrix,annot=True,ax=ax,cmap=&39;Blues&39;,fmt=&39;&39;);#标签、标题和刻度ax.set_xLabel(';预测标签';);ax.set_yLabel(&。Ax.xaxis.set_ticklabels([';积极&39;,';消极';]);ax.yaxis.set_ticklabels([';积极&39;,';消极';]);
F1得分为73%的模型是使用传统机器学习算法的可运行模型。然而,有一些方法可以改进这个模型。我们可以使用深度学习技术(尽管这些技术成本很高),我们可以通过添加功能和删除拼写错误的单词来响应结果和反馈。
另外,请记住,这些结果是基于我们的培训数据。当将情感分析模型应用于真实世界的数据时,我们仍然需要积极地监控模型随时间推移的性能。
在本文中,我们学习了各种文本处理和词语嵌入技术,并在处理后的数据上实现了一个Twitter情感分析分类模型。希望这能让你了解这些社交媒体数据分析系统是如何工作的,以及准备和部署它们所需的工作。
本文提到的文本处理技术广泛应用于文本数据。然而,我们并不需要一直使用所有的技巧。根据我们的用例仔细选择处理和嵌入步骤非常重要;这将在情感分析数据中发挥重要作用。
在社交媒体数据分析领域,尤其是在Twitter数据分析领域,在流程的每一步都需要领域专家的支持,这一点通常很重要。社交网络上的词汇表通常是特定社区所特有的,领域专家可以帮助您避免数据偏差并提高数据集和分析的准确性。
也就是说,本文中学到的概念和技术可以应用于各种自然语言处理问题。除了Twitter情感分析,你还可以使用类似的技术来构建聊天机器人、文本摘要、垃圾邮件检测和语言翻译模型。
谢谢你的阅读!如果您想亲自体验这个自定义数据集,您可以下载数据并在Github上查看完整的代码。如果您想尝试其他Twitter数据集,这里有一个存储各种不同Twitter内容的存储库。
请务必查看下面的相关资源,了解更多Ramya的技术文章,并订阅Lionbridge AI时事通讯,直接将采访和文章发送到您的收件箱。