Filtrage collaboratif basé sur les éléments pour un système de recommandation musicale
L’application Wanyin est une communauté de partage de musique basée sur l’IA, dont l’objectif est d’encourager le partage musical et de faciliter la composition musicale pour les passionnés de musique.
La bibliothèque de Wanyin contient une quantité massive de musique mise en ligne par les utilisateurs. La tâche principale consiste à trier la musique susceptible d’intéresser les utilisateurs en fonction de leur comportement précédent. Nous avons évalué deux modèles classiques : le filtrage collaboratif basé sur l’utilisateur (User-based CF) et le filtrage collaboratif basé sur l’élément (Item-based CF), comme modèles potentiels de système de recommandation.
- Le User-based CF utilise des statistiques de similarité pour obtenir des utilisateurs voisins ayant des préférences ou des intérêts similaires. Avec l’ensemble récupéré des plus proches voisins, le système peut prédire l’intérêt de l’utilisateur cible et générer des recommandations.
- Introduit par Amazon, l’item-based CF, ou item-to-item (I2I) CF, est un modèle de filtrage collaboratif bien connu pour les systèmes de recommandation. Il calcule les similarités entre les éléments plutôt qu’entre les utilisateurs, en partant de l’hypothèse que les éléments d’intérêt doivent être similaires aux éléments ayant des scores élevés.
Le User-based CF peut entraîner des temps de calcul excessivement longs lorsque le nombre d’utilisateurs dépasse un certain seuil. En tenant compte des caractéristiques de notre produit, nous avons décidé d’opter pour l’I2I CF afin de mettre en œuvre le système de recommandation musicale. Étant donné que nous ne possédons pas beaucoup de métadonnées sur les chansons, nous devons traiter les chansons elles-mêmes, en en extrayant des vecteurs de caractéristiques (embeddings). Notre approche consiste à convertir ces chansons en cepstre en fréquence mel (MFC), à concevoir un réseau neuronal convolutif (CNN) pour extraire les embeddings de caractéristiques des chansons, puis à effectuer des recommandations musicales grâce à une recherche de similarité d’embeddings.
🔎 Sélectionner un moteur de recherche de similarité d’embeddings
Maintenant que nous avons des vecteurs de caractéristiques, la question restante est de savoir comment récupérer, dans un grand volume de vecteurs, ceux qui sont similaires au vecteur cible. En ce qui concerne le moteur de recherche d’embeddings, nous hésitions entre Faiss et Milvus. J’ai remarqué Milvus en parcourant les dépôts tendance de GitHub en novembre 2019. J’ai jeté un œil au projet et il m’a séduit par ses API abstraites. (Il était alors en v0.5.x et est maintenant en v0.10.2.)
Nous préférons Milvus à Faiss. D’une part, nous avons déjà utilisé Faiss auparavant, et souhaitions donc essayer quelque chose de nouveau. D’autre part, comparé à Milvus, Faiss est davantage une bibliothèque sous-jacente, et donc pas très pratique à utiliser. À mesure que nous en apprenions davantage sur Milvus, nous avons finalement décidé d’adopter Milvus pour ses deux principales caractéristiques :
- Milvus est très facile à utiliser. Il suffit de récupérer son image Docker et de mettre à jour les paramètres en fonction de votre propre scénario.
- Il prend en charge davantage d’index et dispose d’une documentation d’accompagnement détaillée.
En résumé, Milvus est très convivial pour les utilisateurs et la documentation est assez détaillée. Si vous rencontrez un problème, vous pouvez généralement trouver des solutions dans la documentation ; sinon, vous pouvez toujours obtenir de l’aide auprès de la communauté Milvus.
Service de cluster Milvus ☸️ ⏩
Après avoir décidé d’utiliser Milvus comme moteur de recherche de vecteurs de caractéristiques, nous avons configuré un nœud autonome dans un environnement de développement (DEV). Il fonctionnait bien depuis quelques jours, nous avons donc prévu d’exécuter des tests dans un environnement de test d’acceptation usine (FAT). Si un nœud autonome tombait en panne en production, l’ensemble du service deviendrait indisponible. Nous devons donc déployer un service de recherche hautement disponible.
Milvus fournit à la fois Mishards, un middleware de partitionnement de cluster, et Milvus-Helm pour la configuration. Le processus de déploiement d’un service de cluster Milvus est simple. Il nous suffit de mettre à jour certains paramètres et de les empaqueter pour un déploiement dans Kubernetes. Le diagramme ci-dessous, issu de la documentation de Milvus, montre le fonctionnement de Mishards :
Un diagramme du mécanisme de fonctionnement de Mishards.
Mishards transmet une requête depuis l’amont vers ses sous-modules en divisant la requête amont, puis collecte et renvoie les résultats des sous-services vers l’amont. L’architecture globale de la solution de cluster basée sur Mishards est illustrée ci-dessous :
Architecture globale de Mishards.
La documentation officielle fournit une introduction claire à Mishards. Vous pouvez consulter Mishards si cela vous intéresse.
Dans notre système de recommandation musicale, nous avons déployé un nœud accessible en écriture, deux nœuds en lecture seule et une instance middleware Mishards dans Kubernetes, en utilisant Milvus-Helm. Après que le service a fonctionné de manière stable dans un environnement FAT pendant un certain temps, nous l’avons déployé en production. Il est stable jusqu’à présent.
🎧 Recommandation musicale I2I 🎶
Comme mentionné ci-dessus, nous avons construit le système de recommandation musicale I2I de Wanyin en utilisant les embeddings extraits des chansons existantes. Tout d’abord, nous avons séparé la voix et le BGM (séparation de pistes) d’une nouvelle chanson téléversée par l’utilisateur et extrait les embeddings du BGM comme représentation des caractéristiques de la chanson. Cela aide également à identifier les reprises de chansons originales. Ensuite, nous avons stocké ces embeddings dans Milvus, recherché des chansons similaires à partir des chansons écoutées par l’utilisateur, puis trié et réorganisé les chansons récupérées afin de générer des recommandations musicales. Le processus de mise en œuvre est illustré ci-dessous :
Mise en œuvre du système de recommandation musicale I2I de Wanyin.
🚫 Filtre de chansons dupliquées
Un autre scénario dans lequel nous utilisons Milvus est le filtrage des chansons dupliquées. Certains utilisateurs téléversent plusieurs fois la même chanson ou le même extrait, et ces chansons dupliquées peuvent apparaître dans leur liste de recommandations. Cela signifie que générer des recommandations sans prétraitement nuirait à l’expérience utilisateur. Par conséquent, nous devons identifier les chansons dupliquées et nous assurer qu’elles n’apparaissent pas dans la même liste grâce au prétraitement.
Un autre scénario dans lequel nous utilisons Milvus est le filtrage des chansons dupliquées. Certains utilisateurs téléversent plusieurs fois la même chanson ou le même extrait, et ces chansons dupliquées peuvent apparaître dans leur liste de recommandations. Cela signifie que générer des recommandations sans prétraitement nuirait à l’expérience utilisateur. Par conséquent, nous devons identifier les chansons dupliquées et nous assurer qu’elles n’apparaissent pas dans la même liste grâce au prétraitement.
Comme dans le scénario précédent, nous avons mis en œuvre le filtrage des chansons dupliquées au moyen de la recherche de vecteurs de caractéristiques similaires. Tout d’abord, nous avons séparé la voix et le BGM et récupéré un certain nombre de chansons similaires à l’aide de Milvus. Afin de filtrer précisément les chansons dupliquées, nous avons extrait les empreintes audio de la chanson cible et des chansons similaires (avec des technologies telles qu’Echoprint, Chromaprint, etc.), puis calculé la similarité entre l’empreinte audio de la chanson cible et chacune des empreintes des chansons similaires. Si la similarité dépasse le seuil, nous définissons une chanson comme un doublon de la chanson cible. Le processus de mise en correspondance des empreintes audio rend le filtrage des chansons dupliquées plus précis, mais il est également chronophage. Par conséquent, lorsqu’il s’agit de filtrer des chansons dans une immense bibliothèque musicale, nous utilisons Milvus pour filtrer nos chansons candidates dupliquées comme étape préliminaire.
Utiliser Milvus pour réaliser le filtrage des chansons dupliquées.
Pour mettre en œuvre le système de recommandation I2I pour l’immense bibliothèque musicale de Wanyin, notre approche consiste à extraire les embeddings des chansons en tant que caractéristiques, à rappeler les embeddings similaires à l’embedding de la chanson cible, puis à trier et réorganiser les résultats afin de générer des listes de recommandations pour l’utilisateur. Pour obtenir une recommandation en temps réel, nous choisissons Milvus plutôt que Faiss comme moteur de recherche de similarité de vecteurs de caractéristiques, car Milvus s’avère plus convivial et sophistiqué. De la même manière, nous avons également appliqué Milvus à notre filtre de chansons en double, ce qui améliore l’expérience utilisateur et l’efficacité.
Vous pouvez télécharger Wanyin App 🎶 et l’essayer. (Remarque : il se peut qu’elle ne soit pas disponible sur toutes les boutiques d’applications.)
📝 Auteurs :
Jason, ingénieur algorithmique chez Stepbeats Shiyu Chen, ingénieur data chez Zilliz
📚 Références :
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
🤗 Ne soyez pas un inconnu, suivez-nous sur Twitter ou rejoignez-nous sur Slack!👇🏻
Continuer à lire

The AWS Outage Was a Wake-Up Call for Vector Database Cross-Region Disaster Recovery
Zilliz Cloud Had the Answer Before the Crisis. Zilliz Cloud is the world's first vector database with native cross-region disaster recovery.

Zilliz Cloud Update: Tiered Storage, Business Critical Plan, Cross-Region Backup, and Pricing Changes
This release offers a rebuilt tiered storage with lower costs, a new Business Critical plan for enhanced security, and pricing updates, among other features.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.



