Antonin Delpeuch | Vlog | Vive la discrimination !

Vive la discrimination !

Antonin Delpeuch —
dernière mise à jour le

Je cherche toujours, pour mon projet d'algorithme de classification audio, la meilleure technique de discrimination entre plusieurs catégories.

Jusque là, j'utilisais un réseau de neurones. J'avais choisi cette technique principalement parce qu'elle est une des plus connues parmis les différentes méthodes d'apprentissage automatique. J'ai voulu écrire ma propre implémentation, histoire de comprendre vraiment comment ça fonctionne, et ne pas utiliser une bibliothèque préexistante comme une sorte de boîte noire magique. Je ne regrette pas ce choix, mais il a une contrepartie : maintenant, quand mon réseau ne s'entraîne pas bien, je ne sais pas si c'est à cause de la complexité du problème que je lui soumets, ou parce que mon algo d'entraînement est mauvais. L'entrainement de ce genre de bête est déjà suffisament hasardeux avec un algo fiable pour que cette difficulté supplémentaire soit de trop.

J'aimerais bien faire une expérience : collecter des extraits de radio de plusieurs pays différents, où on parle des langues que je ne connais vraiment pas, et voir si je peux distinguer les publicités du reste. L'idéal serait de faire le test avec plusieurs personnes, et d'avoir un moyen de savoir si les intuitions des gens sont vraies (trouver quelqu'un qui connait cette langue, en fait). Ce genre d'expérience pourrait aider à comprendre quels critères simples peuvent être utilisés pour faire un bon algorithme de discrimination. Ou au contraire, montrer que mon projet est irréalisable, si la distinction n'est pas possible sans comprendre le sens des phrases.

J'ai aussi découvert d'autres techniques de classification. Je connaissais déjà les machines à vecteurs de support : je ne pense pas qu'ils ajoutent grand-chose dans mon cas. On m'a conseillé l'analyse en composantes principales, mais ce n'est pas en tant que tel une méthode de classification, et les fondements mathématiques sous-jacents ne répondent pas à mon problème. Les méthodes qui utilisent des arbres de décision me semblent intéressantes : elles sont plus simples à analyser que les autres, à mon avis. On a moins cet effet boite noire qui est assez enthousiasmant à première vue (« j'ai un algo compliqué, je mets des nombres dedans et il me dit si c'est du lard ou du cochon ») mais qui est difficile à réparer quand tout ne se passe pas comme prévu. Et je n'ai pas encore regardé sérieusement du côté des algorithmes génétiques ou de boosting.

Il faut aussi envisager d'autres techniques, qui peuvent rapporter gros. Je pense surtout à l'utilisation de signatures audio pour détecter les jingles qui annoncent la publicité, ou carrément pour identifier chaque publicité à partir d'une base de donnée remplie de manière collaborative. Les projets qui utilisent de telles techniques sont nombreux et souvent assez réussis. C'est le cas de Shazam qui permet d'identifier un titre musical à partir de 15 secondes d'enregistrement depuis un téléphone portable, par exemple. Mais là c'est techniquement hors de portée. Par contre, le projet Acoustid semble plus accessible. Le code est ouvert, en plus.

La suite du développement sera donc probablement orientée dans cette direction : implémenter un système de signature audio, simple et sans prétention, qui soit juste assez fiable pour reconnaître un petit ensemble de jingles pour une radio donnée. Si ça fonctionne, le résultat final peut être beaucoup plus fiable qu'avec un algorithme de classification générique.