机器学习算法对产品进行分类的想法

机器算法验证 机器学习 分类
2022-03-14 16:16:17

我有一个产品列表,包括产品名称(显示在收据上)和购买产品的商家等变量。

我有很多手动分类为一组固定的类别(例如酒精饮料、蔬菜、肉类等)。

数据一如既往地嘈杂。在这种情况下,特别嘈杂,因为它来自扫描的收据,而在不太好的扫描上的 OCR 通常非常嘈杂。

我想玩弄算法来分类新数据,使用上面的两个变量。

这里有几个主要的变化来源:

  • OCR,这意味着可以找到具有许多不同但相对相似的拼写的产品(例如鸡肉)(例如chiken、hicken、chicen ...)。
  • 根据销售该产品的商家,同一产品可以有不同的名称。在这种情况下,商户之间的名称可以相似或完全不同,但每个商户内部的名称可能相似。
  • 同一个产品在同一个商家中可以有非常不同的名称(例如,收据上的名称是品牌名称的品牌产品与通用名称;软饮料与可口可乐)。

我尝试了一些(一种天真的)分类器,例如使用字符串之间的距离(它主要解决上面提到的第一个主要变化来源),但我对结果不太满意。

所以我想在这里联系,询问如何解决这个问题的想法。我想很多人已经“解决”了这种问题,或者至少在这种问题上工作的时间比我(几个小时)要长得多,所以我非常感谢这里的任何指导。

顺便说一句,我主要使用 R,因此非常感谢基于 R 的解决方案。

2个回答

一一解决您的问题:

1) OCR:这可能是您遇到的最简单的问题,因为有许多算法在此任务中表现良好。作为参考,在最著名的手写数字数据集MNIST中,几种算法已经达到了超过 99.5% 的准确率(最先进的是卷积神经网络)。您还可以为您的问题找到许多开箱即用的解决方案;如果您的数据是英文的,它会有很大帮助,因为那里的工具更先进。如果您的扫描很嘈杂,您可以先尝试对它们进行降噪

2)您需要对此问题进行一些预处理。首先,如果可能的话,我建议创建一个词袋,即“语料库”中所有唯一词的列表。验证所有这些单词是否正确并执行字符串距离比较(例如汉明距离)以更正 1-2 个字母的拼写错误。我要做的另一件事是计算您的包中每个术语的出现并删除最不频繁的那些(例如,在您的语料库中出现少于 N 次的术语可能是拼写错误,或者删除最不频繁的 M% 的术语)。这应该会显着减少数据集中的噪音。

3)为了解决这个问题,您需要执行某种语义标记。如果您熟悉本体,那么它们的层次结构在这里会很有帮助。您可以创建规则,例如“可口可乐”是一种“软饮料”,它是一种饮料等。

我没有 R 方面的经验,但我相信您可以很容易地找到执行上述所有操作的工具。

您似乎应该定义实体之间的相似性。

你有很多相似性的来源。您提到了名称上的距离(编辑距离)和组中的成员资格。请注意,您可以按组将相似性扩展到许多组和许多相似性类型。组可以属于同一个配方,由同一商家销售,属于同一类别等。相似类型可能是属于同一组的平面,与组大小成反比的重量等。关于所有使用可以使用传递性。例如,您可以通过使用它们将与相同产品一起使用的事实来找到具有不同名称的相似产品(例如,香料 X` 和香料 X` 都将与鸡肉一起使用)。

很快你就会有很多相似的关系,你会想知道如何组合它们。来帮助你已经完成的标签。将这些视为相关产品的正对。生成一组不同的产品(不在正对中)作为负对。构建一个数据集,其中积极性是概念,相似性是对。现在您可以使用监督学习算法来获得将相似性组合成单个预测的模型。您可以使用此模型来预测新对之间的关​​联。作为奖励,您将能够评估模型在数据集上的性能(例如,准确度、精确度……),并获得更多确定性。