自动化多类别文本分类

在本文中,将探讨混合数据类型的自动化多类别分类问题。以文本分类为例,有大量文本和目标标签。基于输入的文本,创建一个模型来学习目标标签,并最终预测目标标签。通常,会执行所有自然语言处理步骤,如分词等,以对目标值进行分类。但在现实世界的数据中,除了文本数据外,有时还会有一些连续变量或分类变量。例如,考虑一个呼叫中心,有客户语音转文本的模型,并且正在尝试分类句子是积极的还是消极的。在这里,除了文本数据外,可能还会有关于客户与呼叫中心代理通话时间的信息,客户从一位代理转移到另一位代理的次数等。这些因素也会影响识别客户是否与代理有积极的互动或消极的互动。在这里,将处理并分类这类数据。

开始自动化文本分类

在这里,将使用AutoViML,这是一个用于自动化机器学习的包。它可以通过以下命令安装:

pip install autoviml

还使用了TensorFlow数据集,特别是亚马逊个人护理电器数据集。还使用了其他Python库,如NumPy和Pandas。

导入库和文本分类的预处理

让导入这些库:

import tensorflow_datasets as tfds import numpy as np import pandas as pd

接下来,从TensorFlow数据集中加载数据集,并将其分配给变量dataset。info变量是关于数据集的元数据。接下来,将训练数据集加载到train_dataset中。

dataset, info = tfds.load('amazon_us_reviews/Personal_Care_Appliances_v1_00', with_info=True, batch_size=-1) train_dataset = dataset['train']

现在,让打印info。它列出了数据集中的所有列及其数据类型。接下来,将数据集转换为NumPy数组。

dataset = tfds.as_numpy(train_dataset)

如果打印dataset输出,可以看到一些初始行,因为它是一个NumPy数组。现在,选择了一些特定的列,包括连续值和分类值的组合以及一个文本列。

verified_purchase = dataset['data']['verified_purchase'] helpful_votes = dataset['data']['helpful_votes'] review_headline = dataset['data']['review_headline'] review_body = dataset['data']['review_body'] rating = dataset['data']['star_rating']

接下来,将这些变量全部转换为Pandas数据框。

reviews_df = pd.DataFrame(np.hstack((verified_purchase[:, None], helpful_votes[:, None], review_headline[:, None], review_body[:, None], rating[:, None])), columns=['verified', 'votes', 'headline', 'reviews', 'rating'])

现在,声明列的数据类型。

convert_dict = { 'verified': int, 'votes': int, 'headline': str, 'reviews': str, 'rating': int } reviews_df = reviews_df.astype(convert_dict)

可以看到输出。有verified列显示是否为验证购买。投票是给评论的,评论的标题,评论的正文,然后是1到5的评分。

自动化多类别文本分类

现在,将创建一个多类别分类。与将评论转换为积极或消极不同,将它们转换为积极、消极和中立。为此,创建了一个函数。在这个函数中,如果评分小于或等于2,将其视为消极评论。如果评分等于3,则视为中立评论。评分高于3则是积极评论。

def convert_rating(rating): if rating <= 2: out = 0 elif rating == 3: out = 1 else: out = 2 return out

现在,创建了一个目标变量。取reviews_df的目标,然后使用评分列通过应用一个lambda函数来调用这个函数。

reviews_df["target"] = reviews_df["rating"].apply(lambda x: convert_rating(x))

数据框的形状是:

reviews_df.shape[0]

目标值的计数是:

reviews_df["target"].value_counts()

在这个不平衡的数据集中,大多数评论是积极的。一些评论是消极的,很少有中立的。在这里,中立值没有被正确预测。原因是当人们为评分写3时,他们对评论感到满意,而词汇会重叠。

训练-测试分割

让看看模型的表现。Auto ML只是对建模技术的表现有一个直观的理解。它不会给一个调整和部署的完美模型。它用于对模型的输出有一个初步的理解,然后可以进一步微调和应用。

现在,将删除评分列,因为不需要在已经创建的目标中包含评分列。如果保留评分列并将其传递给模型,它可能只是一个学习和映射目标变量的函数。

reviews_df = reviews_df.drop('rating', axis=1)

现在,将数据集分割为75-25。即75%进入训练集,25%进入测试集。

from sklearn.model_selection import train_test_split train, test = train_test_split(reviews_df, test_size=0.25)

使用AutoViML训练自动化文本分类模型

之后,导入AutoViML包。

from autoviml.Auto_ViML import Auto_ViML

将目标变量定义为目标。

target = 'target'

调用AutoViML函数。在这里,传递训练数据框和测试数据框以及目标变量。

m, feats, trainm, testm = Auto_ViML(train, target, test, sample_submission='', scoring_parameter='', KMeans_Featurizer=False, hyper_param='RS', feature_reduction=True, Boosting_Flag='CatBoost', Binning_Flag=False, Add_Poly=0, Stacking_Flag=False, Imbalanced_Flag=False, verbose=2)

现在训练完成了。它给出了评论列中单词的分布。它尝试了不同的组合。首先,它尝试了计数向量化器,然后是TFIDF向量化器,带和不带二进制。然后它选择了最佳的一种(计数向量化器),这对特定模型有效。它还给出了每个变量的ROC曲线。它还给出了特征重要性。正如之前所说,这不是最终模型。它只是给出了模型表现的一个想法。可以使用创建的特征和技术,然后可以进一步进行特征工程。接下来,让打印feats。它将给出所有使用的特征。

feats

可以看到各种被视为特征的文本。接下来,让看看测试框架。

testm

它打印出所有特征,最后是使用的不同模型以及目标列,基于测试数据的预测。现在,可以保存模型。

m.save_model('model', format='cbm') m.predict(testm[feats]) from autoviml.Auto_NLP import plot_confusion_matrix, plot_classification_matrix plot_confusion_matrix(test[target].values, m.predict(testm[feats]))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485