Das Rummel ist eine Bibliothek zum Ausrichten von Text -Transkripten mit Audio. Sie stellen eine Audiodatei sowie eine Textdatei mit dem vollständigen Text -Transkript an. Das Rummel gibt eine Liste von Zeitcodes für jedes Wort und jedes Zeichen aus, die angeben, wann dieses Wort oder Buchstaben in dem von Ihnen angegebenen Audio gesprochen wurde. Das Rummel strebt danach, schnell und genau zu sein und kann sowohl auf GPUs als auch auf CPUs ausgeführt werden.
Das Timing verwendet leistungsstarke WAV2VEC -basierte Spracherkennungsmodelle, die von der Umarmung der AI -Community gehostet werden. Der Ansatz wird in diesem Pytorch -Tutorial sowie in diesem Papier beschrieben.
Um das Rummel zu installieren, benötigen Sie eine Installation von Python 3.7 oder 3.8. Sie können es dann mit PIP installieren:
pip install timethingEs gibt viele Fälle, in denen Sie lange Audioinhalte mit einem entsprechenden Transkript ausrichten möchten. Zum Beispiel möchten Sie möglicherweise einen Podcast mit seiner Transkription ausrichten. Die Episode könnte ein paar Stunden lang dauern und die Transkription wird vom Podcaster angegeben. In einem anderen Fall möchten Sie ein Audiobuch mit seinem geschriebenen Text ausrichten.
timething align-long
--audio-file fixtures/audio/keanu.mp3
--transcript-file fixtures/keanu.cleaned.txt
--alignments-dir aligned
--batch-size 10
--n-workers 5
Das Rummel kann einen Datensatz mit Audioausschnitten auf Äußerungsebene mit ihren Texttranskriptionen ausrichten. Dies ist besonders nützlich in einer maschinellen Lerneinstellung, in der mit dem Rummel zum Reinigen von Datensätzen verwendet werden kann.
Das Timing erwartet derzeit einen Ordner, der ein oder mehrere Kapitel in der folgenden Form enthält:
└── dir/
├── text.csv
├── aligned/
└── audio/
├── chapter01.mp3
├── chapter02.mp3
└── chapter03.mp3
Das Rummel kann viele Audioformate verarbeiten, einschließlich MP3, WAV, Flac und OGG/Vorbis.
Die Datei text.csv sollte im folgenden Format einen Eintrag pro WAV -Datei enthalten:
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
Sie können jetzt auf Ihrer CPU oder GPU ein Rummel ausführen, zum Beispiel:
timething align-short --metadata text.csv --alignments-dir alignedSie können auch weitere Optionen angeben, z. B.:
timething align-short
--language german
--metadata text.csv
--alignments-dir aligned
--batch-size 8
--n-workers 8 Führen Sie timething --help für eine vollständige Beschreibung.
Die Ergebnisse werden in den angegebenen Ordner geschrieben, z. B. aligned . Sie werden in eine einzelne JSON -Datei geschrieben, die nach jeder Audio -ID benannt ist. Jede Datei enthält die Zeichenebene und die Wortstufe. Bei Ausrichtungen zur Wortebene hat jedes Wort die Startzeit in Sekunden, die Endzeit in Sekunden, das Konfidenzniveau für dieses Wort und das Wort Etikett. Charakterebene -Ausrichtungen haben die entsprechenden Ergebnisse.
Sie finden einen Beispiel -Datensatz mit Ausgabenausgaben in fixtures/ . Hier ist, was die Ausrichtung für "One.mp3", das nur das Wort "One" enthält, sieht aus:
{
"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
}
]
}Sobald Sie die Ausrichtung ausgeführt haben, können Sie Ihre Dateien auf kleinere Dateien reduzieren und die Ergebnisse in einen neuen Ordner schreiben. Wenn Sie beispielsweise nicht möchten, dass eine Ihrer Aufzeichnungen 8 Sekunden überschreitet, können Sie ein neues Verzeichnis erstellen und Ihre Daten wie folgt neu einschneiden:
timething recut
--from-metadata text.csv
--to-metadata ~ /smaller-recordings/text.csv
--alignments-dir alignments
--cut-threshold-seconds 8.0Die Ergebnisse in diesem Beispiel werden in ~/kleinere Aufnahmen geschrieben.
Derzeit unterstützte Sprachen finden Sie in Modellen.yaml. Dies umfasst derzeit Englisch, Deutsch, Niederländisch, Polnisch, Italienisch, Portugiesisch, Spanisch, Französisch, Russisch, Japanisch, Griechisch und arabisch. Wir haben das deutsche Modell bisher nur getestet.
Aufgrund der großen Anzahl von CTC -Sprachmodellen, die auf der Umarmung der AI -Community verfügbar sind, können neue Sprachen problemlos zum Rummel hinzugefügt werden. Alternativ kann WAV2VEC wie beschrieben mit einer der gemeinsamen Sprachsprachen 87 zum Zeitpunkt des Schreibens fein abgestimmt werden.
Die Unterstützung für die Textreinigung ist derzeit minimal und muss möglicherweise für neue Sprachen erweitert werden.
Es gibt viele ausgereifte Bibliotheken, die bereits erzwungene Ausrichtung wie das Rummel, z. B. der Montreal erzwungene Aligner oder Aeneas durchführen können. Eine Liste von Tools wird hier verwaltet.
Vielen Dank an warum Vögel für die Erstarbeit in dieser Bibliothek offen zu ermöglichen.