0

我正在尝试使用 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,那就太好了。

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

4

1 回答 1

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_1data_0是仅有的两个已散列到data_x

  • data_1data_x-> 汉明距离 = 6,相似度 = 6/12
  • data_0data_x-> 汉明距离 = 3,相似度 = 9/12

因此,在此示例中,data_0是与您的查询最相似的数据。

注意,如果对它们进行平均,您将丢失以单个二进制代码编码的相似性信息。看上面的例子,你会得到相同的编码data_1data_0,即 5 或 1001。但是,如果你查看每个单独的特征,显然与比data_1有更大的不同。data_xdata_0

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

于 2016-04-07T07:10:39.110 回答