电子商务中使用属性关键字的产品分类

数据挖掘 机器学习 Python 分类 scikit-学习
2021-09-28 13:24:54

我正在研究一个产品分类问题(电子商务),我必须根据关键字识别产品类别。

例如,如果输入为“ Samsung Galaxy On Nxt 3 GB RAM 16 GB ROM Expandable Upto 256 GB 5.5 inch Full HD Display ”,它应该正确地将其识别为“Mobile”

这里的问题是我必须在某些键值对上训练模型。以前,我通过使用 LinearSVC 在产品级别上训练模型来解决同样的问题,它给出了令人满意的结果。

有关数据的详细信息:

  1. 我目前有 39 个类/类别,将来可能会增加。

  2. 我正在使用一个大约 10 MB 的 csv 文件,它有大约 7000 行。(请参阅下面的结构)

  3. 我正在使用来自 sklearn.svm 的 LinearSVC

我现在有以下培训结构:

--------------------------------------------------------------
| Attribute_Names   |  Attribute_Values        |   Category  |
--------------------------------------------------------------
| Brand             |  Samsung, Nokia, OnePlus | Mobile      |
| RAM, Memory       | 2 GB, 4 GB, 3 GB, 6GB    | Mobile      |
| Color,Colour      | Black, Golden, White     | Mobile      |
--------------------------------------------------------------
| Fabric, Material  | Cloth, Synthetic, Silk   | Ethnic Wear |
| Pattern, Design   | Digital, floral print    | Ethnic Wear |
--------------------------------------------------------------

我有以下查询:

1 - 使用哪种模型来解决这个问题?

2 - 你会如何处理这样的问题?

3 - 您遇到的任何类似问题。

任何帮助深表感谢。

编辑:

步骤 1) - 合并列(attribute_names, attribute_values)

步骤 2) - 清理数据(删除停用词、特殊字符、词干)

步骤 3) - 使用 TfidfVectorizer(stop_words='english',lowecase=True) 进行特征提取

步骤 4) - OneVsRestClassifier(LinearSVC(loss='hinge',penalty='l2'))

这是我们到目前为止执行的步骤,结果还不够好(仍然存在错误分类)

数据的格式/结构与我们上面提到的相同。

1个回答

您正在处理的问题类型称为多类分类。并非所有算法都适合处理它,但基于树的方法和神经网络是流行的选择。如果您需要它快速运行并且概率校准不是太重要,那么朴素贝叶斯也适用于某些数据集。要查看此类数据集的示例,请查看Kaggle Spooky Author Identification 竞赛已发布的内核提供了一些很好的特征工程和建模选择示例。

(我假设类别标签是唯一的。如果每条记录可以有多个标签,则称为多标签分类,我将通过为数据集中的 39 个标签中的每一个构建单独的二进制模型来处理。对于示例数据集,请查看Kaggle Toxic Comments 竞赛。)

至于具体使用您的数据进行建模,您现在拥有的结构对于模型来说似乎有点奇怪。训练数据集的每一行应该代表一条记录,每一列代表一个特征,列中的值描述记录,而在您的格式中,任何手机都应该在相应的移动 Attribute_Names 中包含有关每个值的信息。当您获得原始输入“ Samsung Galaxy On Nxt 3 GB RAM 16 GB ROM Expandable Upto 256 GB 5.5 inch Full HD Display ”时,它是如何转换为可以输入模型的格式的?

另外,Attribute_Names、Attribute_Values 是从哪里来的,它们是手动指定的吗?如果是这样,那就限制了模型的性能潜力,因为如果让模型自行生成特征,模型可以检测到数据中的其他单词。对于一个好的建模流程,训练数据应该包含输入的原始文本,然后处理文本以生成特征,然后输入实际模型以输出标签。因此,一行原始训练数据集将是:

------------------------------------------------------------------------
| Description                                            |   Category  |
------------------------------------------------------------------------
| 'Samsung Galaxy On Nxt 3 GB RAM 16 GB ROM Expandable   | Mobile      |
| Upto 256 GB 5.5 inch Full HD Display'                  |             |
------------------------------------------------------------------------

然后,您将使用一些 sklearn 预处理器将文本转换为特征。Count VectorizerTF-IDF Vectorizer是流行的选择。您还可以从已有的属性键和值中的关键字创建自己的特征,例如,如果文本中出现三星、诺基亚或一加等词,则创建品牌指示列,但我绝不会在建模时仅使用手动指定的特征具有文字功能。