Maurice Marais, Silhouettes fantaisistes, 1889

Automatiser et autonomiser la retranscription d’entretien

La famille des outils disponibles s’agrandit

par Yacine Chitour

Les évolutions des techniques de transcription automatique (speech to text) sont très rapides et de nouveaux outils ne cessent d’apparaître. Huma-Num, par exemple, a d’ores et déjà intégré Whisper dans ShareDocs, accessible à la demande (pour un tutoriel, voir ici). Des tutoriels pour utiliser d’autres services existent, comme celui d’Anouk Martin pour utiliser les ressources de la plateforme SSP Cloud et transcrire des enregistrements avec Whisper. Chaque outil répond à des logiques différentes, ce qui permet de trouver l’usage adapté à ses besoins.

Ce tutoriel s’inscrit dans la continuité d’un précédent, qui évoquait les outils de retranscription automatique de la parole via le modèle Whisper entraîné par OpenAI. On y montrait comment utiliser Whisper et évoquait les points positifs et les défauts de cette technique de retranscription. Si Whisper fonctionne bien mieux que la plupart des logiciels payants, il requiert une puissance de calcul importante et achoppe sur quelques difficultés (incises et relances, hésitations, mots rares, etc.Plus souvent qu’on ne le pense, Whisper hallucine : il invente des mots qui n’existent pas dans l’enregistrement. Il peut aussi rester encore coincé dans une boucle, et alors répéter le même texte en continu. Il n’y a pas vraiment de solution à ces problèmes : il faut simplement relire attentivement le produit de la transcription automatique, ou transcrire l’enregistrement sur des portions plus courtes.

Comme les solutions évoluent en permanence, on a voulu faire une mise à jour. Ce deuxième épisode permet d’aborder un aspect qui manquait encore : l’identification des locutrices1 (« speaker diarization », en anglais), c’est-à-dire le fait d’attribuer chaque segment à une locutrice. En plus de cela, nous présentons des outils complémentaires qui permettent d’utiliser Whisper plus rapidement, et plus aisément.

Dans ce tutoriel, on se concentre sur deux développements importants : d’une part, l’identification et la séparation des locutrices ; de l’autre, l’accélération de la transcription. Il existe un gradient de solutions pour séparer les locutrices et pour accélérer la transcription : nous allons montrer comment le faire avec un peu de programmation en Python, mais aussi montrer l’existence d’un logiciel qui intègre directement ces deux outils (mais seulement sous Windows et sous Mac). 

Séparer et identifier les locutrices

La diarisation consiste à segmenter la parole selon le nombre de locutrices en attribuant chaque segment de parole à une seule d’entre elles. Il existe plusieurs bibliothèques Python qui proposent cette fonction (NeMo, Kaldi, pyannote.audio, SpeechBrain, etc.), mais nous exposons ici une seule d’entre elles, pyannote.audio

pyannote.audio est une bibliothèque Python conçue par Hervé Bredin qui permet de distinguer les locutrices dans des audios. Pour cela, la bibliothèque mobilise des opérations d’apprentissage automatique (machine learning) avec PyTorch. En combinant pyannote et whisper, il est alors facile d’obtenir des retranscriptions d’entretiens qui distinguent entre la voix d’une locutrice et celle d’une autre. Comment toujours, il y a certaines limites : d’expérience, pyannote.audio fonctionne bien sur des enregistrements avec deux locutrices, mais fait des confusions sur des audios qui en impliquent plus de deux.

Une démonstration pour utiliser whisper avec pyannote est disponible ici sur Google Colab (Section 1). Elle adapte et combine plusieurs scripts déjà existant.

Prenons un exemple avec la matinale de France Inter du 26 janvier 2023. Nicolas Demorand et Léa Salamé reçoivent ce jour-là Rachida Dati, présidente du Conseil national des Républicains et maire LR du VIIème arrondissement de Paris, mais pas encore ministre. La comparaison entre l’interview et la transcription diarisée obtenue en utilisant whisper et pyannote donne à voir l’intérêt de cet outil, aussi bien que ses limites.

Exemple de diarisation sur une interview de Rachida Dati à France Inter.

La retranscription est dans l’ensemble de bonne qualité. On retrouve les défauts liés à whisper déjà évoqués dans le tuto précédent : noms propres non reconnus (« Charles-Clair » pour « chars Leclerc »), réponses courtes ignorées et donc non transcrites (l’un des deux « bonjours » de Léa Salamé ou Rachida Dati (à 16 secondes) ainsi que le « merci » de cette dernière juste après) et lissage du discours (« y’a » devient « il y a » dans la transcription). 

Pour ce qui est de la diarisation, pyannote.audio repère d’abord le nombre total de locutrices dans un enregistrement audio (nombre que l’utilisatrice peut fixer elle-même), puis attribue chaque segment à l’une d’entre elles. Pour cette interview, nous avons compté nous mêmes le nombre de locutrices de l’enregistrement — cinq au total, en comptant les questions des deux auditeurs — et l’avons fixé manuellement pour éviter d’avoir plus, ou moins, de locutrices dans la diarisation que dans l’enregistrement. 

Résultat : sur les  deux premières minutes d’interview retranscrites et diarisées (voir ci-dessus), le discours est attribué à quatre locutrices différentes, alors même que seules trois prennent la parole (Nicolas Demorand et Rachida Dati principalement, Léa Salamé pour deux courtes incises). En particulier, l’attribution est en partie défectueuse (SPEAKER_00 et SPEAKER_05 sont tous les deux Nicolas Demorand, de même que SPEAKER_04 et SPEAKER_03, Rachida Dati). Au moment de ce test, et en utilisant la version 2.1, pyannote.audio s’en sort donc assez mal avec la diarisation d’audios qui font intervenir plusieurs locutrices différentes qui ne parlent pas toutes au mêmes moments de l’enregistrement2

On remarque toutefois que si pyannote.audio ne s’en sort pas très bien avec plusieurs locutrices, les changements de locutrices sont quant à eux parfaitement repérés. Faire passer pyannote sur son audio reste donc très utile si vous retranscrivez un entretien ou une vidéo, puisqu’il suffit de repasser dessus à la main pour simplement corriger les erreurs d’attribution. pyannote fait en revanche très peu d’erreurs d’attribution pour deux locutrices seulement. Un test rapide sur une interview de cinq minutes entre un journaliste et une unique invitée montre que l’entretien est transcrit sans aucune erreur d’attribution.

D’autres scripts existent d’ailleurs, dont celui de Justin Missaghieh–Poncet, partagé récemment sur la liste de diffusion Mate-SHS, et qui offre une interface pour utiliser ensembles whisper et pyannote.audio dans sa version 3.0.

Accélérer la transcription

  • Faster Whisper : encore plus rapide que Whisper

L’opération de retranscription est longue, surtout pour les modèles les plus volumineux quand ils ne peuvent pas bénéficier d’accélération avec des GPU. Cependant, les optimisations de modèles permettent de proposer de nouvelles solutions, et il existe des améliorations pour accélérer cette étape. Depuis la sortie de Whisper, de nouvelles bibliothèques ont été développées, qui proposent une transcription plus rapide et sans perte de qualité substantielle3.  

faster-whisper, développé par Guillaume Klein, est une implémentation de Whisper qui va jusqu’à quatre fois plus vite que l’outil originel d’OpenAI. Utiliser faster-whisper permet éventuellement d’envisager des transcriptions en local, sans GPU, en utilisant les meilleurs modèles de Whisper. 

Sur notre CPU (Intel Core i5-6300U CPU @ 2.40GHz 2.50GHz), l’interview de cinq minutes d’Aurore Bergé utilisée à l’épisode 1 de ce tutoriel est ainsi retranscrite en 29 minutes avec faster-whisper (avec le modèle large-v3 de whisper), contre plus de huit heures avec le modèle originel. Pour un entretien enregistré d’une heure, cela donnerait donc une durée de retranscription de près de six heures. De quoi à l’avenir faire tourner la transcription de ses entretiens la nuit, en local, pour les retrouver prêts le lendemain matin avec le café.

Une démonstration est également disponible ici sur Google Colab (Section 2).

  • Insanely Fast Whisper : encore plus rapide que… Faster Whisper

Que faire si j’ai vraiment besoin d’une retranscription d’entretien pour tout à l’heure ? Ou que je veux me rapprocher d’une transcription « temps réel » ? Il y a toujours la possibilité d’avoir un ordinateur plus puissant pour accélérer le traitement. Mais il existe aussi des outils dédiés à la vitesse.

insanely-fast-whisper porte bien son nom. Il s’agit d’une interface de ligne de commande (CLI) qui transcrit de façon beaucoup plus rapide le discours, et ce en une seule ligne de code. Intégrant pyannote.audio, il suffit d’un seul argument en plus pour obtenir une transcription diarisée. Alors que la transcription de l’interview d’Aurore Bergé (cinq minutes environ) prend 50 secondes sur faster-whisper (modèle large-v3 avec GPU), elle prend 24 secondes sur insanely-fast-whisper

Cette bibliothèque a un inconvénient majeur. Elle requiert pour l’instant un GPU pour faire les calculs. Du côté des points positifs, elle intègre les arguments de whisper et pyannote.audio, de sorte qu’il est possible par exemple de spécifier le nombre de locutrices de l’enregistrement ou le modèle de diarisation souhaité (par défaut pyannote.audio). De plus, la promesse d’une transcription sans perte de qualité est presque tenue. Par exemple, si l’on considère le reportage sur la « crise des poubelles » à Paris, le taux d’erreur de mots (word error rate)4 de la transcription de faster-whisper est de 7.6% quand celui de la transcription obtenue avec la bibliothèque whisper classique (avec le nouveau modèle large-v3) est de 5.2%. 

Sur Colab, ça se passe comme ça (Section 3).

Temps de transcription selon la bibliothèque utilisée. Interview d’Aurore Bergé (5min) et modèle large-v3
  • « Encore plus rapide que… »

Les bibliothèques évoluent sans cesse, et de nouveaux outils remplacent les plus anciens. C’est le cas pour ce qui est de WhisperS2T, bibliothèque sortie au moment où nous écrivions ce tutoriel, et qui prétend faire mieux encore que insanely-fast-whisper. In fine, et au-delà de la recherche de la solution-optimale-meilleure-que-toutes-les-autres, l’objectif est aussi de repérer ce qui répond le mieux à ses propres besoins.

  • Si vous ne souhaitez pas toucher au code : noScribe pour transcrire, diariser, et avoir le son à côté

Programmer les opérations est utile, car cela permet de maîtriser ce que l’on fait, et d’avoir la possibilité de modifier les paramètres de la transcription (taille du modèle, format de sortie, fixation du nombre de locutrices si on le connaît, etc.

Mais dans certaines circonstances, la recherche d’une solution intégrée et ergonomique prime. noScribe propose les deux. Il s’agit d’un logiciel open source et gratuit, créé par Kai Dröge à Francfort. Il fonctionne sur Windows, et il est également possible de l’installer sur MacOS (grâce à Philipp Schneider). À noter que la version Linux ne semble malheureusement plus maintenue à jour. 

Pour faire la transcription, noScribe s’appuie sur faster-whisper et pyannote pour proposer une interface de transcription pratique. Le tout tourne donc « plutôt vite » — aussi vite que faster-whisper, donc : une interview de 25 minutes en moins de 3 heures sur ma modeste machine –, et surtout, en local.  

Présenté en détail ici, noScribe ne nécessite aucune compétence en programmation. Il suffit de télécharger le logiciel — ce qui est plutôt long — et de choisir les paramètres souhaités pour la transcription. Celle-ci est ensuite obtenue sous la forme d’un fichier HTML tout aussi aisé à utiliser (format de fichier de type « site internet »).

Le fichier HTML présente surtout l’intérêt d’apparier chaque segment de son à la portion de texte transcrit correspondante. On peut donc écouter le passage de l’entretien qui correspond à chaque énoncé transcrit — ce qu’on pouvait faire auparavant avec Sonal, moyennant une transcription à la main.  Il suffit d’appuyer sur le segment puis sur « Play/Pause Audio » (ou Ctrl + barre espace pour le raccourci). Ça facilite donc la phase de correction qui succède nécessairement la transcription, tout en permettant de revenir plus facilement au matériau oral d’origine. Ce dernier point est un argument de taille en faveur de noScribe, en particulier pour les chercheuses en sciences sociales. On peut disposer du texte transcrit tout en réécoutant, à partir du même outil, des portions d’entretiens pour ce qu’elles sont, les traces d’interactions de face-à-face.

Ainsi, si vous avez besoin de développer votre autonomie pour la retranscription, sans dépendre de services en ligne, ces différentes solutions sont susceptibles de vous apporter des solutions modulables.

Pour compléter la réflexion au-delà des outils présentés, nous souhaitons terminer ce tutoriel en revenant sur des discussions ouvertes par le précédent billet.

Des retours :

Les retours que nous avons reçus après la première version de ce tutoriel ont été positifs. Ils nous sont aussi très utiles, et invitent à des précisions bienvenues.

  1. « C’est trop compliqué à prendre en main », « Je ne sais pas coder »

Si lancer des lignes de code vous fait peur, ou que vous avez la flemme d’investir du temps là-dedans, il nous semble justement que le dernier outil présenté, noSribe, est une bonne alternative.

  1. « Certes, tout ça est bien joli… mais ça sert à quoi, à part la retranscription d’entretiens ? »

Si ce n’est que cela, c’est déjà pas mal ! Mais on peut, avec ces outils, aller plus loin :  les outils de traitement automatique ouvrent des perspectives d’étude du discours en ce qu’ils permettent le traitement rapide d’une grande masse de matériau audio accessible en ligne. Transformé en texte, il devient stockable, interrogeable rapidement, analysable.

Par exemple, en utilisant insanely-fast-whisper sur Colab ou Huma-Num, il serait en principe particulièrement aisé d’obtenir, très rapidement et « à la chaîne », des transcriptions diarisées de toutes les émissions qu’une chercheuse voudrait étudier — et ainsi d’accéder au verbatim de toutes les émissions de « Touche pas à mon poste », pour le plaisir…ou pour qui s’intéresse, comme Claire Sécail5, à la diffusion des idées d’extrême droite dans les émissions de divertissement françaises

  1. « Ai-je besoin d’un GPU ? » 

Ça dépend. Pour utiliser insanely-fast-whisper, c’est pour l’instant nécessaire. En revanche, vous pouvez en principe utiliser toutes les autres bibliothèques sans GPU. C’est surtout une question de vitesse de transcription souhaitée, et ça dépend des moyens à votre disposition (achat d’une carte graphique, accès à Colab, à Huma-Num, etc.)

  1. « À quoi sert le token (clé) au moment d’utiliser un modèle disponible sur Hugging Face ? »

La création et l’utilisation d’un token au moment d’utiliser pyannote.audio ne veut pas dire que vous externalisez vos calculs. Cela signifie simplement que vous utilisez un modèle sous statut open source spécifique (ici un modèle sous licence MIT). Il s’agit en quelque sorte de montrer patte blanche en acceptant les termes de la licence

  1. « Puis-je utiliser Google Colab ? »

Pas d’impératif catégorique en la matière, à ceci près que si vous utilisez Colab, vous donnez accès à Google à l’ensemble des données que vous utilisez — ce qui est, pour la plupart des données qu’on recueille en sciences sociales, interdit par la CNIL. 

  1. « Pourquoi programmer si un logiciel existe ? » / « Pourquoi utiliser un logiciel quand on peut programmer ? »

Programmer permet de maîtriser soi-même la rapidité et les paramètres de la transcription ou de la diarisation, ainsi que le format de sortie du fichier (.txt ? .srt ? .json ?). Utiliser un logiciel, comme noScribe, constitue en cela une forme de « contrainte ». Cela permet aussi d’avoir un plan B si le logiciel ne fonctionne plus, ou n’intègre pas certaines avancées.

En revanche, noScribe propose d’apparier texte et son de l’audio transcrit, ce qu’on n’a pas quand on programme (même si cela aussi peut se programmer). Ça permet aussi de ne pas s’embarrasser du caractère parfois fastidieux de la programmation.

Notes

  1. Féminin universel. ↩︎
  2. C’est le cas des longues interviews des matinales de radio. Les journalistes se répartissent les questions à des moments différents de l’interview, et donnent la parole à des auditrices en fin d’interview. Dans ce tuto, nous utilisons la version 2.1 de pyannote.audio. ↩︎
  3. La rapidité de ces bibliothèques tient à l’utilisation d’autres bibliothèques (CTranslate2 pour faster-whisper, Optimum et flash-attn pour insanely-fast-whisper) qui optimisent les performances de calcul de la bibliothèque d’origine — en fait, ces bibliothèques permettent d’optimiser l’utilisation des modèles Transformers. ↩︎
  4. Calculé avec l’outil disponible en ligne ici. ↩︎
  5. Claire Sécail, Touche pas à mon peuple, Paris, Seuil, 2024, 80 p. ↩︎