J’ai récemment remis le nez dans Whisper. L’année dernière pour les besoins d’un projet, j’avais créé un jupyter notebook qui utilisait OpenAi Whisper en usage python pour automatiser la transcription et la génération de sous-titres pour un ensemble de fichiers audio ou vidéo (batch transcription). J’avais ensuite retravaillé mon notebook pour faire en sorte de transcrire des fichiers source de langues différentes. Il fallait que les fichiers à transcrire soient préalablement renommés en adoptant une convention pour la langue (par exemple “en_fichier_1.mp3”, “fr_fichier_2.mp3”, etc.). Cela évitait à Whisper d’effectuer une détection automatique de la langue, opération pas toujours fiable si plusieurs langues cohabitent au sein d’un même enregistrement ou si les 30 premières secondes d’un enregistrement ne contiennent pas de discours intelligible (ex. bruit ou musique).

J’avais ensuite découvert Faster-whisper, une version de Whisper plus rapide, elle même basée sur CTranslate2, une bibliothèque Python écrite en C++ permettant une inférence plus efficiente des modèles basés sur Transformer. En faisant tourner mon notebook faster-whisper sur Google Colab, j’obtenais des temps d’inférence tout à fait corrects, beaucoup plus courts qu’avec la version d’origine de Whisper. Mais les choses évoluent très vite dans le monde de l’IA. Il est actuellement impossible d’installer faster-whisper sur mon PC (même en utilisant uv), ni de le faire tourner sur Google Colab, qui crashe systématiquement. Pas grave me direz-vous, parce que maintenant on a Groq.

L’API de Groq, gratuite pour un usage modéré, permet entre autres de transcrire des fichiers audio ou vidéo (mp3, mp4, mpeg, mpga, m4a, wav, webm) en un temps record, à condition que la taille des fichiers envoyés à Groq ne dépasse pas 25 Mo. Le hic, c’est qu’à ma connaissance Groq ne permet pas de générer des sous-titres, ni de faire des transcriptions par lots. J’ai donc adapté mon code prévu pour fonctionner avec faster-whisper à Groq. Avec l’aide de Claude 3.5 Sonnet, j’ai à mis à jour mon notebook pour qu’il soit compatible avec Groq.

La différence principale c’est qu’avec Groq, la récupération de chaque segment de la transcription se fait différemment. Avec Faster-whisper, on accédait aux segments en utilisant la notation segment.start, ce qui indique que segment était un objet ou une instance de classe avec des attributs. Avec Groq, on accède aux segments en utilisant une syntaxe plus classique, propre aux dictionnaires Python : segment['start'].

J’ai ensuite regroupé le code pour transcrire un fichier unique dans un script en python, ce qui évite de devoir exécuter les cellules du notebook les unes après les autres. J’ai ensuite essayé de rendre le script plus convivial et plus abouti en demandant à Claude certaines améliorations (choix du fichier à transcrire avec la souris, choix du modèle de Whisper avec une case à cocher, gestion des erreurs, etc.). Claude m’a proposé un truc assez chiadé qui, après quelques itérations, semble tenir la route.

Cependant j’avoue avoir une préférence pour le code de départ, plus basique mais fonctionnel et facile à comprendre. La version “production-ready” demandée à Claude est super, mais elle est moins “pédagogique”. Cela m’a d’ailleurs fait penser à la démarche inverse. Pourquoi ne pas demander à Claude de produire une version la plus courte possible ? Claude s’est exécuté et a généré une version substanciellement plus compacte. Ce qui est intéressant, c’est que cette dernière version fait appel à des modules et des algorithmes différents, notamment pour générer le timecode propre aux sous-titres.

En conclusion, l’essor des IA génératives et leur extrême facilité à générer du code permet pas mal d’expérimentations. On peut créer un script à partir de rien, recycler du code poussiéreux, générer des versions plus conviviales ou demander au modèle d’optimiser du code en lui donnant par exemple une contrainte de longueur ou de compacité. L’arrivée des IDE dopés à l’IA comme Cursor et Windsurf ouvre des possibilités infinies qui vont bien au delà de ces modestes expérimentations. Mais est-ce que le plaisir de comprendre restera le même ?


<
Previous Post
Simon Willison
>
Blog Archive
Archive of all previous blog posts