該存儲庫包含一個與音樂推薦系統集成的Web應用程序,該應用程序利用了3,415個音頻文件的數據集,每個數據集持續30秒,利用對局部敏感的散列(LSH)實現來確定節奏相似性,作為大數據分析基礎(DS2004)基礎的一部分。
音樂信息領域的檢索領域提出了一個挑戰,這是由於可以表示音頻的各種方式,因此很難確定在查詢中應優先考慮哪些功能。為了簡化此問題,我們的實現專門針對歌曲的節奏作為唯一的查詢功能。雖然先前的研究探索了基於節奏的音樂查詢,但當前的方法卻遭受了效率低下的困擾,因為它們需要查詢整個數據結構以匹配歌曲節奏。為了克服這一限制,我們提出了對局部敏感哈希(LSH)的利用,該技術可有效地識別大型數據集中的類似項目而無需詳盡的搜索。
對局部敏感的哈希(LSH)是一種廣泛採用的技術,用於近似最近的鄰居搜索。它通過將它們映射到較低維空間來有效地識別大型數據集中的類似項目。但是,傳統上,對局部敏感的散列(LSH)採用了另一種稱為Minhash(或最小獨立排列的位置敏感散列方案)的方法來估計集合相似性。 Minhash通常用於數據挖掘和信息檢索。儘管Minhash通常可以有效地估計集合相似性,但它具有某些限制,可能會阻礙其在特定應用中的有效性。
為了解決這些限制,我們選擇使用另一種稱為近似最近鄰居(ANN)的高效技術實施LSH方法。該技術非常適合在大型數據集中找到大約最近的鄰居。通過利用最近的鄰居(ANN)而不是Minhash,我們旨在提高我們項目中對區域敏感的哈希(LSH)實現的有效性和性能。
大約最近的鄰居(ANN)為區域敏感的哈希(LSH)提供了更通用的解決方案,因為它可以大約用於各種距離指標的最近的鄰居。相比之下,Minhash專為Jaccard的相似性而設計。與Minhash相比,這種更廣泛的適用性使我們的方法可以提供更準確的最近鄰居的估計,尤其是在處理基於不同距離指標(例如歐幾里得距離或餘弦相似性)的高維數據集時。
關於時間複雜性,大約最近的鄰居(ANN)和Minhash方法最終實現了帶有局部敏感性哈希(LSH)的哈希表,從而在任何一種情況下都產生了檢索的O(1)時間複雜性。但是,我們的重點更多地在於記憶效率,其中大約最近的鄰居(ANN)接近Minhash。由於我們使用的音頻數據集非常大,重量為3.3 GIB,因此此方面對於我們的實施尤為重要。
因此,通過利用大約最近的鄰居(ANN)而不是Minhash,我們在估算最近的鄰居的同時,在保持有效的檢索時間和更好的內存效率方面達到了提高的精度,從而確保了使用較高的音頻數據集實現的最佳性能。
Music Recommendation Based on Rhythmic Similarity Using Locality-Sensitive Hashing (LSH).ipynb - 包含我們對局部敏感的哈希(LSH)實現的實現,以訓練和評估音頻數據集中的音樂推薦系統。app.py - 音樂推薦系統附帶的Web應用程序(燒瓶)的源代碼。templates - 包含網頁的源代碼,即index.html和predict.html ,由Web應用程序(燒瓶)渲染。static - 包含Web應用程序(燒瓶)使用的所有圖標和視覺元素。staticfiles - 用戶在Web應用程序(燒瓶)上上傳的音頻文件的目錄。features.pkl - 包含用於培訓的所有音頻文件的MEL頻率Cepstral係數(MFCC)功能的對象文件。music.ann - 使用大約最近的鄰居(ANN)的Music推薦系統的內存映射(MMAP)文件。 app.py文件並訪問給定鏈接到主機端口。/predict頁面後,您將同時收到上載的音頻文件的最佳和最差建議。pied_piper_download.csv的文件將保存在當前目錄中,該目錄將包括從上傳的音頻文件標識的類似音頻段。 該項目的存在得益於為此做出貢獻的非凡人物。