产品名称分类

数据挖掘 分类 多类分类
2021-09-19 06:15:07

我是机器学习的初学者,我正在尝试建立一个模型,根据产品名称中的单词按类别对产品进行分类。我的目标是通过观察现有产品的类别来预测一些新产品的类别。
例如,拥有以下产品:

PRODUCT                                     CATEGORY
soap bar johnsons green leaves              bath
cookie bauducco lemon 120gr                 cookie
nesfit cookie choc and st                   cookie
strawberry soap soft                        bath
spoon hercules medium                       kitchen
soap dish plastic medium                    bath
[...]

我的第一个想法是将每个产品中出现的单词(标记)分组,指示指定的类别和出现次数(用作权重)。所以,对于这个样本,我有:

WORD           CATEGORY         COUNT
soap           bath             3
cookie         cookie           2
medium         bath             1
medium         kitchen          1
bar            bath             1
johnsons       bath             1

有了这个,我就可以训练一个模型,并用它来对新产品进行分类。

例如,有一个新产品hands liquid soap 120oz,它可以被归类为bath,因为它包含单词soap,对于该bath类别具有很强的权重。

在其他情况下,根据单词在训练集中的出现,新产品medium hammer可以分类为bath或。kitchenmedium

所以,我的疑问是:

  • 我会采用正确的方法吗?
  • 在这种情况下使用的最佳算法是什么?
  • 如何使用 Weka 应用它?
4个回答

如果你有足够的数据和合理数量的类,你绝对可以训练你的模型。您所做的单词分组类似于一种称为词袋模型的方法。您可以使用它来使用朴素贝叶斯或 SVM 等构建分类器。另一方面,您还可以查看 KNN 算法,因为它看起来适合您的用例。你可以看看这篇论文

我认为,并且也做过类似的问题,这个问题可以通过以下方式解决:
1. 生成 NGrams
2. 创建 1 个热编码矩阵
3. 传递给朴素贝叶斯或随机森林

它会自动计算字数(您也可以应用 TFIDF)并根据该权重计算。
例子:

您还可以尝试使用 Sklearn 中的Tfidf Vectorizer,这对您的情况会有所帮助,因为 Tfidf 向量化本质上能够通过计算词频和逆文档频率的乘积来学习和区分频繁出现的单词和很少出现的单词。在这里查看更多详情。在此特征化之上,您可以尝试朴素贝叶斯,因为它非常快,并且似乎适用于文本数据,因为它与条件概率一起使用。使用混淆矩阵等性能指标来更好地了解正在发生的事情,因为当您的数据不平衡时,准确性并不是一个很好的衡量标准。希望能帮助到你

这应该可以通过预训练的词向量 + 文档/句子向量来实现。教程:https ://medium.com/scaleabout/a-gentle-introduction-to-doc2vec-db3e8c0cce5e

在此处输入图像描述

所有具有“相似含义”的产品标签都应在短距离内聚集。

将产品名称转换为向量后,可以将向量输入逻辑回归分类器(或浅层神经网络)。

教程:https ://towardsdatascience.com/multi-class-text-classification-with-doc2vec-logistic-regression-9da9947b43f4