餐厅评论的 NLP 分析

2025年6月21日 | 阅读 5 分钟

自然语言处理(NLP)领域是计算机科学的一个分支,也是人工智能的一个分支,它专注于计算机系统与人类(自然)语言之间的交互,特别是计算机如何被编程来处理和分析海量的自然语言数据。它是机器学习的一个分支,涉及分析任何文本并实施预测性分析。Scikit-learn 是一个与 Python 编程语言兼容的开源机器学习库。Scikit-learn 主要用 Python 编写,并使用 Cython 编写了一些基本方法以提供性能。Cython 是 Python 编程语言的一个子集,旨在通过使用大部分用 Python 编写的代码来模仿 C 的性能。

让我们来探索文本处理涉及的各种过程以及 NLP 的过程。

该算法可以分析任何文本,例如将书籍分类为浪漫小说和虚构小说。在此期间,让我们利用现有的餐厅评论数据集来分析正面和负面反馈。

涉及的步骤

以下是如何使用 NLP 分析餐厅评论的分步说明:

步骤 1:导入数据,将分隔符设置为“t”。它们由制表符分隔。评论和类别(0 和 1)之间没有分隔符号。但是,它们使用制表符分隔,因为评论中的大多数其他符号(如 $ 表示值,...! 等)都会被算法用作分隔符,从而导致输出出现奇怪的行为(如奇怪的输出、错误)。

代码

步骤 2:文本清洗或预处理

  • 去除标点符号和数字:标点符号和数字对正在处理的文本没有帮助。如果添加它们,只会增加我们作为最后一步创建的词汇表的体积。它们还会降低算法的有效性。
  • 词干提取:提取单词的词根
  • 将所有单词转换为小写:例如,具有不同大小写的单词(例如,“good”和“GOOD”)是无用的。
NLP Analysis of Restaurant Reviews

代码

步骤 3:分词。这涉及从文本主体中分离单词和句子。

步骤 4:词袋模型(使用稀疏矩阵)

  • 考虑数据库中的所有评论单词,不重复。
  • 每个单词一列。因此,将有很多列。
  • 行是评论
  • 如果一个单词出现在数据库评论的列中,那么该单词的数量将出现在词袋模型中位于该单词列下的行。

为此,我们需要 `sklearn.feature_extraction.text` 中的 `CountVectorizer` 类。还可以通过设置属性“max_features”来设置允许的最大特征数(最重要的特征)。对语料库进行训练,然后将相同的转换应用于语料库 `.fit_transform(corpus)`,然后将其转换为数组。评论是负面还是正面,都包含在数据的第二列中(所有行和第一列,索引从零开始)。

代码

待使用数据的描述

  • 列由 t(制表符)分隔
  • 第一列是关于个人的评论。
  • 第二列中的 0 代表负面评论,而 1 代表正面评论。
NLP Analysis of Restaurant Reviews

步骤 5:将语料库拆分为测试集和训练集。为此,我们需要 `sklearn.cross_validation` 中的 `train_test_split` 类。分割可以设置为 70/30、70/30、80/20 或 85/15,或 75/25。在本例中,我通过“test_size”选择了 75/25。词袋模型 `X` 和 `y` 可以是 0 和 1(正面或负面)。

代码

步骤 6:使用预测模型(此处,我们将使用随机森林分类器)

  • 由于随机森林分类器是一种集成模型(这意味着它由许多树组成),我们将从 `sklearn.ensemble` 库中导入 `RandomForestClassifier` 模块。
  • 拥有 501 棵树(“n_estimators”),并且标准为“entropy”。
  • 使用 `X_train` 和 `y_train` 属性通过 `.fit()` 过程拟合模型。

代码

步骤 7:使用 `.predict()` 技术并使用 `X_test` 属性预测最终结果。

代码

输出

NLP Analysis of Restaurant Reviews

注意:随机森林的准确率为 72%。 (如果我们尝试使用不同的测试集大小,结果可能会不同;在本例中为 0.25)。

步骤 8:为了了解准确率结果的精确度,我们需要获取混淆矩阵。

混淆矩阵是一个 2X2 矩阵。

真阳性 (TP):衡量真实阳性中被正确识别的比例。

真阴性 (TN):确定真实阳性中未被正确识别的比例。

假阳性 (FP):衡量真实阴性中被正确识别的比例。

假阴性 (FN):确定真实阴性中未被正确识别的比例。

代码

输出

array([[105,  25],
       [ 41,  79]], dtype=int64)