【问题标题】:Finding similar products using LSH on structured data在结构化数据上使用 LSH 查找类似产品
【发布时间】:2016-04-02 03:02:12
【问题描述】:

我正在尝试使用 LSH 构建类似的产品,但我有以下查询。

我的数据具有以下架构

id: long,
title: string,
description: string,
category: string,
price: double,
inventory_count: int,
active: boolean,
date_added: datetime

我是否应该分别对单个特征执行 LSH,然后以某种方式将它们组合起来,可能是加权平均?

或

我是否应该一起在所有功能上构建 LSH(基本上是在创建诸如 title_iphone、title_nexus、price_1200.25、active_1 之类的带状疱疹时附加功能名称),然后使用词袋方法执行 LSH在这个包上?

如果有人可以将我引导到一个文档,我可以在其中弄清楚如何对电子商务等结构化数据执行 LSH,那就太好了。

附:我打算在 LSH 中使用 spark 和 min-hash 函数。如果您需要更多详细信息,请告诉我。

【问题讨论】:

    标签: hash apache-spark similarity recommendation-engine locality-sensitive-hash


    【解决方案1】:

    我会采用你的第一种方法,但连接我们从每个单独的 LSH 哈希获得的二进制代码,而不是平均它们。

    例如,假设您使用 4 位来表示散列(针对每个特征系列):

    data_0:
    hash(id) 0101
    hash(title) 1001
    hash(date_added) 0001
    hash(data_0) = 0101,1001,0001
    weighted_average = (5+9+1)/3 = 15/3 = 5
    

    现在假设您有另一个 data_1 的哈希:

    hash(data_1) = 111100000000
    weighted_average = (15+0+0)/3= 15/3 = 5
    

    在您的检索过程中,可以通过首先计算查询数据的哈希来执行相似性搜索:例如,

    hash(data_x) = 010010000011
    weighted_average = (4+8+3)/3 = 15/3 = 5
    

    假设你发现data_1和data_0是仅有的两个与data_x哈希到同一个桶的数据,那么你只需要计算汉明距离(可以计算 在

    之间使用按位运算符 XOR)
    • data_1 和 data_x -> 汉明距离 = 6,相似度 = 6/12
    • data_0 和 data_x -> 汉明距离 = 3,相似度 = 9/12

    所以在本例中,data_0 是与您的查询最相似的数据。

    注意,如果对它们进行平均,您将丢失以单个二进制代码编码的相似性信息。参见上面的例子,你会得到data_1 和data_0 的相同编码,即5 或1001。但是,如果你查看每个单独的功能,显然data_1 与data_x 的不同之处比@987654337 更大@。

    另请注意,如果您认为某些功能系列更重要,因此它值得更多的权重,您可以为该功能系列使用更多位。

    【讨论】:

      猜你喜欢
      • 2020-12-12
      • 2015-07-01
      • 1970-01-01
      • 2019-05-10
      • 2012-05-08
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      相关资源
      最近更新 更多