使用AutoVIML库进行自然语言处理的AutoNLP
自然语言处理使机器能够理解文本和口语。这个过程通常是紧张的,有许多文本预处理活动,例如,词根化、词母化、去除停顿词、标记化和矢量化。
AutoVIML被用来简化自然语言处理。AutoVIML是一个AutoNLP库,使用机器学习管道将自然学习处理的过程自动化。
自然语言处理涉及一些步骤。然后,该管道按顺序自动处理所有的初始化步骤。该管道的输出是一个优化的模型。
在本教程中,我们将使用AutoVIML建立一个亚马逊产品评论模型。该模型将客户的评论分类为正面或负面。
前提条件
为了轻松理解本教程中解释的概念,读者应该。
- 了解[Python编程]。
- 理解[自然语言处理]中涉及的步骤[。]
- 能够建立一个[机器学习模型。]
- 拥有一些使用[Pandas]和[NumPy]的数据分析技能。
注意:读者必须使用谷歌Colab笔记本。这将加速AutoVIML的进程。
安装AutoVIML
要安装AutoVIML,请运行这个命令。
!pip install autoviml
AutoVIML的主要功能
AutoVIML的主要特点如下。
-
自动进行数据集预处理。AutoVIML将自动进行数据集的预处理。这确保我们有一个干净的数据集,为我们做好准备。
-
自动选择最佳算法。我们有很多算法可以用于模型训练。AutoVIML搜索所有的算法并选择产生最佳结果的算法。
-
自动模型微调。AutoVIML将自动微调模型以满足开发者的需求和规范。
-
自动模型超参数优化。AutoVIML自动调整模型的参数,以给出一个优化的解决方案。
-
自动模型部署和预测。AutoVIML自动部署模型,进行预测。
这些功能是必不可少的,有助于产生一个优化的模型。如前所述,所有的自动化过程都是使用机器学习管道完成的。一个管道工作流程的例子如下所示。

我们将遵循这个工作流程,建立我们的模型。
使用的数据集
我们将使用亚马逊的数据集。该数据集包含客户对个人护理用品的评论。我们将从tensorflow_datasets 。tensorflow_datasets 是一个TensorFlow资源库,它包含了一系列随时可用的数据集。
让我们导入tensorflow_datasets TensorFlow包。
import tensorflow_datasets as tfds
要从tensorflow_datasets 下载数据集,请使用以下代码。
dataset, info = tfds.load('amazon_us_reviews/Personal_Care_Appliances_v1_00', with_info=True, batch_size=-1)
从上面的代码中,tfds.load 方法将从tensorflow_datasets 中加载数据集。我们使用下面的代码将亚马逊的数据集保存到一个新的变量中。
train_dataset = dataset['train']
为了查看我们的数据集中的信息,运行这个命令。
info
输出结果如下所示。

从上面的图片来看,该数据集有研究人员多年来收集的超过1.3亿条客户评论。该数据集有不同的列。我们对以下几列感兴趣。helpful_votes,review_headline,review_body 和star_rating 。
-
star_rating:它显示了购买产品的1-5星评级。 -
helpful_votes:它显示了对所购产品的投票数。 -
review_headline:它显示了产品评论的标题。 -
review_body:它显示了评论的详细描述。
在加载数据集后,我们需要将数据集转换成NumPy数组。我们使用NumPy库来执行这个过程。NumPy数组存储在内存中的一个连续位置,这样一个模型就可以很容易地访问和操作它。
将数据集转换为数组
我们使用以下代码导入NumPy包。
import numpy as np
要转换数据集,请使用这段代码。
dataset=tfds.as_numpy(train_dataset)
要查看新数据集的结构,使用这段代码。
dataset
输出结果如下图所示。

从上面的图片来看,我们的数据集是以数组格式出现的。下一步就是要从我们的数据集中提取四个重要的列。
提取重要列
要提取重要的列,请使用这段代码。
helpful_votes=dataset['data']['helpful_votes']
review_headline=dataset['data']['review_headline']
review_body=dataset['data']['review_body']
rating=dataset['data']['star_rating']
上面的代码将使我们能够在训练中使用这四列作为我们模型的输入。接下来,我们将为我们的数据集创建一个数据框架。数据框架将数据集整齐地组织成列和行。
创建一个数据框架
为了创建一个数据框架,我们将使用Pandas库。让我们导入Pandas库。
import pandas as pd
然后用下面的代码来创建数据框。
reviews_df=pd.DataFrame(np.hstack((helpful_votes[:,None],review_headline[:,None],review_body[:,None],rating[:,None])),columns=['votes','headline','reviews','rating'])
上面的代码将创建一个数据框架。它还指定了列名为votes,headline,reviews, 和rating 。我们需要指定这四列的数据类型。
列的数据类型
我们的列将有以下的数据类型。
convert_dict = {'votes': int,
'headline': str,
'reviews': str,
'rating': int
}
然后我们把数据类型保存到一个新的变量中。
reviews_df = reviews_df.astype(convert_dict)
要查看我们的数据框的结构,请运行这个命令。
reviews_df
其输出结果如下所示。

从上面的图片来看,我们的数据集被整齐地组织成行和列。它有四列和85981行。
添加目标列
我们需要添加一个目标列。目标列表示模型在进行预测后的输出。该模型将客户的评论分类为正面或负面。正面评论由1 表示,而负面评论由0 表示。
如果一个评论是正面的,star_rating 应该大于4。如果star_rating 小于4,该评论就是负面的。为了添加目标列,我们将使用这个逻辑,如下所示。
reviews_df["target"] = reviews_df["rating"].apply(lambda x: 1 if x>= 4 else 0)
这段代码将添加目标列。它将确保如果rating 大于4 ,则审查被标记为1 。如果rating 小于4 ,则评论被标记为0 。
要查看我们新添加的目标列,请使用此代码。
reviews_df
输出显示如下。

上面的图片显示了添加了目标列的数据集。目标列被标记为1 或0 。
我们的数据集被整齐而正确地格式化了。现在我们需要将我们的数据集分成两组。
数据集的拆分
我们将把我们的数据集分成两组。我们用一个集子来训练模型,而另一个集子则用来测试模型。
让我们导入用于数据集拆分的包。
from sklearn.model_selection import train_test_split
要分割数据集,请使用这段代码。
train, test = train_test_split(reviews_df, test_size=0.25)
从上面的代码中,我们使用了test_size=0.25 。这是用于数据集拆分的比例。我们将75%的数据用于训练,25%用于测试。
分割完数据集后,现在让我们使用AutoVIML来自动进行自然语言处理。
使用AutoVIML
AutoVIML有内置的函数可以自动进行自然语言处理。我们将使用从AutoVIML中导入的Auto_NLP 函数。
要导入Auto_NLP ,请使用此代码。
from autoviml.Auto_NLP import Auto_NLP
在导入Auto_NLP ,我们将指定输入列和输出列。
输入和输出列
输入列将在训练期间为模型提供数据。输出列将显示模型在进行预测后的输出。
nlp_column = 'reviews'
target = 'target'
输入列是reviews 列,而输出列是target 列。
现在让我们使用Auto_NLP ,以实现自然语言处理步骤的自动化。
使用导入的函数
要使用Auto_NLP 函数,请运行这段代码。
nlp_transformer= Auto_NLP(
nlp_column, train, test, target, score_type='balanced_accuracy',
modeltype='Classification',top_num_features=50, verbose=2,
build_model=True)
Auto_NLP 函数有以下重要参数。
-
nlp_column:模型使用该列作为输入列。它在训练期间为模型提供了数据。 -
target:它显示了模型在进行预测后的输出。 -
train:它是模型在训练中使用的分割数据集。 -
test:这是模型在测试过程中使用的分割数据集。 -
score_type='balanced_accuracy':它计算模型的准确度分数。 -
modeltype='Classification':它指定了我们要建立的模型的类型。我们正在建立一个分类模型。 -
top_num_features=50:它指定了模型在训练中使用的重要特征的数量。特征是在数据集中发现的重要属性。 -
build_model=True:它告诉Auto_NLP函数建立模型。然后,Auto_NLP函数将使用键,AutoVIML特征,产生一个优化的模型。
运行这段代码后,这个过程将产生输出。这些输出显示了模型建立的进度。这些输出也将显示模型在训练期间使用的最佳参数和算法。
第一个输出
第一个输出如下所示。

在第一个输出中,该函数下载了自然语言工具箱(NLTK)。自然语言工具箱是用来进行文本预处理的。NLTK将执行诸如词干化、词缀化、去除停顿词、标记化和矢量化等任务。
第二个输出
第二个输出如下所示。

这个输出显示了我们的数据集中的单词和字符的数量。
第三输出
第三项输出如下所示。

该输出显示了我们的数据集中的停顿词和URL的数量。
第四项输出
第四项输出如下所示。

这个输出显示了我们的数据集中的标点符号和标签的数量。
接下来的输出显示了矢量化过程。
矢量化过程
矢量化过程将文本数据转换为模型可以使用的数字数据。机器学习模型并不理解原始文本。

在上面的图片中,矢量化过程是使用Count Vectorizer和TFIDF矢量包完成的。然后Auto_NLP 功能选择产生最佳结果的算法。
下面的图片显示了最佳选择的向量器。

从上面的图片来看,Auto_NLP 函数选择了TFIDF向量器作为最佳向量器。Auto_NLP 函数还为TFIDF向量器添加了最佳参数。
接下来的输出显示了最佳算法和机器学习管道。
最佳算法和机器学习管道
Auto_NLP 函数搜索了所有可用的算法。然后,它选择一个具有最佳结果的算法。选择的算法显示在下面的输出中。

从上面的图片来看,最佳算法是Multinomial Naive Bayes algorithm 。
该图片还显示了创建的管道。该管道将使建立NLP模型的步骤自动化。在我们的案例中,我们有两个步骤。第一步是使用TFIDF vectorizer ,进行矢量化。第二步是使用Multinomial Naive Bayes algorithm 进行模型训练。
该管道将运行这两个步骤并产生以下输出。

从上面的图片来看,这个过程已经运行成功。该过程产生了一个优化的模型。这标志着AutoNLP过程的结束。我们可以使用这个模型来进行预测。
进行预测
在这个阶段,我们将使用该模型对测试数据集中的一些客户评论进行分类。为了进行预测,请使用这段代码。
nlp_transformer.predict(test[nlp_column])
预测结果显示如下。
array([1,1,1,0,1, ..., 0, 1, 0])
从上面的输出,我们的模型可以进行预测。它将一些评论归类为积极的(1),其他的为消极的(0)。
总结
在本教程中,我们学习了如何使用AutoVIML库实现自然语言处理的自动化。我们首先讨论了自然语言处理中涉及的所有过程。在安装了AutoVIML库之后,我们探索了它用来产生优化模型的关键特征。
然后,我们使用AutoVIML库来建立自然语言处理模型。最后,我们使用该模型进行预测。该模型能够将客户的评论归类为正面或负面。