Je participe actuellement à une recherche collective dans laquelle nous allons tester grandeur nature les possibilités de Sonal. La thématique et les protagonistes ne sont pas un enjeu ici, aussi resterai-je discret sur le sujet. Nous avons réalisé près de 60 entretiens à ce jour et il va nous falloir les encoder pour pouvoir les analyser. C’est à l’histoire de ce travail qu’est consacré ce billet.
Construire un corpus collectif
Comment fait-on pour construire un corpus collectif à six dans Sonal? Cela demande un peu d’organisation. Chacun a réalisé ses entretiens suivant un guide commun, et collecté des informations clés au sujet des répondants, via une petite grille de critères (un petit arbre généalogique en l’occurrence). Les enregistrements ont ensuite été placés sur un serveur en ligne.
L’organisation du travail est la suivante : les entretiens sont retranscrits et chaque utilisateur reçoit “son” corpus Sonal, dans lequel il va encoder ses propres entretiens, c’est à dire à la fois les “thématiser” en découpant des extraits audio-textuels auxquels seront conférées des thématiques, et renseigner les variables clés au sujet des personnes enquêtées. Les corpus individuels sont tous dérivés d’un corpus de base contenant une grille thématique et une série de variables communes. Etant encodés à partir d’un même corpus de départ, les entretiens traités séparément pourront ensuite être refondus dans un corpus commun, qui sera redistribué à tous à la fin de l’encodage.
La question délicate de la retranscription
Nous avons d’abord mis à contribution quelques étudiants en sociologie de l’université pour retranscrire les entretiens dans Sonal. Une brève formation a suffi, et nous avons récupéré des entretiens synchronisés, c’est à dire comportant des “points de synchronisation” grâce auxquels chaque chercheur pourra, par la suite, segmenter ses entretiens. Concrètement, chaque ajout d’une balise de locuteur est accompagnée de l’ajout d’un point de synchro. Aussi, la position dans la bande est connue et il suffit de redécouper les entretiens en s’appuyant sur ces coordonnées pour scinder à la fois le texte et le son, et créer des “extraits” cohérents. Un petit clic droit sur le point, suivi du choix du bouton adapté et le tour est joué.
Cela marche très bien, le seul hic étant qu’il y a parfois trop de points, et notamment que plusieurs points peuvent partager une même position, ce qui n’est pas dramatique mais peut poser quelques problèmes de lisibilité. Pour répondre à cette première petite difficulté, une fonction ajoutée dans la version 1.6 permet dorénavant de supprimer tous les points en double.
Le plan initial était de tout faire retranscrire à l’intérieur de Sonal mais, pour des raisons de charge de travail, un certain nombre d’entretiens ont été distribués à l’extérieur et ont donc été réalisés hors de Sonal (il n’y a pas – encore – de transcripteur professionnel qui propose de travailler dans Sonal). Pour que mes collègues puissent encoder leurs entretiens facilement, un certain nombre de tâches ont dû être réalisées au préalable, et j’ai dû développer quelques outils pour gagner du temps. Comme certains utilisateurs risquent de devoir faire la même chose, voici un bref récit de ce travail.
1 – Importer les retranscriptions
La première chose à faire à été d’intégrer dans les corpus tous les entretiens retranscrits hors de Sonal; cela implique d’importer d’abord les bandes, puis les retranscriptions de chaque entretien (Plus de détails voir étape 2 ici).
2 – Reformater les balises
Il a fallu ensuite procéder à un petit travail de reformatage. Il a d’abord fallu transformer les repères de locuteurs en balises lisibles par Sonal. Quand le transcripteur avait tapé “Question:”, il me fallait aboutir à “[>Question?]:” pour que Sonal puisse repérer le changement de locuteur et le statut interrogatif du passage. Pour ce faire, une fonction rechercher/remplacer est disponible dans la page de lecture.
Attention, cette fonction rencontre parfois des difficultés avec les caractères importés de Word, qui ne sont pas toujours reconnus. Une méthode simple et efficace consiste à faire un rechercher/remplacer directement dans le fichier *.rtr de l’entretien, en prenant garde que Sonal ne soit pas en marche, du moins qu’il ne lise pas ce corpus au moment où vous éditez les *.rtr (sinon vos modifications risquent d’être écrasées par les sauvegardes suivantes réalisées par Sonal).
Le travail de balisage offre d’abord la possibilité d’analyser quantitativement les échanges, et donc les conditions de réalisation des entretiens. Par ailleurs, les balises de locuteur permettent d’accélérer le travail de resynchronisation, comme on le verra plus bas; c’est enfin un moyen de naviguer rapidement dans les entretiens, en “sautant” de questions en questions (à partir de la version 1.6.0) :
Attention : ce bouton se repère à la position courante dans le texte, il butte parfois (pour l’instant) sur les changements d’extraits, et y reste coincé. Descendez un peu dans l’extrait et vous pourrez à nouveau sauter de question en question.
3 – Resynchroniser les entretiens
Se baser sur les timecodes?
Pour anticiper le travail de resynchronisation rendu inévitable par la transciption hors de Sonal, la demande avait été faite que soient laissés des “timecodes” dans le texte, grâce auxquels on pourrait reconstituer grosso modo les points de synchronisation. Ces timecodes étaient soit au format [min:sec] soit au format [hr:min].
La première chose à faire a donc été de fabriquer un petit bout de code pour convertir ces timecodes en points de synchronisation lisibles par Sonal (cela revient à convertir les balises en secondes). La version courante de Sonal contient dorénavant des fonctions permettant ce travail de conversion :
Hélas, une fois la conversion faite, le résultat a été décevant. Les transcripteurs avaient laissé des timecodes très espacés et assez peu précis. Mentionner la minute sans préciser les secondes aboutit à une erreur de placement qui peut logiquement aller jusqu’à… une minute. C’est beaucoup, beaucoup trop dans Sonal.
D’abord pour se repérer dans les entretiens, quand un point désigne une mauvaise position, et qu’on ne sait pas si la vraie position du texte est loin avant ou après ce point, c’est pour le moins déroutant. Même si la lecture du texte en parallèle de l’écoute permet de se repérer, on doit donc tâtonner “en aveugle” autour du point et c’est parfois assez long. D’autant que le système de calcul inférentiel des positions (qui permet d’approximer la position dans la bande d’un passage textuel et inversement) est totalement détraqué par l’existence de points très imprécis.
Au final, je suis arrivé à la conclusion qu’il vaut mieux ne pas avoir du tout de points de synchro que des points de synchro erronés. Donc, que croyez-vous qu’il arriva? J’ai dû créer une fonction débarrassant les entretiens de tous leurs points de synchronisation. Elle est accessible dans le menu “balises” de la page de lecture.
Resynchroniser manuellement?
Puisque les timecodes étaient généralement très imprécis, la seule solution pour traiter ces entretiens retranscrits hors de Sonal était donc la resynchronisation manuelle : on sélectionne un mot qui marque un changement de thématique dans le texte (généralement le début d’une question), on infère sa position dans la bande, on corrige éventuellement l’approximation proposée et l’on ajoute à cet endroit un point de synchronisation ou un point de partition (bordure d’extrait). A mesure que l’on avance dans l’entretien, les approximations s’améliorent progressivement.
Une astuce permet d’accélérer le travail de découpage : comme Sonal réécrit systématiquement les extraits modifiés par la synchronisation, le temps de calcul est d’autant plus important que les extraits sont longs. Une bonne méthode peut être de commencer par découper l’entretien en trois ou quatre grands extraits avant de procéder à la synchronisation proprement dite, le logiciel gagnera considérablement en rapidité et en précision.
Comment découpe-t-on de si grands extraits? Je vous conseille d’utiliser la méthode suivante : Dans la vue complète de l’entretien en haut de la page de lecture, positionnez-vous d’abord dans la bande, par exemple à 30 mn (le premier clic sélectionne l’extrait dans son ensemble, et place la lecture à son début, il faut recliquer pour parvenir à la position voulue).
La position dans le texte est alors inférée, vous arrivez dans la lecture à la position supposée du passage. Si vous n’avez qu’un très long extrait, le premier positionnement risque d’être approximatif. Ce n’est pas un problème, écoutez les échanges, repérez un mot dont vous pressentez qu’il ne sera pas utilisé ailleurs, et cherchez-le dans la zone de recherche située en haut à droite du texte (validation pour lancer la recherche). Une fois la bonne occurrence du mot trouvée dans le texte, vous avez “calé” grossièrement la bande et le verbatim.
Il vous faudra ensuite affiner le positionnement du mot à l’aide de la barre de synchronisation (bouton “synchro” en haut de page). Lorsque la position de la bande correspond au mot voulu, il vous suffit de placer un point de partition (= couper en deux l’extrait) à cet endroit. Faites un clic droit sur le mot, choisissez le bouton en forme de ciseaux qui apparaît dans le menu. L’extrait est coupé en deux. Le choix du point de coupure n’a pas une grande importance, choisissez une question dans les environs de la position trouvée, ou un changement de phrase si c’est un long “tunnel” d’un répondant. En fait, l’endroit importe peu car cette coupure pourra être convertie par la suite en un simple point de synchronisation, ou même être effacée, lors de l’encodage final. L’important, c’est d’avoir plusieurs extraits relativement courts, dont les positions sont fiables, plutôt qu’un seul très long extrait. L’inférence des positions, lors de la resynchronisation n’en sera que meilleure, et tout le logiciel travaillera plus rapidement.
Suivant ce plan, j’avais donc procédé à un découpage rudimentaire sur les corpus de mes cinq collègues pour accélérer leur travail d’encodage, mais j’ai été progressivement pris d’un doute quant à la faisabilité de la tâche. Je craignais que l’ajout manuel des points de synchronisation ou de partition reste un travail trop lourd, au delà de quelques entretiens, pour des enseignants-chercheurs qui n’ont pas que cela à faire (doux euphémisme).
La synchronisation semi-automatique
Il a donc fallu que je trouve un moyen d’accélérer ce travail de resynchronisation, pour que les entretiens soient prêts au découpage, sans qu’il y ait à ajouter manuellement tous les points. Comment? Par la création automatique de points de synchronisation à chaque changement de locuteur – d’où l’intérêt d’avoir converti les “question:” et “réponse:” en balises de locuteurs lisibles par Sonal (voir plus haut). Ces points ont une apparence particulière, qui signifie leur caractère incertain. Pour le reste, ils se comportent exactement comme les points de synchronisation habituels.
Comme ces points sont ajoutés automatiquement, leur position est déterminée par calcul : en se basant sur les coordonnées connues et fiables autour du point (avant et après), et sur le nombre de mots contenus dans ces limites, le logiciel infère la position probable de la balise en question dans la bande, et l’ajoute comme point de synchro dans le texte. Evidemment, la qualité de l’estimation est très relative. Aussi ces points ont-ils la particularité de se terminer par un “?” (exemple : [621,5?]). Sonal sait donc qu’ils ne sont pas totalement fiables et recalcule leur position à chaque modification de la trame temporelle. Dès que l’on corrige un point quelque part (par glisser déplacer), les points environnants s’ajustent automatiquement à cette nouvelle donne : la validation d’un point donne une base corrigée pour l’estimation de la position des points environnants qui sont encore incertains. Concrètement, si vous déplacez un point vers la gauche ou la droite, tous les points avant et après se décalent dans le même sens. De cette manière, on décale d’un même mouvement plusieurs points et, logiquement, l’estimation se fait de plus en plus précise à mesure que l’on corrige les points. Dans certains contextes (voir plus bas), ce procédé est vraiment très efficace.
La question du nom à donner à ces points m’a occupé quelque temps. Fallait-il les appeler temporaires? non car finalement ils restent dans l’entretien jusqu’à être validés ou effacés. Incertains? pas terrible… Flottants? C’était tentant, mais une flottaison désigne à mes yeux un mouvement vertical par rapport à la surface d’un liquide ou d’un gaz, pas forcément un mouvement latéral. J’ai donc choisi de les appeler points “dérivants”, car après tout, c’est exactement ce qu’ils font, ces points, lorsque leur environnement change: ils dérivent tous ensemble vers la droite ou la gauche.
On peut donc ajouter automatiquement des points dérivants en cliquant sur le menu suivant :
Là aussi, le calcul est d’autant plus long que les extraits le sont eux-mêmes. Le prédécoupage de l’entretien en quelques grands extraits accélèrera donc le processus.
On avance ensuite dans l’entretien en validant successivement ces points, soit en les décalant à la souris vers leur position réelle, soit en cliquant simplement dessus s’ils sont déjà fiables (et au fil du temps ils le sont de plus en plus). Là aussi, le processus aboutit progressivement à accélérer le travail.
Pour gagner du temps, j’ai programmé une petite suite de raccourcis clavier pour réaliser la correction autrement que par glisser déplacer à la souris. Les touches <- et -> du clavier font passer de point en point, et lorsque l’on valide avec entrée, le point en cours devient déplaçable avec ces mêmes touches (+ ou – 1 sec). On peut donc corriger la position des points sans avoir à saisir la souris. Puis on valide à nouveau lorsque le point est corrigé, les flèches retrouvent leur fonction originale. On passe ainsi de point en point et c’est un réel gain de temps.
Au fur et à mesure des essais, je me suis rendu compte que, assez souvent, la première position après une question était sous-évaluée, le point était plus loin qu’estimé; la raison en est simple : l’interrogateur tend à “tourner autour du pot”, si vous me passez l’expression, ce qui se traduit par une transcription souvent laconique de la question qui ne prend pas en compte toutes les circonlocutions de l’interrogateur. Pour éviter d’avoir à décaler à chaque fois les points à droite, j’ai opté pour un système simple : lorsque le point est en cours d’édition (il est en gras), lorsque l’on tape ctrl+entrée, le point est validé à la position atteinte dans la lecture.
Concrètement, j’arrive sur un nouveau point, je valide pour le modifier, j’écoute s’il est correct et, s’il ne l’est pas et que le point est manifestement “en avance”, je laisse filer la bande jusqu’à entendre le passage considéré et je tape ctrl+entrée. Un petit correctif d’une seconde de recul permet de compenser le décalage lié à la reconnaissance auditive de la forme graphique et le tour est joué. Je peux passer l’extrait suivant et ainsi de suite. Dans le même ordre d’idée, j’ai ajouté un raccourci ctrl+x pour convertir au clavier les points de synchronisation en points de partition (couper les extraits de part et d’autre). Ce sont quelques secondes de gagnées à chaque fois mais, comme chacun sait, les petits ruisseaux font les grandes rivières.
Avec cette méthode, et dans de bonnes conditions, je suis arrivé à resynchroniser les entretiens dans un temps compris entre un tiers et la moitié de la bande elle-même, soit 20 à 30 minutes pour une heure d’entretien, mais cela dépend de la qualité de la transcription et du nombre de locuteurs (voir plus bas).
Petite astuce : il faut bien vérifier que le dernier extrait se termine à la fin du texte. Il y a parfois des éléments non retranscrits en fin de bande, qui “trompent” l’estimation des positions dans le dernier extrait. Cela peut être déroutant et obliger à recalculer la position des points dérivants après correction. Ecouter immédiatement la fin de l’entretien et vérifier que la bande et le texte s’arrêtent bien ensemble peut vous faire gagner du temps.
Cela dit, tout le temps gagné dans le recalage des points dérivants ne résout pas le problème de savoir où et quand placer ces points. S’il y a des points toutes les 5 secondes, si rapide que soit le travail, le temps de resynchronisation reste trop important, or l’idée était quand même d’accélérer le travail…
Où placer les points dérivants?
La question de la fréquence d’ajout automatique est donc vite apparue centrale. L’enjeu étant de permettre à mes collègues de redécouper aisément leurs entretiens, il n’y a pas lieu d’en mettre partout. Alors quand? A chaque question? A quelle fréquence? Quel espacement minimal? Compte tenu du caractère semi-directif des entretiens, les changements de thématique – qui impliquent un découpage – sont généralement accompagnés de questions introductives. Placer un point dérivant avant chaque question apparait donc assez logique. Mais que faire des relances, parfois nombreuses et très courtes, qu’il est fastidieux et généralement inutile de repositionner? La longueur en mots de la question doit-elle intervenir dans le choix des questions à positionner? Ce n’est pas évident. Je suis en train de faire des tests…
Et que faire des réponses, lorsque les échanges sont très serrés? La solution actuelle est de prévoir un espacement minimal entre deux balises. Les 5 secondes par défaut peuvent aisément être augmentées. On peut également choisir d’en placer seulement devant les questions ou seulement devant les réponses. Tout cela se paramètre sous le menu “ajouter des points dérivants”.
Au final, j’ai procédé comme suit : comme, la plupart du temps, les changements thématiques importants sont introduits par des questions, et que ce sont eux qui m’intéressent pour le découpage, j’ai opté pour un ajout de point uniquement devant les questions, avec un espacement minimal de 10 secondes. Puis, résistant à la tentation de corriger tous les points, j’ai préféré sauter de question en question et ne pratiquer une correction que lorsque cela valait la peine, en découpant au besoin les extraits de part et d’autre du point lorsque cela s’imposait. Puis, j’ai effacé tous les points dérivants auxquels je n’avais pas touché à l’aide de la commande “supprimer tous les points de synchronisation dérivants”.
Quelques constats à chaud…
Tout cela me prend un temps non négligeable et ce sont des fonctions annexes de Sonal qui n’intéresseront sans doute pas la majorité des utilisateurs. C’est cependant intéressant du point de vue du développement car je travaille donc en même temps à construire des données scientifiques et à améliorer les fonctionnalités du logiciel. Ce faisant, j’ai d’ores et déjà travaillé une bonne quinzaine d’entretiens et quelques constats peuvent être faits à ce niveau.
Les entretiens collectifs sont plus durs à resynchroniser
Il s’agit d’un résultat qui aurait été largement prévisible pour qui aurait sérieusement réfléchi à la question, mais j’avoue l’avoir constaté au fil du travail : lorsque les verbatims contiennent plus de deux locuteurs, les fonctions d’approximation des positions sont moins efficaces que dans un entretien en face à face. La raison est on ne peut plus simple : la logique d’estimation des positions du logiciel repose sur l’hypothèse que les paroles ne se chevauchent pas ou très peu. Or, lorsque vous interrogez deux personnes, une certaine concurrence pour la parole peut intervenir, amenant les locuteurs à parler en même temps, à enchâsser leurs réponses. Conséquence logique : quand deux personnes parlent en même temps, le ratio mots/seconde, sur lequel se base Sonal pour inférer les positions, est potentiellement multiplié par deux, car le transcripteur place deux fois plus de mots dans une même portion de bande. Le passage est long sous sa forme textuelle et court d’un point de vue sonore, le logiciel risque donc de surévaluer la position dans la bande. A cela s’ajoute le fait que pour des raisons de commodité de lecture, les transcripteurs ramènent à des propositions successives des prises de parole qui dans les faits sont superposées. On ne peut donc parfois pas retrouver tout à fait dans la bande ce que l’on a à l’écrit. Le temps de le comprendre et de choisir où placer le point contribue à ralentir le travail.
La resynchronisation : une lumière (assez crue) projetée sur les transcriptions
Le travail de resynchronisation permet de comparer en permanence la bande à sa transcription. C’est parfois l’occasion d’avoir quelques frayeurs rétrospectives à l’idée d’avoir pu se baser uniquement sur les verbatims pour analyser les corpus. Au-delà des quelques coquilles plus ou moins inévitables dans des textes si longs, il y a de nombreux contresens qui découlent parfois manifestement de l’usage de logiciels de reconnaissance vocale, ou d’une grammaire approximative qui nuit à la compréhension des échanges. Par ailleurs, les points dérivants sont très sensibles à la qualité des transcriptions, car les raccourcis de certains transcripteurs, qui résument parfois certains passages, induisent de fortes perturbations dans l’estimation du positionnement (il manque des mots, le ratio mot/seconde est donc faux). On s’aperçoit donc très vite quand des digressions ont été ignorées, car les points sont parfois loin de leur place supposée… Tout cela pousse à préférer un travail audio textuel à une analyse centrée exclusivement sur le texte.
***
Les différents outils construits dans ce travail de resynchronisation automatique sont disponibles dans la dernière version (1.6.0) téléchargeable ici.
Si vous utilisez ces fonctions et que vous avez des problèmes ou des remarques, vous pouvez m’en faire part en passant par ce formulaire.