17

我正在尝试编写一个简单的程序来比较来自不同供应商的产品的价格。不同的供应商可能将同一产品称为不同的事物。

例如,以下三个字符串指的是同一个产品:

  • A2 全脂奶瓶 2l
  • A2 牛奶全脂 2L
  • A2 全脂牛奶 2L

或者以下两个字符串是同一个产品:

  • Ambi Pur 空气清新剂汽车航行 8 毫升。新鲜香草花香。- 每人 1 个
  • Ambi Pur 空气清新剂 Voyage Primary 8ml

此外 - 一些产品不相同,但相似(例如,Full Cream 2L Milk 可能包含各种类似产品。)

我对每种产品的唯一信息是标题和价格。

目前推荐的匹配产品字符串的技术是什么?

从我的谷歌搜索和阅读其他 SO 线程中,我发现:

  • 有些人建议使用贝叶斯过滤技术。
  • 有些人建议对所有产品字符串进行特征提取。因此,您可以从产品中提取品牌(例如“A2”)、产品(“牛奶”)和容量(“2L”),然后创建产品之间的距离向量,并使用二元分类器之类的东西来匹配产品(SVM提到过)。但是,如果没有一大堆规则或正则表达式,我不确定如何实现这一目标?我假设可能有更聪明的无监督学习方法来解决这个问题?价格可能是另一个我们可以用来计算距离向量的“特征”。
  • 有些人建议使用神经网络方法,但是,我在这里找不到太多具体代码或示例。
  • 其他人建议使用字符串相似性算法,例如 Levenshtein 距离或 Jaro-Winkler 距离。

您会使用上述技术之一,还是使用不同的技术?

另外,有人知道任何示例代码,甚至是此类问题的库吗?我似乎找不到任何东西。

(例如,我看到有些人在计算大型数据集的 Jaro-Winkler 距离时遇到性能问题。我希望可能有算法的分布式实现(例如使用 Mahout),但无法找到任何具体的东西。)

4

1 回答 1

8

您会使用上述技术之一,还是使用不同的技术?

如果我真的这样做,我不会使用太多机器学习。我敢肯定,大多数大公司都有一个品牌和产品名称数据库,并使用它来相当容易地进行匹配。可能需要一些数据清理——但这并不是一个 ML 问题。

如果你没有那个数据库,我会说很简单。将所有内容转换为特征向量并进行最近邻搜索。使用它来创建一个工具来帮助您创建数据库。IE:您自己将第一个“A2 Whole Milk 2L”标记为“milk”,然后查看其最近的邻居是否是牛奶。给自己一种方法来快速标记“是”和“需要审查”,或类似的选项。

对于您建议的简单数据,它在 90% 的时间都可以工作 - 您应该能够轻松地获取数据。我在一天内完成了类似的工作,可以为数千个文档添加标签。

拥有自己的数据库后,解决这些问题应该非常简单。您可以重用代码来创建数据库来处理“看不见”的数据。

于 2013-11-05T03:29:44.873 回答