π Pilih mesin pencari kemiripan penyematan
Aplikasi Wanyin adalah komunitas berbagi musik berbasis AI yang bertujuan untuk mendorong berbagi musik dan membuat komposisi musik menjadi lebih mudah bagi para penggemar musik.
Perpustakaan Wanyin berisi sejumlah besar musik yang diunggah oleh pengguna. Tugas utamanya adalah memilah musik yang diminati berdasarkan perilaku pengguna sebelumnya. Kami mengevaluasi dua model klasik: pemfilteran kolaboratif berbasis pengguna (User-based CF) dan pemfilteran kolaboratif berbasis item (Item-based CF), sebagai model sistem rekomendasi yang potensial.
- User-based CF menggunakan statistik kemiripan untuk mendapatkan pengguna tetangga dengan preferensi atau minat yang sama. Dengan kumpulan tetangga terdekat yang diambil, sistem dapat memprediksi minat pengguna target dan menghasilkan rekomendasi.
- Diperkenalkan oleh Amazon, CF berbasis item, atau item-to-item (I2I) CF, adalah model penyaringan kolaboratif yang terkenal untuk sistem rekomendasi. Model ini menghitung kemiripan antara item, bukan pengguna, berdasarkan asumsi bahwa item yang diminati pasti mirip dengan item yang memiliki skor tinggi.
CF berbasis pengguna dapat menyebabkan waktu yang sangat lama untuk perhitungan ketika jumlah pengguna melewati titik tertentu. Dengan mempertimbangkan karakteristik produk kami, kami memutuskan untuk menggunakan I2I CF untuk mengimplementasikan sistem rekomendasi musik. Karena kami tidak memiliki banyak metadata tentang lagu-lagu tersebut, kami harus berurusan dengan lagu-lagu itu sendiri, mengekstraksi vektor fitur (embeddings) dari lagu-lagu tersebut. Pendekatan kami adalah mengubah lagu-lagu ini menjadi mel-frequency cepstrum (MFC), merancang convolutional neural network (CNN) untuk mengekstrak fitur-fitur lagu, dan kemudian membuat rekomendasi musik melalui pencarian kemiripan fitur.
π Pilih mesin pencari kemiripan penyematan
Setelah kita memiliki vektor fitur, masalah yang tersisa adalah bagaimana cara mengambil vektor yang mirip dengan vektor target dari kumpulan vektor yang sangat besar. Ketika berbicara tentang mesin pencari penyematan, kami menimbang-nimbang antara Faiss dan Milvus. Saya memperhatikan Milvus ketika saya melihat-lihat repositori yang sedang tren di GitHub pada bulan November 2019. Saya melihat proyek tersebut dan saya tertarik dengan API abstraknya. (Saat itu versi v0.5.x dan v0.10.2 saat ini).
Kami lebih memilih Milvus daripada Faiss. Di satu sisi, kami telah menggunakan Faiss sebelumnya, dan karenanya ingin mencoba sesuatu yang baru. Di sisi lain, dibandingkan dengan Milvus, Faiss lebih merupakan sebuah pustaka yang mendasari, oleh karena itu kurang nyaman digunakan. Setelah kami mempelajari lebih lanjut tentang Milvus, kami akhirnya memutuskan untuk mengadopsi Milvus karena dua fitur utamanya:
- Milvus sangat mudah digunakan. Yang perlu Anda lakukan hanyalah menarik citra Docker-nya dan memperbarui parameter berdasarkan skenario Anda sendiri.
- Milvus mendukung lebih banyak indeks dan memiliki dokumentasi pendukung yang terperinci.
Singkatnya, Milvus sangat ramah terhadap pengguna dan dokumentasinya cukup rinci. Jika Anda menemukan masalah apa pun, Anda biasanya dapat menemukan solusinya dalam dokumentasi; jika tidak, Anda selalu dapat memperoleh dukungan dari komunitas Milvus.
Layanan cluster Milvus βΈοΈ β©
Setelah memutuskan untuk menggunakan Milvus sebagai mesin pencari vektor fitur, kami mengonfigurasi node mandiri dalam lingkungan pengembangan (DEV). Node tersebut telah berjalan dengan baik selama beberapa hari, jadi kami berencana untuk menjalankan pengujian di lingkungan uji penerimaan pabrik (FAT). Jika node mandiri macet dalam produksi, seluruh layanan tidak akan tersedia. Oleh karena itu, kami perlu menerapkan layanan pencarian yang sangat tersedia.
Milvus menyediakan Mishards, sebuah middleware cluster sharding, dan Milvus-Helm untuk konfigurasi. Proses penerapan layanan cluster Milvus sangat sederhana. Kita hanya perlu memperbarui beberapa parameter dan mengemasnya untuk diterapkan di Kubernetes. Diagram di bawah ini dari dokumentasi Milvus menunjukkan bagaimana cara kerja Mishards:
1-bagaimana-cara-kerja-mishards-dalam-dokumentasi-milvus.png
Mishards mengalirkan permintaan dari hulu ke sub-modul yang membagi permintaan hulu, lalu mengumpulkan dan mengembalikan hasil dari sub-layanan ke hulu. Arsitektur keseluruhan dari solusi cluster berbasis Mishards ditunjukkan di bawah ini:
2-solusi-klaster-berbasis-mishards-arsitektur.jpg
Dokumentasi resmi memberikan pengenalan yang jelas tentang Mishards. Anda dapat merujuk ke Mishards jika Anda tertarik.
Dalam sistem rekomendasi musik kami, kami menggunakan satu node yang dapat ditulis, dua node yang hanya dapat dibaca, dan satu instance middleware Mishards di Kubernetes, menggunakan Milvus-Helm. Setelah layanan ini berjalan dengan stabil di lingkungan FAT untuk sementara waktu, kami menerapkannya dalam produksi. Sejauh ini sudah stabil.
π§ Rekomendasi musik I2I πΆ
Seperti yang telah disebutkan di atas, kami membangun sistem rekomendasi musik I2I Wanyin dengan menggunakan embedding yang telah diekstrak dari lagu-lagu yang ada. Pertama, kami memisahkan vokal dan BGM (pemisahan lagu) dari lagu baru yang diunggah oleh pengguna dan mengekstrak embedding BGM sebagai representasi fitur dari lagu tersebut. Hal ini juga membantu memilah versi cover dari lagu asli. Selanjutnya, kami menyimpan embeddings ini di Milvus, mencari lagu-lagu serupa berdasarkan lagu yang didengarkan pengguna, dan kemudian menyortir dan menyusun ulang lagu-lagu yang diambil untuk menghasilkan rekomendasi musik. Proses implementasinya ditunjukkan di bawah ini:
3-implementasi-sistem-pemberi-rekomendasi-musik.png
π« Filter lagu duplikat
Skenario lain di mana kami menggunakan Milvus adalah pemfilteran lagu duplikat. Beberapa pengguna mengunggah lagu atau klip yang sama beberapa kali, dan lagu-lagu duplikat ini dapat muncul di daftar rekomendasi mereka. Ini berarti akan mempengaruhi pengalaman pengguna untuk menghasilkan rekomendasi tanpa pra-pemrosesan. Oleh karena itu, kita perlu mencari tahu lagu-lagu duplikat dan memastikan bahwa lagu-lagu tersebut tidak muncul di daftar yang sama melalui pra-pemrosesan.
Skenario lain di mana kami menggunakan Milvus adalah pemfilteran lagu duplikat. Beberapa pengguna mengunggah lagu atau klip yang sama beberapa kali, dan lagu-lagu duplikat ini dapat muncul dalam daftar rekomendasi mereka. Ini berarti akan mempengaruhi pengalaman pengguna untuk menghasilkan rekomendasi tanpa pra-pemrosesan. Oleh karena itu, kita perlu mencari tahu lagu-lagu duplikat dan memastikan bahwa lagu-lagu tersebut tidak muncul di daftar yang sama melalui pra-pemrosesan.
Sama seperti skenario sebelumnya, kami mengimplementasikan pemfilteran lagu duplikat dengan cara mencari vektor fitur yang serupa. Pertama, kami memisahkan vokal dan BGM dan mengambil sejumlah lagu yang mirip menggunakan Milvus. Untuk menyaring lagu duplikat secara akurat, kami mengekstrak sidik jari audio dari lagu target dan lagu-lagu yang mirip (dengan teknologi seperti Echoprint, Chromaprint, dll.), Menghitung kemiripan antara sidik jari audio dari lagu target dengan masing-masing sidik jari lagu yang mirip. Jika kemiripannya melampaui ambang batas, kami mendefinisikan sebuah lagu sebagai duplikat dari lagu target. Proses pencocokan sidik jari audio membuat pemfilteran lagu duplikat menjadi lebih akurat, tetapi juga memakan waktu. Oleh karena itu, dalam hal penyaringan lagu di perpustakaan musik yang sangat besar, kami menggunakan Milvus untuk menyaring kandidat lagu duplikat sebagai langkah awal.
4-menggunakan-milvus-filter-lagu-lagu-musik-pembuat-rekomendasi-duplikat.png
Untuk mengimplementasikan sistem rekomendasi I2I untuk perpustakaan musik Wanyin yang sangat besar, pendekatan kami adalah mengekstrak embedding lagu sebagai fiturnya, mengingat kembali embedding yang mirip dengan embedding lagu target, lalu menyortir dan menyusun ulang hasilnya untuk menghasilkan daftar rekomendasi bagi pengguna. Untuk mendapatkan rekomendasi real-time, kami memilih Milvus daripada Faiss sebagai mesin pencari kemiripan vektor fitur kami, karena Milvus terbukti lebih ramah pengguna dan canggih. Selain itu, kami juga menerapkan Milvus pada filter lagu duplikat kami, yang meningkatkan pengalaman dan efisiensi pengguna.
Anda dapat mengunduh Aplikasi Wanyin πΆ dan mencobanya. (Catatan: mungkin tidak tersedia di semua toko aplikasi).
π Penulis:
Jason, Insinyur Algoritma di Stepbeats Shiyu Chen, Insinyur Data di Zilliz
π Referensi:
Mishards Docs: https://milvus.io/docs/v0.10.2/mishards.md Mishards: https://github.com/milvus-io/milvus/tree/master/shards Milvus-Helm: https://github.com/milvus-io/milvus-helm/tree/master/charts/milvus
π€ Jangan jadi orang asing, ikuti kami di Twitter atau bergabunglah dengan kami di Slack!ππ»
- Layanan cluster Milvus βΈοΈ β©
- π§ Rekomendasi musik I2I πΆ
- π« Filter lagu duplikat
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word