Dieses Repository enthält eine Webanwendung, die sich in ein Musikempfehlungssystem integriert, in dem jeweils dreiunddreißig von 3.415 Audiodateien dauern und eine lokalitätsempfindliche Hashing (LSH) -implementierung verwendet werden, um den rhythmischen Ähnlichkeit zu bestimmen, als Teil einer Zuweisung für die grundlegende Big-Data-Analyse (DS2004) -Kurs.
Das Abrufen von Musikinformationen stellt eine Herausforderung dar, da Audio dargestellt werden kann, was es schwierig macht, festzustellen, welche Funktionen in Fragen priorisiert werden sollten. Um dieses Problem zu vereinfachen, konzentriert sich unsere Implementierung speziell auf den Rhythmus der Songs als Einzelfrist -Funktion. Während frühere Untersuchungen rhythmusbasierte Musikabfragen untersucht haben, leiden die aktuellen Methoden unter Ineffizienz, da sie die gesamte Datenstruktur für die Übereinstimmung mit Song-Rhythmen abfragen müssen. Um diese Einschränkung zu überwinden, schlagen wir die Nutzung des ortssensitiven Hashing (LSH) vor, eine Technik, die ähnliche Elemente in großen Datensätzen effizient identifiziert, ohne erschöpfende Suchvorgänge zu erfordern.
Lokalitätsempfindliches Hashing (LSH) ist eine weit verbreitete Technik, um die Suche nach nächster Nachbarn zu nähern. Es identifiziert ähnliche Elemente in großen Datensätzen effizient, indem sie sie auf einen niedrigeren Raum abbilden. Traditionell verwendet das ortsempfindliche Hashing (LSH) eine andere Methode namens Minhash (oder das min-wise unabhängige Permutationen Locality-sensitive Hashing-Schema), um die festgelegte Ähnlichkeit abzuschätzen. Minhash wird üblicherweise für das Abrufen von Data Mining und Information verwendet. Während Minhash im Allgemeinen wirksam bei der Schätzung der festgelegten Ähnlichkeit ist, weist es bestimmte Einschränkungen auf, die seine Wirksamkeit in bestimmten Anwendungen behindern können.
Um diese Einschränkungen anzugehen, haben wir uns für die Implementierung des LSH -Ansatzes anhand einer anderen effizienten Technik, die als ungefähr nächste Nachbarn (ANN) bezeichnet, implementiert. Diese Technik ist gut geeignet, um ungefähr nächste Nachbarn in großen Datensätzen zu finden. Durch die Verwendung der ungefähren Nachbarn (Ann) anstelle von Minhash möchten wir die Effektivität und Leistung der lokalitätsempfindlichen Hashing (LSH) in unserem Projekt verbessern.
Die ungefähren Nachbarn (ANN) bieten eine vielseitigere Lösung für lokalempfindliches Hashing (LSH), da sie die nächsten Nachbarn für verschiedene Entfernungsmetriken annähern kann. Im Gegensatz dazu wurde Minhash speziell für die Ähnlichkeit von Jaccard entwickelt. Diese breitere Anwendbarkeit ermöglicht es unserem Ansatz, genauere Schätzungen der nächsten Nachbarn im Vergleich zu Minhash zu liefern, insbesondere bei der Behandlung hochdimensionaler Datensätze, die Ähnlichkeitssuche erfordern, die auf unterschiedlichen Distanzmetriken wie der euklidischen Entfernung oder der Ähnlichkeit des Kosinus basieren.
In Bezug auf die Zeitkomplexität implementieren sowohl die ungefähren Nachbarn (ANN) als auch die Minhash-Ansätze schließlich eine Hash-Tabelle mit lokalempfindlichem Hashing (LSH), was zu einer O (1) -Komplexität für das Abrufen in beiden Fällen führt. Unser Fokus liegt jedoch mehr auf Gedächtniseffizienz, wo der ungefähre Nachbarn (ANN) -Ansatz Minhash übertrifft. Dieser Aspekt ist besonders für unsere Implementierung von entscheidender Bedeutung, da der von uns verwendete Audio -Datensatz ziemlich groß ist und bei 3,3 GIB.
Durch die Verwendung von ungefähren Nachbarn (Ann) anstelle von Minhash erreichen wir daher eine verbesserte Genauigkeit bei der Schätzung der nächsten Nachbarn und gleichzeitig die effiziente Abrufzeit und eine bessere Speicher -Effizienz, um eine optimale Leistung für unsere Implementierung mit dem beträchtlichen Audio -Datensatz zu gewährleisten.
Music Recommendation Based on Rhythmic Similarity Using Locality-Sensitive Hashing (LSH).ipynb -Enthält die Implementierung unserer lokalitätsempfindlichen Hashing-Implementierung (LSH), um ein Musikempfehlungssystem auf dem Audio-Datensatz zu trainieren und zu bewerten.app.py - Quellcode für die Webanwendung (Flask), die das Musikempfehlungssystem begleitet.templates - Enthält die Quellcodes für die Webseiten, nämlich index.html und predict.html , die von der Webanwendung (Flask) gerendert werden.static - Enthält alle Symbole und visuellen Elemente, die von der Webanwendung (Flasche) verwendet werden.staticfiles - Verzeichnis, in dem die von Benutzern in der Webanwendung hochgeladenen Audiodateien gespeichert werden.features.pkl -Objektdatei, die die MEL-Frequenz-Cepstral-Koeffizienten (MFCC) von MEL-Frequenz-Funktionen aller für das Training verwendeten Audiodateien enthält.music.ann -Memaite-Mapped (MMAP) -Datei, die das mentalex-Objekt für das Musikempfehlungssystem enthält, das die ungefähren Nachbarn (ANN) verwendet. app.py -Datei aus und greifen Sie auf den angegebenen Link zum Host -Port zu./predict erreicht haben, erhalten Sie sowohl die besten als auch die schlechtesten Empfehlungen für die hochgeladene Audio -Datei.pied_piper_download.csv im aktuellen Verzeichnis gespeichert, das ähnliche Audiosegmente enthält, die aus der hochgeladenen Audiodatei identifiziert wurden. Dieses Projekt besteht dank der außergewöhnlichen Menschen, die dazu beigetragen haben.