Ich lese einige Lösungen über die nächste Nachbarsuche in High-Dimensionen mit zufälligen Hyperebene, aber ich bin immer noch verwirrt darüber, wie die Eimer arbeiten. Ich habe 100 Millionen Dokumente in Form von 100-dimensionalen Vektoren und 1 Million Abfragen. Für jede Abfrage muss ich den nächsten Nachbarn basierend auf der Kosinusähnlichkeit finden. Der Brute-Force-Ansatz besteht darin, den Wert der Abfrage mit allen 100 Millionen Dokumenten zu finden und diejenigen mit einem Wert nahe 1 auszuwählen. Ich kämpfe mit dem Konzept der zufälligen Hyperebenen, wo ich die Dokumente in Eimer legen kann, damit ich es nicht mache müssen cosine
Wert 100 Millionen mal für jede Abfrage berechnen.Kosinusähnlichkeit LSH und zufällige Hyperebene
Antwort
Denken Sie in einer geometrischen Weise. Stellen Sie sich Ihre Daten wie Punkte in einem hochdimensionalen Raum vor.
Erstellen Sie zufällige Hyperebenen (nur Ebenen in einer höheren Dimension), machen Sie die Reduktion mit Ihrer Phantasie.
Diese Hyper schneiden Ihre Daten (die Punkte), die Schaffung Partitionen, wo einige Punkte abgesehen von anderen positioniert ist (jeden Punkt in seiner Partition, wäre eine grobe Annäherung sein).
Nun sollten die Buckets entsprechend den durch die Hyperebenen gebildeten Partitionen bestückt werden. Daher enthält jeder Bucket viel weniger Punkte als die Gesamtgröße des Pointsets (weil jede Partition, über die ich schon gesprochen habe, weniger Punkte enthält als die Gesamtgröße Ihres Pointsets).
Als Konsequenz, wenn Sie eine Abfrage stellen, überprüfen Sie viel weniger Punkte (mit Hilfe der Eimer) als die Gesamtgröße. Das ist der ganze Vorteil hier, da das Überprüfen weniger Punkte bedeutet, dass Sie viel besser (schneller) als der Brute-Force-Ansatz machen, der alle Punkte überprüft.
Danke !! Ich habe die Idee komplett verstanden. Ich frage mich nur, ob falsches Negativ immer noch ein Problem in diesem Ansatz ist. Irgendein Vorschlag, wie man die zufälligen Hyperebenen-basierten Buckets in c/C++ implementiert. – viz12
@ Viz12 das ist eine neue Frage. Ich rate dir, meine Antwort zu akzeptieren, denke ein wenig mehr darüber nach und schreibe bei Bedarf eine neue Frage! =) – gsamaras
sicher werde ich darüber nachdenken. – viz12
- 1. Hyperebene in R zeichnen?
- 2. LSH-Bibliotheken in Java
- 3. K-Mittel gegen LSH-Algorithmus
- 4. Nicht leere Eimer in LSH
- 5. Clustering mit Kosinusähnlichkeit
- 6. Kosinusähnlichkeit vs Hamming-Abstand
- 7. So zeichnen Sie SVM-Klassifizierung Hyperebene
- 8. Kosinusähnlichkeit ergibt 'Nan'-Werte pt.II
- 9. Kosinusähnlichkeit für bereits bekannte Duplikatpaare
- 10. Kosinusähnlichkeit von Dokumenten mit Gewichten
- 11. Angepasste Kosinusähnlichkeit funktioniert nicht richtig
- 12. Berechnen der Kosinusähnlichkeit mit Python
- 13. Kosinusähnlichkeit zwischen zwei Arrays finden
- 14. OnevsrestClassifier und zufällige Gesamtstruktur
- 15. Zufällige und negative Zahlen
- 16. So berechnen Sie Kosinusähnlichkeit mit zwei Matrizen
- 17. Kosinusähnlichkeit Alternative für tf-IDF (Dreieck Ungleichheit)
- 18. erhalten Kosinusähnlichkeit zwischen zwei Dokumenten in Lucene
- 19. Apache Spark-Python Kosinusähnlichkeit über Datenrahmen
- 20. Kombinieren von TF-IDF (Kosinusähnlichkeit) mit PageRank?
- 21. Kosinusähnlichkeit auf großer spärlicher Matrix mit numpy
- 22. Kosinusähnlichkeit wenn einer der Vektoren nur Nullen
- 23. Berechnung Kosinusähnlichkeit von Spalten einer Python-Matrix
- 24. Euklidischer Abstand vs Pearson Korrelation vs Kosinusähnlichkeit?
- 25. Suche nach ähnlichen Produkten mit LSH auf strukturierten Daten
- 26. Trigger Mausklick und zufällige Intervalle
- 27. Zufällige Ganzzahlen, Berechnungen und Tabellen
- 28. Generieren und validieren zufällige Zeichenfolge
- 29. LSH-Implementierung in Python 3 mit euklidischen Abstand und alle Nachbarn in LSHForest zu sehen
- 30. Zufällige Farbgenerierung
Siehe http://matpalm.com/resemblance/simhash/ – Mirco