Timhing es una biblioteca para alinear las transcripciones de texto con audio. Proporciona un archivo de audio, así como un archivo de texto con la transcripción completa de texto. Timhing generará una lista de codificaciones de tiempo para cada palabra y carácter que indican cuándo se pronunció esta palabra o letra en el audio que proporcionó. Timething se esfuerza por ser rápido y preciso, y puede ejecutarse en GPU o CPU.
Timhing utiliza poderosos modelos de reconocimiento de voz basados en WAV2VEC organizados por la comunidad de AI Hugging Face. El enfoque se describe en este tutorial de Pytorch, así como en este documento.
Para instalar Time, necesitará una instalación de Python 3.7 o 3.8. Luego puede instalarlo con PIP:
pip install timethingHay muchos casos en los que es posible que desee alinear el contenido de audio largo con una transcripción correspondiente. Por ejemplo, es posible que desee alinear un podcast con su transcripción. El episodio puede durar unas horas, y la transcripción viene dada por el Podcaster. En otro caso, es posible que desee alinear un audiolibro con su texto escrito.
timething align-long
--audio-file fixtures/audio/keanu.mp3
--transcript-file fixtures/keanu.cleaned.txt
--alignments-dir aligned
--batch-size 10
--n-workers 5
TimeNthing puede alinear un conjunto de datos de fragmentos de audio a nivel de expresión con sus transcripciones de texto. Esto es particularmente útil en una configuración de aprendizaje automático, donde el tiempo se puede usar para limpiar conjuntos de datos.
Actualmente, Timething espera encontrar una carpeta que contenga uno o más capítulos en la siguiente forma:
└── dir/
├── text.csv
├── aligned/
└── audio/
├── chapter01.mp3
├── chapter02.mp3
└── chapter03.mp3
TimeNthing puede procesar muchos formatos de audio, incluidos MP3, WAV, FLACC y OGG/Vorbis.
El archivo text.csv debe contener una entrada por archivo WAV en el siguiente formato:
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
Ahora puede ejecutar Timing en su CPU o GPU, por ejemplo:
timething align-short --metadata text.csv --alignments-dir alignedTambién puede especificar más opciones, por ejemplo:
timething align-short
--language german
--metadata text.csv
--alignments-dir aligned
--batch-size 8
--n-workers 8 Ejecute timething --help para una descripción completa.
Los resultados se escribirán en la carpeta dada, por ejemplo, aligned . Se escribirán en un solo archivo JSON que lleva el nombre de cada ID de audio. Cada archivo contendrá el nivel de caracteres y las alineaciones de nivel de palabra. Para las alineaciones de nivel de palabras, cada palabra tendrá el tiempo de inicio en segundos, el tiempo final en segundos, el nivel de confianza para esa palabra y la etiqueta de la palabra. Las alineaciones a nivel de caracteres tienen los resultados correspondientes.
Puede encontrar un conjunto de datos de ejemplo con salida de alineaciones en fixtures/ . Esto es lo que la alineación para "One.mp3", que contiene solo la palabra "one", parece:
{
"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
}
]
}Una vez que haya ejecutado la alineación, puede reducir sus archivos a archivos más pequeños y escribir los resultados en una nueva carpeta. Por ejemplo, si no desea que ninguna de sus grabaciones supere los 8 segundos, puede crear un nuevo directorio y volver a cortar sus datos de la misma manera:
timething recut
--from-metadata text.csv
--to-metadata ~ /smaller-recordings/text.csv
--alignments-dir alignments
--cut-threshold-seconds 8.0Los resultados en este ejemplo se escriben en ~/grabaciones más pequeñas.
Actualmente los idiomas compatibles se pueden encontrar en modelos.yaml. Actualmente, esto incluye inglés, alemán, holandés, polaco, italiano, portugués, español, francés, ruso, japonés, griego y árabe. Solo hemos probado el modelo alemán hasta ahora.
Debido a la gran cantidad de modelos de discurso CTC disponibles en la comunidad de AI para abrazar, los nuevos idiomas se pueden agregar fácilmente a Time. Alternativamente, WAV2VEC se puede ajustar como se describe aquí, utilizando cualquiera de los lenguajes de voz comunes, 87 al momento de escribir.
El soporte para la limpieza de texto es actualmente mínimo, y es posible que deba extenderse para nuevos idiomas.
Hay muchas bibliotecas maduras que ya pueden hacer una alineación forzada como el tiempo, por ejemplo, el alineador o alineador forzado de Montreal. Aquí se mantiene una lista de herramientas.
Gracias a por qué las aves para permitir que el trabajo inicial en esta biblioteca se abre de origen.