我们使用了不同的机器学习算法进行情感分析,然后比较了每种算法的准确率结果,以确定哪种算法最适合这个问题。情感分析是自然语言处理(NLP)的重要组成部分。情绪是指我们对事件、对象、情况或事物的感受。情感分析是一个从文本中自动提取人类情感的研究领域。它只是在1990年代初期才慢慢开始发展。本文将让您了解如何使用机器学习(ML)进行情感分析,并比较不同机器学习算法的结果。本文的目的不是研究如何提高算法性能。如今,我们生活在一个快节奏的社会,所有的商品都可以在网上购买,每个人都可以在网上发表自己的评论。某些产品的在线负面评论可能会损害公司的声誉,从而影响公司的销售。因此,企业通过产品评论了解客户真正想要什么就变得非常重要。但是这些评论数据太多了,无法人工将所有评论一一审核。这就是情感分析诞生的地方。现在,让我们看看如何使用机器学习开发模型来执行基本的情感分析。现在就开始!获取数据的第一步是选择数据集。您可以从任何公共评论中进行选择,例如推文或电影评论。数据集中必须至少有两列:标签和实际文本段。下图显示了我们选择的一些数据集。图1:数据示例接下来,我们导入需要的库:importpandasaspdimportnumpyasnpfromnltk.stem.porterimportPorterStemmerimportreimportstring上面代码可以看到,我们导入NumPy和Pandas库进行处理数据。至于其他的库,我们在使用的时候再进行说明。数据集已准备就绪,所需的库已导入。接下来,我们需要使用Pandas库将数据集读入我们的项目。我们使用以下代码将数据集读入PandasdataframeDataFramesentiment_dataframe=pd.read_csv("/content/drive/MyDrive/Data/sentiments-sentiments.tsv",sep='\t')数据处理现在在我们的项目中数据集已导入。然后,我们需要对数据进行处理,让算法更好地理解数据集的特征。我们首先命名数据集中的列,这是通过以下代码完成的:sentiment_dataframe.columns=["label","body_text"]然后,我们将标签列数值化:负面评论替换为1,正面评论替换为0。下图显示了经过基本修改后的sentiment_dataframe的值。图2:经过基本修改的数据框准备特征值和目标值下一步是数据预处理。这是非常重要的一步,因为机器学习算法只能理解/处理数值数据,不能理解文本,所以这时候需要进行特征提取,将字符串/文本转化为数值数据。此外,还需要删除冗余和无用的数据,因为这些数据可能会污染我们训练好的模型。我们在这一步中去除了噪声数据、缺失值数据和不一致数据。对于情感分析,我们在数据框中添加特征文本的长度和标点符号计数。我们还进行词干提取,即将所有相似词(例如“give”、“giving”等)转换为单一形式。完成后,我们将数据集分成两部分:特征值X和目标值Y。以上是使用以下代码完成的。下图显示了执行这些步骤后的数据框。图3:数据集划分后的数据帧"")),3)*100tokenized_tweet=sentiment_dataframe['body_text'].apply(lambdax:x.split())词干分析器=PorterStemmer()tokenized_tweet=tokenized_tweet.apply(lambdax:[stemmer.stem(i)foriinx])foriinrange(len(tokenized_tweet)):tokenized_tweet[i]=''.join(tokenized_tweet[i])sentiment_dataframe['body_text']=tokenized_tweetssentiment_dataframe['body_len']=sentiment_dataframe['body_text'].apply(lambdax:len(x)-x.count(““))sentiment_dataframe['punct%']=sentiment_dataframe['body_text'].apply(lambdax:count_punct(x))X=sentiment_dataframe['body_text']y=sentiment_dataframe['label']特征工程:文本特征处理我们接下来提取文本特征并将文本特征数字化。为此,我们使用CountVectorizer,它返回一个词频矩阵。在此之后,计算数据框X中的文本长度和标点符号计数等特征。X的示例如下图所示。图4:现在数据已准备好用于训练,使用机器学习算法的最终特征示例。下一步是确定使用哪些算法来训练模型。如前所述,我们将尝试多种机器学习算法并确定最适合情感分析的算法。由于我们打算对文本进行二分类,因此我们使用以下算法:K最近邻(KNN)逻辑回归支持向量机(SVM)随机梯度下降(SGD)朴素贝叶斯决策树随机森林划分数据集首先,数据集是分为训练集和测试集。使用sklearn库,具体见如下代码:fromsklearn.model_selectionimporttrain_test_splitX_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.20,random_state=99)我们使用20%的数据进行测试,80%的数据用于训练。拆分数据的目的是评估我们训练的模型是否对一组新数据(即测试集)有效。K最近邻算法现在,让我们开始训练我们的第一个模型。首先,我们使用KNN算法。先训练模型,再评估模型的准确率(具体代码可以使用Python的sklearn库完成)。详见如下代码,KNN训练模型的准确率在50%左右。fromsklearn.neighborsimportKNeighborsClassifiermodel=KNeighborsClassifier(n_neighbors=3)model.fit(X_train,y_train)model.score(X_test,y_test)0.5056689342403629逻辑回归算法拟合模型,然后评估模型。下面的代码使用逻辑回归算法,准确率约为66%。fromsklearn.linear_modelimportLogisticRegressionmodel=LogisticRegression()model.fit(X_train,y_train)model.score(X_test,y_test)0.6621315192743764支持向量机算法下面的代码使用了SVM,准确率在67%左右。fromsklearnimportsvmmodel=svm.SVC(kernel='linear')model.fit(X_train,y_train)model.score(X_test,y_test)0.6780045351473923随机森林算法下面的代码使用了随机森林算法,随机森林的准确率训练模型率约为69%。fromsklearn.ensembleimportRandomForestClassifiermodel=RandomForestClassifier()model.fit(X_train,y_train)model.score(X_test,y_test)0.6938775510204082决策树算法接下来,我们使用决策树算法,准确率在61%左右。fromsklearn.treeimportDecisionTreeClassifiermodel=DecisionTreeClassifier()model=model.fit(X_train,y_train)model.score(X_test,y_test)0.6190476190476191StochasticGradientDescent下面的代码使用了StochasticGradientDescent,准确率大约是49%。fromsklearn.linear_modelimportSGDClassifiermodel=SGDClassifier()model=model.fit(X_train,y_train)model.score(X_test,y_test)0.49206349206349204朴素贝叶斯算法下面代码使用了朴素贝叶斯算法,朴素贝叶斯训练模型准确率在60左右%。fromsklearn.naive_bayesimportGaussianNBmodel=GaussianNB()model.fit(X_train,y_train)model.score(X_test,y_test)0.6009070294784581情感分析的最佳算法接下来,我们绘制所有算法的准确性。如下所示。图5:不同算法的准确率表现可以看出,对于情感分析问题,随机森林算法的准确率最好。由此,我们可以得出结论,随机森林算法是所有机器算法中最适合情感分析的算法。我们可以通过处理更好的特征、尝试其他矢量化技术或使用更好的数据集或更好的分类算法来进一步提高准确性。由于随机森林算法是解决情感分析问题的最佳算法,因此我将向您展示预处理数据的示例。在下图中,您可以看到模型做出了正确的预测!试试这个来改进你的项目!图6:做出的样本预测
