0

Ich versuche, ein ähnliches Produkt mit LSH zu erstellen, und ich habe folgende Abfrage.Suche nach ähnlichen Produkten mit LSH auf strukturierten Daten

Meine Daten hat folgende Schema

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

Sollte ich LSH zu den einzelnen Funktionen getrennt und dann kombinieren sie in irgendeiner Art und Weise durchführen, können gewichteter Durchschnitt sein?

oder

Soll ich über den Aufbau LSH auf alle gehen verfügt über alle zusammen (im Grunde Merkmalsnamen Befestigung während Schindeln wie title_iphone, title_nexus Erstellen price_1200.25, aktiv_1 ...) und dann mit Sack-of -Wörter Ansatz LSH auf dieser Tasche durchführen?

Wenn jemand mich zu einem Dokument verweisen kann, wo ich herausfinden kann, wie man LSH auf strukturierten Daten wie von E-Commerce durchführt, wird es groß sein.

P.S. Ich plane, Funken und Min-Hash-Funktion in LSH zu verwenden. Lassen Sie es mich wissen, wenn Sie weitere Informationen benötigen.

Antwort

1

Ich würde mit Ihrem ersten Ansatz gehen, aber verketten die Binärcodes, die wir von jedem einzelnen LSH-Hash erhalten, anstatt sie zu mitteln.

Zum Beispiel: Angenommen, Sie 4 Bits verwenden, um die Hash (für jedes Merkmal Familie) darstellen:

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 

nun Ihre weiteren Hash für data_1 haben annehmen:

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

In Ihrem Abrufverfahren könnte die Ähnlichkeitssuche durchgeführt werden, indem zuerst der Hash für die Abfragedaten berechnet wird: zum Beispiel

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

Angenommen, Sie fanden heraus, dass data_1 und data_0 die einzigen zwei Datenstücke sind, die auf dem gleichen Eimer wie data_x gehasht wurden, dann wird nur Sie die Hamming-Distanz zu berechnen, müssen zwischen

(die bitweise Operator XOR berechnet werden kann)
  • data_1 und data_x -> = Hammingabstand 6, Ähnlichkeit = 6/12
  • data_0 und data_x -> Hammingdistanz = 3, Ähnlichkeit = 9/12

In diesem Beispiel ist data_0 die ähnlichste Daten zu Ihrer Abfrage.

HINWEIS Sie werden die Ähnlichkeitsinformationen, die in einzelnen Binärcodes codiert sind, verlieren, wenn Sie sie mitteln. Siehe die obigen Beispiele, würden Sie die gleiche Codierung für data_1 und data_0, die 5 oder 1001 ist. Wenn Sie jedoch jedes einzelne Feature betrachten, ist offensichtlich data_1 mehr von data_x als data_0.

AUCH NOTE Wenn Sie der Meinung sind, dass eine Feature-Familie wichtiger ist und somit mehr Gewicht hat, können Sie mehr Bits für diese Feature-Familie verwenden.

Verwandte Themen