Potato 2.7.1 : la transcription existe déjà
Potato 2.7.1 lit directement 21 formats de transcription et de sous-titres, les charge depuis des fichiers annexes posés à côté de vos médias, et livre un convertisseur qui transforme un dossier de sorties de reconnaissance vocale en fichier de données prêt à annoter.
Presque personne n'arrive dans un outil d'annotation avec de l'audio brut et rien d'autre. On arrive avec une transcription. Quelqu'un a fait tourner Whisper sur un dossier d'entretiens. Quelqu'un a récupéré les sous-titres de cent conférences. Quelqu'un a hérité d'un corpus de TextGrid d'un projet de terrain achevé en 2019.
Et là, l'outil lui demande d'écrire un script de conversion.
Potato 2.7.1 sert à supprimer cette étape. Il lit directement 21 formats de transcription et de sous-titres, les charge depuis des fichiers posés à côté de vos médias au lieu d'exiger que tout soit collé dans un fichier de données, et il inclut un convertisseur pour le cas où vous voulez malgré tout un fichier de données au bout.
Potato 2.7.1
21 formats en entrée, un modèle en sortie
Contre 6 auparavant. La liste complète est sur la page Formats de transcription, mais en gros : neuf sortes de sorties de reconnaissance vocale (Whisper JSON, WhisperX et autres JSON diarisés, whisper.cpp, Whisper TSV, AWS Transcribe, Deepgram, AssemblyAI, Rev.ai, SPoRC), six formats de sous-titres et de sous-titrage (SubRip, WebVTT, SubStation Alpha, TTML et DFXP, YouTube json3, YouTube srv1/srv2/srv3), trois venus du monde de l'alignement forcé (NIST CTM, Praat TextGrid, ELAN EAF), et trois formes génériques pour les données qui viennent de tout autre part.
Les formats d'alignement sont l'ajout dont nous sommes le plus contents. L'export vers EAF et TextGrid existait déjà, donc les annotations en couches font désormais l'aller-retour : ingérez un alignement existant, corrigez-le dans Potato, renvoyez-le vers ELAN ou Praat.
La détection se fait sur la forme des données plutôt que sur l'extension du fichier, ce qui veut dire qu'un fichier WebVTT nommé captions.txt est quand même analysé comme du WebVTT, et que la même transcription fonctionne incorporée ou lue depuis le disque sans changement de configuration.
Les temps par mot et la confiance par segment sont conservés quand la source les fournit. Les formats nativement au niveau du mot, comme CTM, Deepgram et AssemblyAI, sont regroupés en tours au changement de locuteur, plus un seuil de pause.
Quel que soit le format entré, voilà ce qui sort
Les fichiers annexes
Votre outil de reconnaissance vocale a déjà écrit les fichiers dans une disposition sensée : le média ici, la transcription à côté. Il n'y avait aucune bonne raison de vous obliger à aplatir tout ça dans un bloc de données, alors vous pouvez désormais pointer dessus :
{"id": "int_001", "conversation": {"audio": "media/int_001.mp3",
"transcript": "media/int_001.srt"}}Les chemins sont résolus relativement à task_dir et passent par la même validation contre la traversée de répertoires que tout autre chemin configuré. Si vos données contiennent réellement des transcriptions d'une ligne qui ressemblent à des noms de fichiers, transcript_is_path: false désactive l'heuristique.
L'avantage pratique, c'est que vos transcriptions restent des fichiers. Vous pouvez les comparer, les régénérer et les transmettre à quelqu'un d'autre, au lieu d'en avoir une copie fossilisée dans un tableau JSON.
Un convertisseur pour l'autre cas
Parfois, vous voulez bien un seul fichier de données. potato transcripts parcourt un dossier, apparie chaque transcription à son média par nom de base, dérive les identifiants d'item des noms de fichiers, et écrit le résultat :
potato transcripts ./whisper_out --media-dir ./audio -o data/interviews.json--dry-run n'écrit rien et vous dit ce qu'il a trouvé, ce qui est aussi la première chose à lancer quand une transcription s'affiche comme un seul bloc indifférencié :
Scanned 3 file(s):
interview_01.json Whisper JSON 42 turns 891.4s undiarized
interview_02.json WhisperX JSON 51 turns 1120.8s 2 speaker(s): SPEAKER_00, SPEAKER_01
interview_03.json Whisper JSON 38 turns 754.2s undiarized
3 item(s), 131 turn(s).
Un fichier annoncé comme plain text est presque toujours un .txt de Whisper qui s'est mélangé à la sortie .json. Le .txt ne porte aucun horodatage, et vous ne pouvez pas les récupérer sans refaire tourner le modèle. Ce seul fait explique la plupart des signalements « pourquoi ma transcription s'affiche mal » que nous voyons.
--emit-config imprime un config.yaml correspondant à côté du fichier de données.
Un seul vocabulaire pour quatre schémas
audio_dialogue, speech_transcript, voice_interaction et tiered_annotation analysaient chacun les données de transcription à leur façon et acceptaient des sous-ensembles de formats différents, sans que personne puisse expliquer pourquoi. Ils partagent maintenant un seul normaliseur, donc ce que l'un accepte, les quatre l'acceptent.
Les configurations existantes ne changent pas. Chaque schéma conserve son ancienne analyse en repli, et toute forme de transcription qui fonctionnait avant fonctionne encore, octet pour octet.
tiered_annotation gagne aussi le préremplissage optionnel depuis la transcription. Pointez transcript_field sur votre transcription et une couche arrive déjà remplie, de sorte que les annotateurs corrigent un alignement existant au lieu de resegmenter la parole depuis zéro :
- annotation_type: tiered_annotation
name: tiers
source_field: audio_url
media_type: audio
tiers:
- name: utterance
labels:
- name: speech
color: "#7c3aed"Les intervalles préremplis ne sont pas enregistrés tant qu'un annotateur ne les a pas réellement modifiés, donc une amorce laissée intacte n'est jamais comptée à tort comme du travail humain.
Ce que Potato ne fait toujours pas
Il ne transcrit pas, et il ne diarise pas. La reconnaissance vocale tourne en amont. Potato lit ce que votre chaîne a produit.
La question revient parce que Potato fait tourner un modèle Whisper local, pour le mode Think-Aloud, qui enregistre les annotateurs pendant qu'ils parlent au travail. C'est une fonction de capture qui vise vos annotateurs, pas votre corpus. Autre chose, même mot.
La confiance au niveau du mot est analysée et conservée dans le modèle de données quand la source la fournit, mais il n'existe pas encore d'interface pour la consulter.
Et certains formats n'ont aucun analyseur du tout : SAMI, MicroDVD, SubViewer, Transcriber .trs, EXMARaLDA, CHAT/CHILDES, RTTM seul, et les sorties natives de Montreal Forced Aligner ou de Gentle. Convertissez-les d'abord. Nous publions cette liste parce qu'une liste de formats pris en charge dont rien n'est exclu ne vaut pas grand-chose.
Documentation
- Formats de transcription — chaque format avec sa règle de détection, le modèle de tours normalisé, les règles des fichiers annexes, les clés de configuration et un dépannage indexé sur des symptômes réels
- Comment annoter des transcriptions Whisper — quel fichier de sortie garder, et pourquoi la diarisation est une décision à part
- Comment annoter des sous-titres YouTube —
yt-dlp, et ce que les sous-titres automatiques permettent ou non - Ingestion de formats de transcription — une conception exécutable avec six formats côte à côte
Mise à jour
pip install --upgrade potato-annotation==2.7.1Vous n'avez aucune configuration à changer. Toute forme de transcription que Potato acceptait avant, il l'accepte encore.