基于BERT和RoBERTa的情感分析系统:结果分析
基于BERT和RoBERTa的情感分析系统:结果分析
本系列文章介绍了如何使用Tensorflow、BERT、RoBERTa和Sklearn构建情感分析系统。本文作为系列的最后一篇,将通过混淆矩阵和分类报告来评估BERT和RoBERTa在微博情感分类任务上的表现,并总结两个模型在不同情感类别上的准确性、召回率、F1分数等性能指标。
RoBERTa情感分类报告
通过下面的代码生成并打印输出BERT模型在测试集上的分类报告信息,包括了每个情感类别(Negative、Neutral、Positive)的精确度、召回率、F1分数等评估指标。
print('Classification Report for BERT:\n',classification_report(y_test,y_pred_bert, target_names=['Negative', 'Neutral', 'Positive']))
上述代码生成并打印出BERT模型在测试集上的分类报告,其中包含了每个情感类别(Negative、Neutral、Positive)的精确度、召回率、F1分数等评估指标。根据结果,BERT模型在各个情感类别上表现均衡,整体准确度较高。执行后会输出:
Classification Report for BERT:
precision recall f1-score support
Negative 0.88 0.91 0.89 1629
Neutral 0.89 0.75 0.82 614
Positive 0.89 0.91 0.90 1544
micro avg 0.89 0.89 0.89 3787
macro avg 0.89 0.86 0.87 3787
weighted avg 0.89 0.89 0.88 3787
samples avg 0.89 0.89 0.89 3787
RoBERTa情感分类报告
下面的代码生成并打印出RoBERTa模型在测试集上的分类报告,其中包含了每个情感类别(Negative、Neutral、Positive)的精确度、召回率、F1分数等评估指标。
print('Classification Report for RoBERTa:\n',classification_report(y_test,y_pred_roberta, target_names=['Negative', 'Neutral', 'Positive']))
上述代码生成并打印出RoBERTa模型在测试集上的分类报告,其中包含了每个情感类别(Negative、Neutral、Positive)的精确度、召回率、F1分数等评估指标。根据结果,RoBERTa模型在Negative和Positive情感类别上表现良好,但在Neutral类别上的表现相对较差。执行后会输出:
Classification Report for RoBERTa:
precision recall f1-score support
Negative 0.91 0.89 0.90 1629
Neutral 0.74 0.84 0.78 614
Positive 0.92 0.88 0.90 1544
micro avg 0.88 0.88 0.88 3787
macro avg 0.85 0.87 0.86 3787
weighted avg 0.88 0.88 0.88 3787
samples avg 0.88 0.88 0.88 3787
两种大模型性能的对比可视化
使用Seaborn库绘制了两个热力图,展示了BERT和RoBERTa两个模型在测试集上的混淆矩阵。
fig, ax = plt.subplots(1,2,figsize=(9,5.5))
labels = ['Negative', 'Neutral', 'Positive']
plt.suptitle('Sentiment Analysis Comparison\n Confusion Matrix', fontsize=20)
sns.heatmap(confusion_matrix(y_test.argmax(1),y_pred_bert.argmax(1)), annot=True, cmap="Blues", fmt='g', cbar=False, ax=ax[0], annot_kws={"size":25})
ax[0].set_title('BERT Classifier', fontsize=20)
ax[0].set_yticklabels(labels, fontsize=17);
ax[0].set_xticklabels(labels, fontsize=17);
ax[0].set_ylabel('Test', fontsize=20)
ax[0].set_xlabel('Predicted', fontsize=20)
sns.heatmap(confusion_matrix(y_test.argmax(1),y_pred_roberta.argmax(1)), annot=True, cmap="Blues", fmt='g', cbar=False, ax=ax[1], annot_kws={"size":25})
ax[1].set_title('RoBERTa Classifier', fontsize=20)
ax[1].set_yticklabels(labels, fontsize=17);
ax[1].set_xticklabels(labels, fontsize=17);
ax[1].set_ylabel('Test', fontsize=20)
ax[1].set_xlabel('Predicted', fontsize=20)
plt.show()
执行后会绘制两种大模型的混淆矩阵对比可视化图,如图11-8所示。混淆矩阵是一种用于评估分类模型性能的可视化工具,显示了模型对每个类别的分类情况。其中,热力图中的颜色越深,表示模型在该类别上的表现越好。整个图表通过两个子图进行对比,分别展示了BERT和RoBERTa分类器的混淆矩阵。
图11-8 混淆矩阵对比图
这个可视化图展示了BERT和RoBERTa两个模型在情感分析任务上的优秀性能,分类的准确度达到了90%左右。