Timething est une bibliothèque pour aligner les transcriptions de texte avec l'audio. Vous fournissez un fichier audio, ainsi qu'un fichier texte avec la transcription du texte complète. Timething sortira une liste de codes de temps pour chaque mot et caractère qui indiquent quand ce mot ou cette lettre a été prononcé dans l'audio que vous avez fourni. Timething s'efforce d'être rapide et précis, et peut fonctionner sur les GPU ou les CPU.
Timething utilise des modèles de reconnaissance vocale basés sur WAV2VEC puissants organisés par la communauté de l'IA Face Hugging Face. L'approche est décrite dans ce tutoriel Pytorch, ainsi que dans cet article.
Pour installer Timething, vous aurez besoin d'une installation de Python 3.7 ou 3.8. Vous pouvez ensuite l'installer à l'aide de PIP:
pip install timethingIl existe de nombreux cas où vous voudrez peut-être aligner le contenu audio long avec une transcription correspondante. Par exemple, vous voudrez peut-être aligner un podcast avec sa transcription. L'épisode peut durer quelques heures et la transcription est donnée par le podcasteur. Dans un autre cas, vous voudrez peut-être aligner un livre audio avec son texte écrit.
timething align-long
--audio-file fixtures/audio/keanu.mp3
--transcript-file fixtures/keanu.cleaned.txt
--alignments-dir aligned
--batch-size 10
--n-workers 5
Timething peut aligner un ensemble de données d'énippets audio au niveau de l'énoncé avec leurs transcriptions de texte. Ceci est particulièrement utile dans un paramètre d'apprentissage automatique, où Timething peut être utilisé pour nettoyer les ensembles de données.
Timething prévoit actuellement de trouver un dossier contenant un ou plusieurs chapitres dans la forme suivante:
└── dir/
├── text.csv
├── aligned/
└── audio/
├── chapter01.mp3
├── chapter02.mp3
└── chapter03.mp3
Timething peut traiter de nombreux formats audio, y compris MP3, WAV, FLACC et OGG / Vorbis.
Le fichier text.csv doit contenir une entrée par fichier wav dans le format suivant:
audio/chapter01.mp3|The transcript for chapter01 on a single line here
audio/chapter02.mp3|The transcript for chapter02 on a single line here
audio/chapter03.mp3|The transcript for chapter03 on a single line here
Vous pouvez maintenant exécuter Timething sur votre CPU ou votre GPU, par exemple:
timething align-short --metadata text.csv --alignments-dir alignedVous pouvez également spécifier plus d'options, par exemple:
timething align-short
--language german
--metadata text.csv
--alignments-dir aligned
--batch-size 8
--n-workers 8 Exécutez timething --help pour une description complète.
Les résultats seront écrits dans le dossier donné, par exemple, aligned . Ils seront écrits dans un seul fichier JSON nommé d'après chaque identifiant audio. Chaque fichier contiendra le niveau de caractère et les alignements de niveau de mot. Pour les alignements du niveau de mot, chaque mot aura l'heure de début en secondes, l'heure de fin en secondes, le niveau de confiance pour ce mot et l'étiquette des mots. Les alignements du niveau de caractère ont les résultats correspondants.
Vous pouvez trouver un exemple de jeu de données avec la sortie des alignements dans fixtures/ . Voici ce que l'alignement pour "One.mp3", qui ne contient que le mot "un", ressemble:
{
"n_model_frames" : 72 ,
"n_audio_samples" : 23392 ,
"sampling_rate" : 16000 ,
"chars" : [
{
"label" : " O " ,
"start" : 0.5888611111111111 ,
"end" : 0.6497777777777777 ,
"score" : 0.9999777873357137
},
{
"label" : " n " ,
"start" : 0.6497777777777777 ,
"end" : 0.7106944444444444 ,
"score" : 0.99994424978892
},
{
"label" : " e! " ,
"start" : 0.7106944444444444 ,
"end" : 0.731 ,
"score" : 0.9999799728393555
}
],
"chars_cleaned" : [
{
"label" : " o " ,
"start" : 0.5888611111111111 ,
"end" : 0.6497777777777777 ,
"score" : 0.9999777873357137
},
{
"label" : " n " ,
"start" : 0.6497777777777777 ,
"end" : 0.7106944444444444 ,
"score" : 0.99994424978892
},
{
"label" : " e " ,
"start" : 0.7106944444444444 ,
"end" : 0.731 ,
"score" : 0.9999799728393555
}
],
"words" : [
{
"label" : " One! " ,
"start" : 0.5888611111111111 ,
"end" : 0.731 ,
"score" : 0.9999637263161796
}
],
"words_cleaned" : [
{
"label" : " one " ,
"start" : 0.5888611111111111 ,
"end" : 0.731 ,
"score" : 0.9999637263161796
}
]
}Une fois que vous avez exécuté l'alignement, vous pouvez réduire vos fichiers en fichiers plus petits et écrire les résultats dans un nouveau dossier. Par exemple, si vous ne souhaitez pas que vos enregistrements dépassent 8 secondes, vous pouvez créer un nouveau répertoire et recouvrir vos données comme ceci:
timething recut
--from-metadata text.csv
--to-metadata ~ /smaller-recordings/text.csv
--alignments-dir alignments
--cut-threshold-seconds 8.0Les résultats de cet exemple sont écrits en ~ / plus petits-enregistrements.
Les langues actuellement prises en charge peuvent être trouvées dans les modèles.yaml. Cela comprend actuellement l'anglais, l'allemand, le néerlandais, le polonais, l'italien, le portugais, l'espagnol, le français, le russe, le japonais, le grec et l'arabe. Nous n'avons testé que le modèle allemand jusqu'à présent.
En raison du grand nombre de modèles de discours CTC disponibles sur la communauté des étreintes Face AI, de nouvelles langues peuvent être facilement ajoutées à Timething. Alternativement, WAV2VEC peut être affiné comme décrit ici, en utilisant l'une des langues vocales communes, 87 au moment de la rédaction.
La prise en charge du nettoyage de texte est actuellement minime et peut devoir être étendue pour les nouvelles langues.
Il existe de nombreuses bibliothèques matures qui peuvent déjà faire un alignement forcé comme Timething, par exemple l'aligneur forcé de Montréal ou Aeneas. Une liste d'outils est maintenue ici.
Merci à la raison pour laquelle les oiseaux ont permis à l'ouverture des travaux initiaux de cette bibliothèque.