使用机器学习算法仅根据内容而不是用户历史来查找类似产品的正确方法

Yog*_*dav 5 machine-learning similarity tf-idf svd predictionio

我有大约 2-3 百万种产品。每个产品都遵循这个结构

{
    "sku": "Unique ID of Product ( String of 20 chars )"
    "title":"Title of product eg Oneplus 5 - 6GB + 64GB ",
    "brand":"Brand of product eg OnePlus",
    "cat1":"First Category of Product Phone",
    "cat2":"Second Category of Product Mobile Phones",
    "cat3":"Third Category of Product Smart Phones",
    "price":500.00,
    "shortDescription":"Short description about the product ( Around 8 - 10 Lines )",
    "longDescription":"Long description about the product ( Aroung 50 - 60 Lines )"
}
Run Code Online (Sandbox Code Playgroud)

问题陈述是

仅根据内容或产品数据查找类似产品。所以当电子商务用户点击一个产品(SKU)时,我会在推荐中展示与该SKU或产品相似的产品。

比如用户点击apple iphone 6s silver,我会在“类似产品推荐”中展示这些产品

1) 苹果 iphone 6s 金色或其他颜色

2) 苹果 iphone 6s plus 选项

3) 其他配置的苹果 iphone 6s 选项

4)其他苹果iphone

5)该价格范围内的其他智能手机

到目前为止我尝试过的

A) 我曾尝试使用“用户查看事件”来推荐类似产品,但我们没有那么好的数据。它产生良好的结果,但仅适用于少数产品。所以这个模板不适合我的用例。

乙) One hot encoder+ Singular Value Decomposition ( SVD )+Cosine Similarity

我已经训练我的模型周边25万的产品具有尺寸= 500本的修改预测IO模板。它给出了很好的结果。我没有在培训中包含产品的详细描述。

但我在这里有一些问题

1)在我的用例中是否使用One Hot Encoder并且SVD是正确的方法?

2)有什么方法或技巧可以在训练中给予额外的权重title和brand属性。

3)你认为它是可扩展的。我正在尝试将产品大小增加到 100 万个,维度 = 800-1000,但它谈论了很多时间,系统挂起/停止或内存不足。(我正在使用 apache 预测 io )

4) 当我要训练 200 万个产品时,我的维度值应该是多少。

5) 我需要多少内存才能部署SVD经过训练的模型来查找cosine similarity200 万个产品的内存。


我应该在我的用例中使用什么,以便我也可以赋予我的重要属性一些权重,并且我将使用合理的资源获得良好的结果。在这种情况下,我应该使用的最佳机器学习算法是什么。

Pru*_*une 1

既然我已经表达了我对该帖子的反对意见,我将就以下问题提供一些指导:

  1. 机器学习中通常不存在“正确的方法”。最高的仲裁者是结果是否具有您需要的特征。最重要的是,准确性是您所需要的吗?您能找到更好的方法吗?如果没有您的数据集的重要子集,我们就无法判断。
  2. 是的。大多数训练方法都会调整任何改善误差(损失)函数的因素。如果您选择的方法(SVD 或其他)不能自动执行此操作,请更改误差函数。
  3. 是的,它是可扩展的。基本推理过程与数据集大小呈线性关系。你得到的结果很差,因为你在扩大数据集时没有扩展硬件;这是“扩大规模”的一部分。您还可以考虑横向扩展(更多计算节点)。
  4. 那么,维度应该如何随数据库大小缩放?我相信经验证据支持这是一个 log(n) 关系......你需要 600-700 维。但是,您应该根据经验来确定这一点。
  5. 这取决于您如何使用结果。根据您的描述,您所需要的只是N 个顶级匹配的排序列表,它只需要引用和相似度(一个简单的浮点数)。与模型大小相比,这只是N*8字节的内存。