O Timing Ilhing é uma biblioteca para alinhar transcrições de texto com áudio. Você fornece um arquivo de áudio, bem como um arquivo de texto com a transcrição de texto completa. Timing Will produzirá uma lista de códigos de tempo para cada palavra e caractere que indicam quando essa palavra ou carta foi falada no áudio que você forneceu. Timing Whoder se esforça para ser rápido e preciso e pode ser executado nas GPUs ou nas CPUs.
O Timinging usa poderosos modelos de reconhecimento de fala baseados em WAV2VEC, hospedados pela comunidade Hugging Face AI. A abordagem é descrita neste tutorial de Pytorch, bem como neste artigo.
Para instalar o Timing Inowing, você precisará de uma instalação do Python 3.7 ou 3.8. Você pode instalá -lo usando PIP:
pip install timethingExistem muitos casos em que você pode alinhar o conteúdo de áudio longo com uma transcrição correspondente. Por exemplo, você pode querer alinhar um podcast com sua transcrição. O episódio pode ter algumas horas de duração e a transcrição é dada pelo podcaster. Em outro caso, você pode querer alinhar um livro de áudio com seu 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
O Timing Whetom pode alinhar um conjunto de dados de trechos de áudio em nível de enunciado com suas transcrições de texto. Isso é particularmente útil em uma configuração de aprendizado de máquina, onde o Timing pode ser usado para limpar os conjuntos de dados.
Atualmente, o Timinghing espera encontrar uma pasta contendo um ou mais capítulos na seguinte forma:
└── dir/
├── text.csv
├── aligned/
└── audio/
├── chapter01.mp3
├── chapter02.mp3
└── chapter03.mp3
O Timing Whetom pode processar muitos formatos de áudio, incluindo MP3, WAV, FLACC e OGG/VORBIS.
O arquivo text.csv deve conter uma entrada por arquivo WAV no seguinte 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
Agora você pode executar algo em sua CPU ou GPU, por exemplo:
timething align-short --metadata text.csv --alignments-dir alignedVocê também pode especificar mais opções, por exemplo:
timething align-short
--language german
--metadata text.csv
--alignments-dir aligned
--batch-size 8
--n-workers 8 Execute timething --help para uma descrição completa.
Os resultados serão gravados na pasta fornecida, por exemplo, aligned . Eles serão gravados em um único arquivo JSON com o nome de cada ID de áudio. Cada arquivo conterá o nível do caractere e os alinhamentos do nível da palavra. Para alinhamentos de nível de palavras, cada palavra terá o tempo de início em segundos, o tempo final em segundos, o nível de confiança dessa palavra e o rótulo da palavra. Alinhamentos no nível do caractere têm os resultados correspondentes.
Você pode encontrar um exemplo de conjunto de dados com a saída de alinhamentos nos fixtures/ . Aqui está como o alinhamento para "One.mp3", que contém apenas a palavra "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
}
]
}Depois de executar o alinhamento, você pode reduzir seus arquivos em arquivos menores e escrever os resultados em uma nova pasta. Por exemplo, se você não deseja que nenhuma das suas gravações exceda 8 segundos, poderá criar um novo diretório e recrutar seus dados assim:
timething recut
--from-metadata text.csv
--to-metadata ~ /smaller-recordings/text.csv
--alignments-dir alignments
--cut-threshold-seconds 8.0Os resultados neste exemplo são gravados em registros ~/menores.
Atualmente, os idiomas suportados podem ser encontrados em modelos.yaml. Atualmente, isso inclui inglês, alemão, holandês, polonês, italiano, português, espanhol, francês, russo, japonês, grego e modelos árabes. Nós apenas testamos o modelo alemão até agora.
Devido ao grande número de modelos de fala do CTC disponíveis na comunidade de IA de Hugging Face, novos idiomas podem ser facilmente adicionados ao Timing Alling. Como alternativa, o WAV2VEC pode ser ajustado como descrito aqui, usando qualquer uma das linguagens de voz comuns, 87 no momento da redação.
Atualmente, o suporte à limpeza de texto é mínimo e pode precisar ser estendido para novos idiomas.
Existem muitas bibliotecas maduras que já podem fazer alinhamento forçado, como algo, por exemplo, o alinhador forçado de Montreal ou Enéias. Uma lista de ferramentas é mantida aqui.
Graças a por que os pássaros por permitir que o trabalho inicial nesta biblioteca seja de origem aberta.