URL: https://linuxfr.org/users/julien-d/journaux/ia-fais-moi-ecouter-ce-que-j-aime Title: IA, fais-moi écouter ce que j'aime ? Authors: Julien.D Date: 2023年11月25日T21:06:50+01:00 License: CC By-SA Tags: musique, intelligence_artificielle et playlist Score: 40 Bonjour à tous, Je souhaite me constituer une playlist musicale, rien de très original me diriez-vous, certains le font depuis des décennies en se partageant cassette, cd et urls pour partager leurs petites pépites ;) Aujourd’hui tout est toujours plus simple ! Un compte sur une plateforme, quelques likes déposés sur des titres et voilà que l’on vous propose des titres recommandés à partir de l’analyse de millions d’autres utilisateurs et des caractéristiques de chaque titre. J’ai de très bons retours autour de moi de l’algorithme de Spotify permettant parfois de découvrir des petits artistes méconnus par rapport à leurs talents et que l’on n’aurait probablement jamais découvert autrement. Mais bon, s’en remettre à un service externe pour faire vibrer ses oreilles n’est pas vraiment une solution acceptable pour moi. J’ai donc récupéré dernièrement quelques milliers de musiques provenant de diverses sources basées sur des playlists/mot clés qui semblaient collés à mes attentes. C’est probablement une bonne base de travail et je pourrais commencer à les écouter pour commencer à les trier et cela serait fini. Cela prendrait du temps bien sûr, mais ne peut-on pas faire mieux ? En cherchant un peu sur Internet, je n’ai rien trouvé de similaire à ce que je voulais, c’est-à-dire un moteur de recommandation de musique auto hébergé à partir d’un ensemble de titres avec leurs notes que j’alimenterai au fur et à mesure. Comme parfois il ne nous faut que quelques secondes pour savoir si on va passer au titre suivant, j’imagine qu’il doit être possible d’obtenir une signature pour chaque musique, son genre, la langue parlée s’il y en a une, les instruments, la vitesse, etc, et que l’on doit pouvoir en sortir un ensemble d’attributs afin de les comparer. Ainsi commence mes recherches, et je tombe rapidement sur des articles sur les algorithmes de recommandations sociales, mais moins sur ceux d’analyse musical. Il y a aussi beaucoup d’articles de recherches référencés notamment sur : — https://github.com/robi56/Deep-Learning-for-Recommendation-Systems — https://github.com/ybayle/awesome-deep-learning-music Je suis malgré tout tombé sur deux projets qui m’ont semblé intéressant, mais il faut que je rende à l’évidence, j’essaye de toucher à un domaine où je ne connais rien : le traitement du signal. — https://github.com/kristijanbartol/Deep-Music-Tagger — https://github.com/mlachmish/MusicGenreClassification Même si ça ne répond finalement pas à mon besoin du jour, j’ai aussi pu découvrir ces deux logiciels que j’utiliserais probablement un jour, permettant d’aider à la classification/transcription/segmentation d’image, de texte, d’audio, etc. Cela semble être de précieux outils, jetez-y un coup d’œil ! — https://github.com/UniversalDataTool/universal-data-tool — https://github.com/HumanSignal/label-studio Je commençais à me faire une raison, mais je gardais en tête ces indices de similarités d’images pour détecter les doublons dans nos photos de vacances, ce lecteur audio dont j'ai oublié le nom mais qui m'affichait une barre colorée représentant chaque musique ... Non ce que je cherche existe, juste c’est moins utilisé et je n’ai pas dû avoir les bons termes ou le bon point de vue durant mes recherches. C’est ainsi que je tombe sur : — https://github.com/librosa/librosa — https://github.com/Polochon-street/bliss-rs Le premier est une bibliothèque pour analyser du son, mais surtout le deuxième est une bibliothèque pour calculer la distance entre deux musiques ! Voilà mon outil ! Il permet deux choses, calculer une distance entre deux musiques, et même créer une playlist à partir d’une musique et d’une bibliothèque afin de ne pas passer du classique au rock brutalement ;) ```rust use bliss_audio::{BlissError, Song}; fn main() -> Result<(), BlissError> { let song1 = Song:: from_path("/path/to/song1 »)?; let song2 = Song:: from_path("/path/to/song2 »)?; println!(« Distance between song1 and song2 is {}", song1.distance(&song2)); Ok(()) } ``` J’ai fait tourner ça sur une centaine de titres pour voir un peu, et voilà ce que ça donne comme distribution de la distance, avec une valeur comprise entre 0.15 et 3.  La génération de playlist directement n’a pas encore été utilisée, mais j’ai comparé les écoutes entre les titres les plus proches et en effet cela fonctionne plutôt bien ! Et la crise cardiaque n’est pas loin quand on s’essaye à vouloir enchainer les extrêmes opposés ! Je crois que ce pourquoi je me suis un peu perdu dans mes recherches c’est que j’opposais playlist et recommandations, en y réfléchissant maintenant j’ignore pourquoi, après tout, pour reprendre l’exemple de Spotify (mais j’imagine que les autres plateformes font pareils), il génère régulièrement et automatiquement des playlists de recommandations en fonctions de vos écoutes. [bliss-rs](https://github.com/Polochon-street/bliss-rs) référence également d’outils ou articles qui pourraient en intéresser quelques-uns ici : — https://lelele.io/thesis.pdf (Music Similarity Tool for Contemporary Music), que je n’ai pas encore lu le temps de lire — https://crates.io/crates/blissify qui permet d’analyser une bibliothèque MPD pour créer les playlists de façon intelligente grâce à bliss Et maintenant ? Comment je fais le tri dans mes milliers de titres ? Eh bien je pense en écouter un échantillon, les référencer quelque part, calculer les distances entre mes musiques, étudier s’il y a un lien entre cette distance et mon appréciation (probablement, mais il y a peut-être aussi des contre-exemples !), et attribuer un score pour chaque musique en fonction des distances qui la séparent des musiques que j’apprécie mais également celles que je n’apprécie pas. J’ai un peu hésité à poster ce journal, finalement listant surtout les ressources que j’ai pu trouver sur mon parcours assez long pour retomber sur un outil que j’aurais dû trouver plus rapidement, mais c’est également l’occasion de partager tout ça et peut-être d’échanger sur vos habitudes de découverte, de classification et d’écoute ;)