Gráfico do Sumário da arquitetura do processo feito pelo whisper, com o logo da OpenAI

Whisper: Transcrevendo todos os episódios do Podcast

Até ano passado o podcast utilizava o antigo plugin podpress, resistimos até pra não perder as estatísticas, mas sempre que tinha uma atualização do PHP era uma saga pra tentar revisar o código do plugin, dessa ultima vez não teve como, estava muito trabalho e acabamos mudando para o PowerPress.

Alguns podcasts já disponibilizam a transcrição do podcast o que ajuda os mecanismos de busca a acharem os episódios não só pelo título e a descrição de cada episódio, mas também pelo pelo que é falado um bom exemplo é o Café Brasil e que tem como “efeito colateral” estrangeiros que utilizam o podcast para treinar a escuta na aprendizado de Português Brasileiro.

Pensei seriamente em formas de fazer a transcrição dos episódios, desde manualmente, buscando alguma forma de agilizar isso com alguma forma de pausar o audio sem usar as mãos, até pesquisei por controladores MIDIs no AliExpress com pedal de play e pause até deixar um outro teclado no chão que tenha teclas multimídia pra usar como pedal.

Depois de desistir de transcrever manualmente, procurei algum projeto que fosse possível fazer a transcrição offline, foi quando cheguei ao vosk, que poderia ser instalado com um simples comando do pip e possuía um treinamento com o DataSet em português do brasil.

O resultado não foi tão satisfatório, mas eu tinha a esperança de retreinar o reconhecimento em cada episódio e assim ir melhorando a acurácia com o meu próprio dataset, não vi nenhuma forma de fazer isso, pelo menos em uma busca relativamente rápida.

Segue um trecho de como estava ficando a transcrição:

Foi então que zapeando no twitter vi uma postagem do cardoso sobre como instalar o Whisper para transcrever áudios resolvi dar uma olhada também no projeto.

Fiz a instalação via pip mesmo (python3 -m pip install -U openai-whisper), achei mais simples e funcionou bem, embora ele transcrevia o meu nome cada vez de um modo diferente, mesmo assim fazer só a revisão seria bem mais simples.

Tem uma tabelinha recomendando de acordo com a quantidade de RAM no sistema, o meu Mac Mini velho de guerra, um modelo que não faz upgrade de RAM, na época eu comprei só com 4 Giga, com a van esperança de fazer upgrade a posteriore, sofreu pra transcrever até os episódios mais breves, fiz a transcrição do episódio mais curto pra testar e olha só como ficava a o tempo todo fazendo swap.

Quando você não passa nenhum parâmetro além da linguagem ele gera 4 arquivos diferentes, .vtt, .tsv, .srt e .txt além de um json com metadados de cada trecho.

Além do meu nome toda vez ter uma transcrição diferentes, tinha algumas coisas engraçadas como Cleiviany ele transcreveu como Cley Van Koff…

Fiz 2 episódios no Mac e tava meio lento, procurei outro computador pra tentar executar o processo um pouco mais rápido.

O audio é dividido em pedaços o que gera os seguimentos permitindo o paralelismo do processamento, no site oficial do projeto tem uma descrição bem detalhada de como funciona a arquitetura do processamento do audio.

Utilizando CUDA da NVIDIA

Depois de mais de um dia processando e transcrevendo todos os arquivos (mais 15 episódios), lembrei que a biblioteca do PyTorch pode utilizar os núcleos CUDA da placa de video do sistema. Nos testes anteriores eu tinha feito só com o processador, mesmo sendo um bem recente e com mais de 8 núcleos 16 threads da Intel i5 Pro. Além do meu Mac Mini velho de guerra tem um outro Notebook Dell que tem uma placa de video da nvidia dedicada, mas é um computador antigo, tive que fazer o downgrade do driver pra que a placa fosse devidamente reconhecida.

Placa devidamente reconhecida, temos que verificar se o PyTorch está usando os núcleos CUDA, e é bem simples:

$python3
>>>import torch
>>>torch.cuda.is_available()
True # se True, tudo certo! 

No meu caso, a placa de vídeo precisava ser um pouco mais recente, até tinha núcleos CUDA disponíveis, 96, mas com o driver velho, não foi possível com esse notebook.

Tive que recorrer ao notebook da criançada, e agora sim deu certo!

Rodando um episódio de aproximadamente 20 minutos foi transcrito em incríveis 3 minutos!

Eu poderia ter feito assim desde o começo pois foi muito rápido, tudo bem que foi uma nvidia que agora tinha mais de 2 mil cuda cores, por isso a transcrição tão rápida e algumas vezes até melhor do que a feita utilizando apenas o processador.

Resumo com o ChatGPT e a Limitação de Tokens

Se eu pegar a versão em texto puro e pedir um resumo pra o ChatCPT, eu não conseguiria, pois tem uma limitação de 2000 caracteres para o prompt, pelo menos no plugin pra o Microsoft Edge, porém se eu abrir o raw do arquivo que está no github e pedir um resumo, aparentemente ele fez do documento inteiro, veja só…

Conclusão

Depois de testar em 3 gerações de Dell com i5 e um Mac Mini chavoso tive tive boas relembrei bons tempos brincando com text-to-speech que na época as vozes mais próximas do português era o espanhol, dessa vez com speech-to-text.

Agora um questionamento é o que se pode fazer com os textos, eu penso que agora tenho um DataSet próprio para fazer testes com pesquisa de texto completo e muitas aplicações de Data Science, além de ajudar na indexação dos episódios pelos mecanismos de busca ou até mesmo pesquisar se ja falamos ou não de algum assunto.

Fiz também um player simples de HTML utilizando os arquivos .vtt como legenda, mesmo não sendo arquivo de vídeos a tag de video do html5 aceita colocar o mp3 colocando a trilha de caption/transcrição.

Espero que tenha gostado ler assim como foi de escrever e até a próxima….

Links:

Publicado por

Sebastião Relson

Programador multi-versátil, técnico em Redes (2004) e Bacharel em Ciências da Computação (2008). Na Tribo do C.I. atua na retaguarda do site além da edição do podcast, com poucos textos publicados, veja mais no "quem somos" do site.