电影评论的情感分析

484 阅读9分钟

在一个数据盛行的世界里,组织开始将其视为巨大的发展机会。目前的营销公司显然对用户的分析很着迷(Gavin, 2019)。在过去,感情和情绪是很难衡量的,很容易被忽视,但在技术的协助下,企业现在可以预测这一点。用一组50,000条电影评论进行情绪分析,这些评论被分为正面和负面评论,使用10,000个单词进行标记,我将对可用于情绪分析的机器学习和深度学习方法进行广泛比较--XG Boost VS.LSTM二元分类模型。

EDA(探索性数据分析)

价值计数

为了使本项目中部署的模型获得良好和公正的准确性,必须有相等数量的值。通过查看每个正负类的总数据集,进行了价值计数,以检查不平衡性。

image.png

如上图所示,每个标签都有25,000个平衡的数值。这自动意味着数据集的使用是平衡的。

数据清理

在这个阶段,文本清理管道包括消除所有的链接,删除所有的标点符号,除了点(.)、逗号(,)、连字符(-)、感叹号(!)和问号(?),删除任何HTML标签,插入标点符号空间以解释某些被省略的标点符号,摆脱数字,删除任何额外的空白,删除表情符号和标签编码。

image.png

预处理(XG-Boost)

文本嵌入(词包)。

image.png

使用scikit learn计数向量器,以向量的形式建立了一个模型分类矩阵,可以将其输入XG Boost模型。词包范式的两个主要优势是其简单性和应用性。在进行更复杂的词嵌入之前,它可以被用来制作一个副本模型草案。鉴于它只持有文本文档中的非零值,词包模型是文本数据的稀疏表示。由于该模型的内存和处理需求减少,在处理巨大的数据集时,这可能是一个相当大的好处。

分割训练和测试数据

image.png

使用sklearn模型选择,在应用任何模型之前,数据集被分割成训练和测试实例。75%的数据被用于训练,25%的数据被用于测试。

分析(XG-Boost)

image.png

为了实现情感分析,有多种机器学习模型可以使用,但在这个项目中,我们部署了XG-Boost。XG-Boost是一个梯度提升的决策树解决方案,针对速度和性能进行了优化。XG-Boost是extreme Gradient Boosting的缩写,性能优于大多数预测模型。这个模型还允许用户决定估计器的数量,因为估计器的数量越多,准确性越高。基于这些因素,我将用它来对我们的评论进行分类。

训练模型

image.png

如图所示,导入的 XGB 分类器的最大深度为 15,估计器的数量上限为 30。将训练数据集拟合到模型中并进行了预测。

结果(验证)

对于验证,混淆矩阵和分类报告被用作下面输出中看到的评估指标。

image.png

真阳性: 9641

假阳性: 1885

假阴性: 2845

真阴性: 10629

真阳性等同于 9641,准确率为 84%,这意味着正确预测的正面评论的数量,其次是 1885 的假阳性,准确率为 16%——预测为正面的负面评论的数量。假阴性上限为 2845,这意味着正面评论的数量被预测为负面,得分为 21%,真负面为 10629,得分为 79%——正确预测的负面评论数量。

image.png

从分类报告来看,负面标签的准确率为84%,而正面标签的准确率为79%。在平均规模上,验证(测试)准确率为81%。

预处理(LSTM)

转换为NumPy数组

评论和情感被转换为NumPy数组,因为该算法只接受数组。

image.png

分割训练和测试数据

使用sklearn模型选择,在应用任何模型之前,数据集被分割成训练和测试实例。75%的数据被用于训练,25%的数据被用于测试。

符号化

image.png

如果不进行矢量化,则无法向该模型提供字符串。此处将文本数据(评论)转换为数值以构建和测试模型。这称为标记化,是在包含所有训练数据的完整文本语料库上使用单词标记化(一种使用 NLTK 库来解码给定短语中的单词的 Python 方法)完成的。在标记化过程中,句子被分成单个单词的集合,并为每个单词计算统计特征。定义词汇量是为了标记训练数据。这是将每个单词的使用频率从低到高排序可能得到的单词总数。在这种情况下,仅使用训练数据集中出现的前 10,000 个单词。定义超参数后Tokenizer()fit_on_texts() 用于将其拟合到训练数据中,并将每个评论更改为数字序列。

序列长度

image.png

为了训练模型,训练数据中的每条评论都被转化为一个数字序列。每条评论的内容都有不同的字长,导致与其他评论相比,数字序列的长度也不同。为了避免这种情况,每篇评论的序列长度被限制在200字的固定值上。长于200字的数字序列的结尾被截断,而小于200字的序列结尾则用零填充。对测试数据也重复同样的步骤。

分析(LSTM模型)

image.png

在许多方面,LSTM比RNN和传统的前馈神经网络要好。它们有能力在长时间内有选择地回忆模式,这就说明了这一点。LSTM实现了相当多的成功运行,并比RTRL和大多数深度学习模型学习得更快。此外,LSTM解决了错综复杂的、匠心独运的长延迟问题,这是以前的递归网络算法都无法做到的。

训练 模型

image.png

在这个阶段,使用Sequential() 模型创建了情感分析LSTM模型,随后添加嵌入层,将每个词转化为密集向量,嵌入维度由该层的超参数决定。接下来,用选定的单元大小和**Bidirectional()**层定义了LSTM层,并加入了输出层。下面是该模型的总结。

image.png

假设定义的 epochs 被设置为5,并且模型只在2次之后就达到了最小的验证损失。在最后3次 epochs中,模型可能会对训练数据进行过度拟合。通过提供EarlyStopping()回调来防止这种情况,如果在回调给定的历时数后无法降低验证损失值,则会停止模型训练。

结果(验证)

存储后,model.fit 产生一个'history'变量:history = model.fit() 并将history.history 字典转换为pandas dataframe:metric_df = pd.DataFrame(history.history),结果汇总使用 print 命令作为 print(metrics_df) 检查。这是评估指标

image.png

image.png

在模型训练后发现,训练在3个历时后被停止,因为验证损失在第一个历时后保持不变。由于模型参数被保存在 "历史 "变量中,我们可以看到训练和测试数据的准确性和损失。

image.png

该模型估计有86%的 验证准确率,而验证损失准确率43%,将测试评论情绪分类为 "正面 "或 "负面"。使用另一种神经网络设计、数据预处理和参数增强可能会进一步提高这些准确性数字。

使用matplotlib也可以看到训练和测试数据在整个历时数中的损失和准确性:

image.png

对结果的论证

为了进一步证明模型的准确性,随机评论被送入模型以预测情绪。

image.png

从结果中可以看出,第一条声明的预测准确率为97%,这是一条正面评论。第二条声明是相当讽刺的,但从模型中可以看出,它预测了84%的高分,这在一定程度上是可靠的,被认为是负面评论。平均来说,准确率为90% ,这证明了先前**81%**的预测是可靠的。

结果比较

从验证分数来看,XG Boost模型在IMDB评论数据集上获得了81%的准确性。在某种程度上,这是一个可靠的性能,但可以通过调整某些参数,如估计器的数量和使用一个高影响的自变量来改进。

通过训练一个双向的LSTM网络,在IMDB评论数据集上实现了86%的验证准确性。背对背的LSTM层或更大的单词字典,都将在后续的开发中使用,可能会进一步提高这一准确性。

从以上显示的结果可以看出,LSTM深度学习方法比XG Boost机器学习方法表现更好。这可能源于循环神经网络(RNN)被扩展到包括LSTM网络,它以双向模式运行,即它来回迭代,主要是为了处理RNN的失败情况。

反思

每次测试都获得超过 80% 的稳健结果,这些测试证明了在情感分析领域使用 XG Boost 和 LSTM 的可行性。在初始阶段,在探索数据集时,发现了某些杂质,例如表情符号、主题标签、标点符号和特殊字符,在将数据输入模型之前必须将其删除。

此过程中涉及的另一个敏感步骤是 XG Boost 中“max_depth”参数的选择,这是决定模型是否过拟合的因素,因此在选择正确值时要谨慎。

在LSTM模型的参数中声明epoch数时,期望模型从规定的epoch数开始迭代,只要验证损失不断提高,可以给出ModelCheckpoint()来跟踪每个epoch后的损失和除了 EarlyStopping() 的回调之外,在验证损失方面保留最佳模型。

如果在训练阶段连续两个 epoch 的验证损失没有减少,则在该项目中使用回调来停止模型训练。

就商业价值而言,电影制作人现在可以解读客户的满意度,这将有助于改进未来的电影制作。