如何使用AutoVIML库进行自然语言处理的AutoNLP

238 阅读10分钟

使用AutoVIML库进行自然语言处理的AutoNLP

自然语言处理使机器能够理解文本和口语。这个过程通常是紧张的,有许多文本预处理活动,例如,词根化词母化去除停顿词标记化矢量化

AutoVIML被用来简化自然语言处理。AutoVIML是一个AutoNLP库,使用机器学习管道将自然学习处理的过程自动化。

自然语言处理涉及一些步骤。然后,该管道按顺序自动处理所有的初始化步骤。该管道的输出是一个优化的模型。

在本教程中,我们将使用AutoVIML建立一个亚马逊产品评论模型。该模型将客户的评论分类为正面或负面。

前提条件

为了轻松理解本教程中解释的概念,读者应该。

  • 了解[Python编程]。
  • 理解[自然语言处理]中涉及的步骤[。]
  • 能够建立一个[机器学习模型。]
  • 拥有一些使用[Pandas]和[NumPy]的数据分析技能。

注意:读者必须使用谷歌Colab笔记本。这将加速AutoVIML的进程。

安装AutoVIML

要安装AutoVIML,请运行这个命令。

!pip install autoviml

AutoVIML的主要功能

AutoVIML的主要特点如下。

  • 自动进行数据集预处理。AutoVIML将自动进行数据集的预处理。这确保我们有一个干净的数据集,为我们做好准备。

  • 自动选择最佳算法。我们有很多算法可以用于模型训练。AutoVIML搜索所有的算法并选择产生最佳结果的算法。

  • 自动模型微调。AutoVIML将自动微调模型以满足开发者的需求和规范。

  • 自动模型超参数优化。AutoVIML自动调整模型的参数,以给出一个优化的解决方案。

  • 自动模型部署和预测。AutoVIML自动部署模型,进行预测。

这些功能是必不可少的,有助于产生一个优化的模型。如前所述,所有的自动化过程都是使用机器学习管道完成的。一个管道工作流程的例子如下所示。

Pipeline steps

我们将遵循这个工作流程,建立我们的模型。

使用的数据集

我们将使用亚马逊的数据集。该数据集包含客户对个人护理用品的评论。我们将从tensorflow_datasetstensorflow_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

输出结果如下所示。

Dataset information

从上面的图片来看,该数据集有研究人员多年来收集的超过1.3亿条客户评论。该数据集有不同的列。我们对以下几列感兴趣。helpful_votes,review_headline,review_bodystar_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

输出结果如下图所示。

Dataset array

从上面的图片来看,我们的数据集是以数组格式出现的。下一步就是要从我们的数据集中提取四个重要的列。

提取重要列

要提取重要的列,请使用这段代码。

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

其输出结果如下所示。

Dataframe structure

从上面的图片来看,我们的数据集被整齐地组织成行和列。它有四列和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

输出显示如下。

Target column

上面的图片显示了添加了目标列的数据集。目标列被标记为10

我们的数据集被整齐而正确地格式化了。现在我们需要将我们的数据集分成两组。

数据集的拆分

我们将把我们的数据集分成两组。我们用一个集子来训练模型,而另一个集子则用来测试模型。

让我们导入用于数据集拆分的包。

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特征,产生一个优化的模型。

运行这段代码后,这个过程将产生输出。这些输出显示了模型建立的进度。这些输出也将显示模型在训练期间使用的最佳参数和算法。

第一个输出

第一个输出如下所示。

Output 1

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

第二个输出

第二个输出如下所示。

Output 2

这个输出显示了我们的数据集中的单词和字符的数量。

第三输出

第三项输出如下所示。

Output 3

该输出显示了我们的数据集中的停顿词和URL的数量。

第四项输出

第四项输出如下所示。

Output 4

这个输出显示了我们的数据集中的标点符号和标签的数量。

接下来的输出显示了矢量化过程。

矢量化过程

矢量化过程将文本数据转换为模型可以使用的数字数据。机器学习模型并不理解原始文本。

Vectorization process

在上面的图片中,矢量化过程是使用Count VectorizerTFIDF矢量包完成的。然后Auto_NLP 功能选择产生最佳结果的算法。

下面的图片显示了最佳选择的向量器。

Best vectorizer

从上面的图片来看,Auto_NLP 函数选择了TFIDF向量器作为最佳向量器。Auto_NLP 函数还为TFIDF向量器添加了最佳参数。

接下来的输出显示了最佳算法和机器学习管道。

最佳算法和机器学习管道

Auto_NLP 函数搜索了所有可用的算法。然后,它选择一个具有最佳结果的算法。选择的算法显示在下面的输出中。

Best algorithm

从上面的图片来看,最佳算法是Multinomial Naive Bayes algorithm

该图片还显示了创建的管道。该管道将使建立NLP模型的步骤自动化。在我们的案例中,我们有两个步骤。第一步是使用TFIDF vectorizer ,进行矢量化。第二步是使用Multinomial Naive Bayes algorithm 进行模型训练。

该管道将运行这两个步骤并产生以下输出。

Pipeline output

从上面的图片来看,这个过程已经运行成功。该过程产生了一个优化的模型。这标志着AutoNLP过程的结束。我们可以使用这个模型来进行预测。

进行预测

在这个阶段,我们将使用该模型对测试数据集中的一些客户评论进行分类。为了进行预测,请使用这段代码。

nlp_transformer.predict(test[nlp_column])

预测结果显示如下。

array([1,1,1,0,1, ..., 0, 1, 0])

从上面的输出,我们的模型可以进行预测。它将一些评论归类为积极的(1),其他的为消极的(0)。

总结

在本教程中,我们学习了如何使用AutoVIML库实现自然语言处理的自动化。我们首先讨论了自然语言处理中涉及的所有过程。在安装了AutoVIML库之后,我们探索了它用来产生优化模型的关键特征。

然后,我们使用AutoVIML库来建立自然语言处理模型。最后,我们使用该模型进行预测。该模型能够将客户的评论归类为正面或负面。