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 などの帯状疱疹を作成しながら機能名を添付します)。次に、bag-of-words アプローチを使用して、このバッグで LSH を実行しますか?

e コマースのような構造化データに対して 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

と がと同じバケットにハッシュされた唯一の 2 つのデータであることがわかったとします。そのdata_1場合、間のハミング距離 (ビットごとの演算子 XOR を使用して計算できます) を計算するだけで済みます。data_0data_x

  • data_1そしてdata_x-> ハミング距離 = 6、類似度 = 6/12
  • data_0そしてdata_x-> ハミング距離 = 3、類似度 = 9/12

したがって、この例でdata_0は、クエリに最も類似したデータです。

注: 平均化すると、個々のバイナリ コードにエンコードされた類似性情報が失われます。上記の例を参照するdata_1data_0、 と の同じエンコーディングが得られます。これは 5 または 1001 です。ただし、個々の機能を見ると、 は とは明らかdata_1に異なりdata_xますdata_0

ALSO NOTE いくつかの機能ファミリがより重要であると感じた場合は、その機能ファミリにより多くのビットを使用できます。

于 2016-04-07T07:10:39.110 に答える