[Tutorial] Whisper pour retranscrire des entretiens

Conseils de prise en main, et quelques réflexions.

par Yacine Chitour

English version here

L’entretien enregistré fait partie des méthodes d’enquête routinières en sciences humaines et sociales. Qu’il s’agisse de l’histoire orale, d’enquêtes ethnographiques ou des campagnes d’entretiens sur panels, réécouter et retranscrire des entretiens est un grand classique, parfois fastidieux mais souvent heuristique, de l’écriture scientifique. S’il existe un certain nombre de services de transcription payants, ou d’outils gratuits pour retranscrire automatiquement des entretiens audios, ils sont imparfaits et donnent la plupart du temps des taux d’erreur supérieurs à 55% pour des discussions spontanées1. Avec les bruits de fond qui accompagnent souvent les scènes ordinaires de « l’entretien ethnographique » – café, parc, cuisine, salon où la télévision est allumée, etc. –, il est difficile d’éviter la retranscription « à la main ». 

On introduit ici un outil gratuit pour retranscrire des entretiens relativement rapidement et sans trop d’erreurs, y compris dans ces scènes « bruyantes ». Proposé par l’entreprise californienne OpenAI, Whisper est un logiciel libre de « retranscription automatique de la parole » (automatic speech recognition), basé sur un réseau de neurones artificiels entraîné sur plusieurs centaines de milliers d’heures d’enregistrement, en plusieurs dizaines de langues différentes (détails ici). Plusieurs « tailles » de modèle sont disponibles, de « tiny » à « large », la qualité de la retranscription augmentant avec la taille du modèle (et donc le temps de calcul).

Cet outil n’est pas un substitut à l’écoute attentive des entretiens, puis à leur retranscription « à l’ancienne ». Il permet surtout d’abréger le temps passé à taper du texte : une fois le texte retranscrit par la machine, il ne reste plus qu’à… écouter l’entretien en entier, et contrôler les erreurs de transcription, en attribuant chaque énoncé à un·e locuteur·rice.

1. Comment ça marche ?

Comment faire au juste ? Il suffit de quelques lignes de code. On propose dans ce tuto un script rédigé dans le langage de programmation Python. S’il n’est pas nécessaire de maîtriser Python, il faut néanmoins avoir installé Anaconda sur son ordinateur (ou Python sur Linux ou MacOS) : cela vous permettra d’exécuter le script sur des applications comme Spyder ou sur un notebook Jupyter. Avant d’exécuter le script sur Python, il faut lancer un certain nombre de lignes de commande sur le terminal conda (ou le terminal standard sur Linux et MacOS), notamment pour installer whisper ou ffmpeg. Toutes les lignes à lancer sont détaillées sur le dépôt github d’OpenAI2.

On charge ensuite la bibliothèque whisper, et on définit l’emplacement de l’entretien enregistré sur son ordinateur :

import whisper

# On définit le chemin de l'enregistrement de son entretien sur son PC
entretien = "/chemin/vers/votre/entretien.mp3" # Chemin du fichier audio à transcrire
modele_whisper = "large-v2" # Taille du modèle de transcription

Une fois que vous avez spécifié l’endroit où se trouve votre entretien, on peut lancer le chargement du modèle (qui, la première fois, sera téléchargé), puis la transcription :

# On (télé)charge le modèle
print("Chargement du modèle")
model = whisper.load_model(modele_whisper)

# Transcription
print("Transcription commencée")

transcription = model.transcribe(entretien)

print("Transcription terminée")

Il suffit désormais de créer un fichier texte avec l’ensemble de votre entretien, horodaté au niveau de chaque segment délimité par le modèle – ce qui permet d’identifier plus facilement les locuteur·rice·s, ou de se concentrer sur certains extraits d’entretien seulement :

# Une fonction pour faciliter l'horodatage des segments de parole en heures, minutes et secondes
def convertir(seconds):
    h = int(seconds // 3600)
    m = int((seconds % 3600) // 60)
    s = int(seconds % 60)
    return f"{h:02d}:{m:02d}:{s:02d}"

# Chemin où vous souhaitez enregistrer votre transcription d'entretien en format .txt
entretien_transcrit = "/chemin/vers/votre/entretien.txt"

# Enregistrement de la transcription
with open(entretien_transcrit , 'w', encoding='utf-8') as f:
    for segment in transcription["segments"]:
        start_time = convertir(segment['start'])
        end_time = convertir(segment['end'])
        f.write(f"{start_time} - {end_time}: {segment['text']}\n")

La transcription horodatée apparaît dans le dossier choisi. On obtient un résultat qui ressemble à cela :

2. Est-ce que ça marche vraiment ?

Pour juger de l’efficacité de Whisper, on compare les taux d’erreurs en fonction du modèle utilisé, dans deux transcriptions : l’une d’un micro-trottoir de BFM-TV sur l’« enfer des poubelles » à Paris (4 min 54 sec), et l’autre d’une interview en studio d’Aurore Bergé, par Gilles Bouleau (4 min 57 sec). On compare ensuite la durée de transcription sur deux PC différents (un avec un processeur plutôt lent et l’autre plus rapide) et sur un notebook Google Colab sur lequel on charge un GPU, pour accélérer les calculs.

Malgré les bruits qui ponctuent les prises de son dans le micro-trottoir de BFM-TV, le taux d’erreur de la transcription3 avec le modèle large-v2 est inférieur à 5% (tableau 1). On voit aussi une nette différence entre la transcription en studio et les le micro-trottoir où les prises de son en extérieur sont fréquentes :

Interview Aurore Bergé (1139 mots)Micro-trottoir poubelles à Paris (693 mots)
large-v21.4%3.5%
medium2.3%9.8%
small5.8%8.1%
base10.5%14.3%
tiny19.1%25.1%
Tableau 1 : Taux d’erreur (WER) selon la qualité de la prise de son (en studio et hors-studio) et le modèle Whisper utilisé.

Dans l’ensemble, le taux d’erreur des transcriptions de Whisper sont largement inférieurs à ceux observés pour des logiciels comme Vocapia ou Sonix. En transcrivant avec Whisper les deux enregistrements, on se rend compte que ces erreurs ou oublis sont de plusieurs types :

  • Whisper ignore certaines incises, ou hésitations : « Ah non, à ce point là. Là, franchement, on peut faire une photo. À ce point-là, , ça c’est sûr. » devient « Non. Là, franchement, on peut faire une photo. À ce point-là, c’est sûr. »
  • Comme pour les incises, des relances rapides de l’enquêteur·rice/journaliste ou des réponses rapides interrompant les questions ne sont pas retranscrites : « Il y a un rendez-vous très important le 14 avril // – Oui // – c’est dans 15 jours, c’est très long, 15 jours. Le Conseil constitutionnel va rendre sa décision sur ce texte. Rien ne se passe entre-temps ? // – Si justement // – Tout reste figé, la grève continue… » devient « Il y a un rendez-vous très important le 14 avril, c’est dans 15 jours, c’est très long, 15 jours. Le Conseil constitutionnel va rendre sa décision sur ce texte. Rien ne se passe entre-temps ? Tout reste figé, la grève continue… »
  • Oubli de certains adverbes, prépositions ou conjonctions qui lient deux propositions : « C’est de pire en pire. Et ça s’améliore… Enfin, il n’y a pas une amélioration. » transcrit en « C’est de pire en pire. Ça s’améliore. Il n’y a pas une amélioration. » avec le modèle medium. Dans des entretiens, des tournures comme « …, tu vois ? », « Bon, … », « Ah bah ouais… », « mais bon… », « (en)‘fin… », etc. peuvent disparaître de la transcription de Whisper.
  • Whisper, en particulier les modèles small et medium, a du mal avec certains noms propres : « Ivry » est transcrit « Ivri ». Y compris avec le modèle large-v2,« Aurore Bergé » devient « Aurore Berger ».
  • Whisper confond parfois des homophones, ou des mots aux sonorités proches : « cotisant» devient « quotisant », « C’est un mur, carrément.» devient « C’est un mur, apparemment.»
  • Parfois, Whisper fait des fautes de grammaire, par exemple lorsque le sujet est mal identifié : « les syndicats, notamment la CFDT, ont accepté que ce dialogue reprenne et qu’il puisse être reçu et discuté avec la Première ministre. »

En revanche, si votre ordinateur a un processeur lent, transcrire ses entretiens avec les modèles les plus élaborés de Whisper ne vaut pas le coup (tableau 2). À moins d’avoir un CPU rapide, un GPU personnel ou un accès via une institution comme Huma-Num, transcrire un entretien d’une heure avec le modèle large-v2 prendra à votre ordinateur plusieurs jours… Vous pouvez néanmoins transcrire votre entretien avec le modèle base, qui offre un bon compromis entre vitesse de transcription et qualité de la transcription – il faudra quand même être très attentif·ve à la relecture.

CPU lent
(Intel Core i5-6300U CPU @ 2.40GHz 2.50GHz)
CPU rapide
(Intel Core i7-8665U CPU @ 1.90GHz × 8)
GPU
(Google Colab)
large-v28 h 36 min (× 100)7 min 30 (× 1,5)3 min 20 (<× 1)
medium3h 49 min (× 44)4 min 302 min
small1h 12 min (× 15)2 min 201 min
base20 min (× 4)2 min30 sec
tiny9 min (× 1.8)50 sec24 sec
Tableau 2 : Temps de transcription de l’audio « Micro-trottoir poubelles à Paris » (4 min 54 sec) selon la vitesse du processeur utilisé et le modèle Whisper

Reste la solution Google Colab : avec un compte personnel Google, vous avez accès gratuitement à un GPU sur un notebook Colab. Mais cela pose des problèmes majeurs de confidentialité des données personnelles recueillies en entretien. Lorsque vous utilisez un notebook Colab, l’entretien et sa retranscription sont mis à la disposition de Google – étant donné que les notebooks sont stockés sur Drive, et que leur contenu est bien collecté par Google. En cela, retranscrire sur Google Colab un entretien récolté dans le cadre d’une enquête de sciences sociales constitue sans doute une violation du RGPD.

Une autre possibilité est de recourir aux services d’OpenAI, qui propose un accès en ligne (et payant) à ses modèles. La politique d’OpenAI est plus ambiguë, mais se réserve explicitement le droit de « traiter » les « contenus » des utilisateur·rice·s (ce qui inclut les textes produits…ou les audios chargés en ligne) et leurs informations personnelles (voir la politique de confidentialités d’OpenAI, section 9, « International Users »). De toute évidence, si vous utilisez Whisper en ligne pour retranscrire votre entretien, ce dernier est alors stocké dans les bases de données d’OpenAI, ce qui n’est peut-être pas la meilleure chose si vous travaillez sur des terrains sensibles ou surveillés de près.

De toute façon, les récents problèmes d’OpenAI avec la divulgation d’informations personnelles invitent à la plus grande prudence. Si vous souhaitez en revanche retranscrire une vidéo YouTube ou une conférence de presse, utiliser Colab ne pose pas de problème.

Voici un exemple d’utilisation : https://colab.research.google.com/drive/1srjHp_YjsXr92fNBsYIm3plG9sUoVKy7?usp=sharing

3. Faut-il utiliser Whisper ? Oui mais…

Whisper est un outil de transcription très efficace, d’ailleurs déjà utilisé par des journalistes, ou pour sous-titrer automatiquement des films et des séries. Il présente évidemment plusieurs avantages, et des inconvénients.

Côté inconvénients :

  • Les modèles les plus efficaces (medium, large, large-v2) donnent des durées de transcription parfois très longues sur des ordinateurs lents. Whisper marche très bien si vous avez un processeur puissant, ou un GPU.
  • Whisper ne sépare pas les locuteur·rice·s (diarisation) : pour l’instant, les modèles ne savent pas distinguer les différent·e·s locuteur·rice·s dans un même enregistrement.
  • De plus, il corrige et « lisse » un peu le discours des enquêté·e·s, de sorte que les mots prononcés sont systématiquement traduits en « bon français légitime » – « p’tet » devient « peut-être », « j’mangeais » devient « je mangeais », même si « ouais » est retranscrit tel quel. Whisper corrige donc les tournures oralisées utilisées par les enquêté·e·s – en particulier, Whisper ajoute la négation quand lorsque des « ne » sont ignorés. Autre exemple : « j’ai beaucoup de potes que leur copain fait ça… » devient « j’ai beaucoup de potes dont leur copain fait ça… ».
  • Parfois, Whisper retranscrit mal les mots qui s’éloignent de la langue ou de la diction légitimes : un enquêté japonais qui dit « en ce moment, je suis sur Twitter, j’enrichis mes contenus », en prononçant « enrichis » comme « enrégi » est transcrit en « en ce moment, je suis sur Twitter, j’enregistre mes contenus ».

Donc non seulement Whisper « scripturalise » le français parlé, mais il ignore parfois certains sociolectes4.

Côté avantages :

  • Whisper reconnaît les phrases qui ne se terminent pas (en mettant un « … » à la fin), ou les hésitations (avec des « euh… »). De façon générale, Whisper ponctue plutôt bien l’entretien. Il reconnaît aussi certaines tournures familières (il transcrit très bien « tranquillou ».)
  • Whisper ignore les bruits de fond : les bruits de fond du micro-trottoir de BFM-TV n’ont pas altéré la retranscription. Même avec une télé allumée à côté, la retranscription d’un entretien est bonne. 
  • De plus, chaque ligne du tapuscrit obtenue en sortie correspond à un·e locuteur·rice et un·e seul·e, de sorte que les questions ou relances sont bien distinctes du discours de l’enquêté·e.
  • On dispose d’un texte horodaté, ce qui permet d’aller chercher directement certains passages intéressants, ou de retranscrire « au propre » seulement quelques portions d’entretien :

Il faut donc distinguer deux cas de figure :

  1. Si vous souhaitez transcrire un audio public (l’enregistrement d’une conférence de presse, d’un podcast, le son d’une vidéo YouTube ou d’une émission télévisée), alors utiliser un notebook Colab et Whisper ne pose pas de problème.
  2. Si vous transcrivez un entretien qui contient des données sensibles, ou des informations qui pourraient compromettre vos enquêté·e·s ou vous-même, il vaut mieux utiliser les modèles de Whisper sur son propre ordinateur en faisant tourner un script Python. Avec un CPU puissant, vous économiserez le temps passé à taper le texte et à revenir en arrière pour réécouter tel passage. Il vous restera à repasser sur le texte brut produit par Whisper, en attribuant chaque passage à son auteur·rice, et en corrigeant les erreurs – ce qui suppose donc de bien écouter l’intégralité de l’entretien.

4. Ça marche aussi sur du Aya Nakamura

Transcription de Djadja, Aya Nakamura, 2018, 2min 55 sur Google Colab.

Mis à part quelques approximations (« à trois » au lieu de « atroces », « typé » au lieu de « tit-pe » ou Djadja qui donne « Jah Jah », etc.), Whisper s’en sort bien.

Vous pouvez désormais transcrire vos chansons préférées 🙂

Références

1 Elise Tancoigne, Jean Philippe Corbellini, Gaëlle Deletraz, Laure Gayraud, Sandrine Ollinger et Daniel Valero, « Un mot pour un autre ? Analyse et comparaison de huit plateformes de transcription automatique », Bulletin de Méthodologie Sociologique, vol. 155, no 1, 2022, p. 61.

2 Notez que sur Jupyter Notebook, il faut lancer la toute première fois les lignes suivantes : !pip install git+https://github.com/openai/whisper.git puis !pkexec apt install ffmpeg.

3 Nous utilisons ici la métrique du Word Error Rate (WER). À ce propos, voir Elise Tancoigne, Jean Philippe Corbellini, Gaëlle Deletraz, et al., op. cit., p. 59.

4 En corrigeant les « fautes » de la langue orale, le produit d’OpenAI actualise le débat sur la bonne façon de rendre compte d’un entretien en sciences sociales, voir notamment Stéphane Beaud, « Quelques observations relatives au texte de B. Lahire », Critiques sociales, 8, 1996, p. 102-107 et la réponse de Bernard Lahire, « Du travail d’enquête à l’écriture des paroles des enquêtés : réponse aux interrogations de Stéphane Beaud », ibid., p. 108-114. Cette discussion donne quelques éléments pour choisir en conscience entre la « réécriture » lisible des entretiens – ce vers quoi semble pencher Whisper – et leur « transcription phonétique », plus fidèle aux sociolectes.