Quantcast
Channel: Commentaires sur : Comment marche Shazam
Viewing all articles
Browse latest Browse all 25

Par : Dr. Goulu

$
0
0

Bonjour Duong,
l’article des numériques n’existait pas encore en 2009 quand j’ai écrit le mien, que j’avais basé uniquement sur ce que j’avais compris du brevet et de l’article http://www.ee.columbia.edu/~dpwe/papers/Wang03-shazam.pdf (référence [2]), et peut être un peu trop résumé, je l’admets. L’article des numériques est très détaillé sur le calcul des empreintes, le rejet du bruit etc, mais pas trop sur la structure utilisée pour la recherche rapide des empreintes dans une grosse base de données.

La structure utilisée initialement est décrite aux paragraphes 2.2 et 2.3 de [2]: les « hash » de 32 bits sont liés à 32 bits d’information (ID du morceau + décalage temporel depuis l’empreinte précédente. Pour l’ID du morceau il faut log2(N morceaux) donc avec 24 bits on peut identifier 2^24 = 16.7 morceaux, assez pour les 8 millions de morceaux que connaissait Shazam en 2009 et encore assez aujourd’hui pour 11 millions.
Dans [2] paragraphe 2.3, Wang suggère de mettre toutes les empreintes+données (=64 bits) dans une liste triée selon les empreintes et de faire une recherche O(N.logN) dedans. Mais ailleurs je ne sais plus où il propose d’utiliser directement le « hash » comme adresse dans une mémoire de 2^32 = 4’294’967’296 enregistrements contenant chacun les 32 bits de données du « hash-adresse » correspondant. Ainsi la recherche des morceaux correspondant à un hash est instantanée (O(1)), ce que je trouve génial.

Mais 11 millions de morceaux x ~3 minutes x ~10 hashes par seconde font 19.8 milliards de hashes, ce qui occupe en principe 80 Gb (32 bits par hash). C’est presque 5 fois plus que 2^32 : ça signifie que chaque hash peut désormais correspondre à 5 morceaux en moyenne. Il faut donc utiliser une technique de « résolution des collisions » qui va consommer un peu plus de mémoire, en effet. Mais pas tant que ça.

Comme vous le voyez, et je pense que c’est un point intéressant à soulever dans votre travail, un brevet bien fait décrit souvent une invention en terme assez généraux (et souvent très compliqués) pour la protéger, mais sans les détails qui permettraient effectivement de la copier. Il faut souvent beaucoup de travail de « reverse engineering », et parfois lire entre les lignes pour éviter des pièges que l’inventeur met parfois délibérément dans son brevet pour orienter des copieurs sur de fausses pistes. Je ne dis pas que c’est le cas pour Shazam, mais vous voyez qu’ils ne disent pas tout, et que certaines choses qu’ils disent semblent exagérément compliquées…

Donc pour résumer je dirais que l’article des numériques est plus récent et mieux que le mien sur le calcul des empreintes, mais que le mien décrit mieux ce qui est fait – ou pourrait être fait – ou ce que j’aurais fait – pour retrouver le plus vite possible les morceaux correspondant aux empreintes . Je vous laisse faire le tri 😉


Viewing all articles
Browse latest Browse all 25

Trending Articles