paint-brush
Usando Whisper e GPT-3 API da OpenAI para construir e implantar um aplicativo Transcriber – Parte 1por@juanfrank77
7,393 leituras
7,393 leituras

Usando Whisper e GPT-3 API da OpenAI para construir e implantar um aplicativo Transcriber – Parte 1

por Juan F. Gonzalez11m2023/09/13
Read on Terminal Reader

Muito longo; Para ler

O artigo descreve o desenvolvimento de um aplicativo transcritor usando Whisper da OpenAI e GPT-3.5 Turbo API. A Parte 1 cobre a configuração, incluindo aquisição de chave de API, instalação do Whisper e escolha de desenvolvimento local ou online. Ele explica como baixar arquivos de áudio para transcrição, demonstra a transcrição de áudio com Whisper e detalha o processo de geração de um resumo executivo usando GPT-3. A Parte 2 se concentrará na implantação do aplicativo na nuvem.
featured image - Usando Whisper e GPT-3 API da OpenAI para construir e implantar um aplicativo Transcriber – Parte 1
Juan F. Gonzalez HackerNoon profile picture
0-item


À medida que o entusiasmo em torno das tecnologias de IA, como chatbots, grandes modelos de linguagem (LLMs) e copilotos, começou após o lançamento do ChatGPT, muitos outros casos de uso apareceram logo.


Não estou falando dos mais comuns, como assistentes de redação, geradores de imagens ou chatbots treinados com seus dados. Estou falando de mais casos de uso de nicho, como avatares falantes realistas, editores de vídeo ou síntese de fala.


Neste artigo, exploraremos um desses casos de uso – um aplicativo transcritor que você pode usar com podcasts ou vídeos do YouTube . Será de grande valor se você sempre quis usar a API GPT-3 ou ver uma demonstração do OpenAI Whisper em ação.


Na parte 1 deste tutorial, veremos tudo o que precisamos para configurar e iniciar o desenvolvimento do aplicativo.


E então, na parte 2, carregaremos nosso código funcional para a nuvem e colocaremos uma interface de usuário funcionando para que outras pessoas possam ver os resultados e interagir com o aplicativo.


Agora, aperte o cinto porque vamos sujar as mãos com algum código Python construindo isso.




Preparando o cenário

Para construir isso, passaremos por 3 atos.


  • Na primeira veremos tudo o que precisamos para nos preparar para a jornada que temos pela frente.


  • Na segunda, construiremos um protótipo localmente e descobriremos quais ferramentas podem nos auxiliar no processo.


  • E no final, carregaremos tudo o que construímos na nuvem para que outros possam experimentar também.


Parece bom?


Tudo bem então, vamos em frente!





Ato 1: A configuração (API Whisper e GPT-3)

Em primeiro lugar, uma visão geral aproximada do processo que seguiremos é extrair as informações que queremos transcrever e depois alimentá-las para Sussurro da OpenAI .


A partir daí, pegaremos a saída e realizaremos algum pós-processamento antes de exibi-la em um aplicativo front-end para que outras pessoas possam ver e interagir com ela.


Esse processo exigiria algumas etapas extras se o fizéssemos manualmente. Felizmente, OpenAI disponibilizou Acesso API para Whisper e ChatGPT .


Aqui você terá que decidir qual caminho seguir.


  • Construindo isso localmente em sua máquina (supondo que você tenha o Python 3 instalado) ou,
  • Construí-lo on-line usando um Caderno do Google Colab .


Escolha primeiro o seu caminho e depois prosseguiremos.


A seguir, precisaremos de uma chave API da OpenAI para acessar o modelo GPT-3.5 Turbo (que é basicamente o modelo que alimenta o ChatGPT).


Se você não sabe como conseguir um, siga estas etapas:

  • Acesse o site da plataforma OpenAI e faça login ou cadastre-se (dependendo do seu caso).


  • Em seguida, clique no ícone do seu perfil no canto superior direito para exibir as opções e selecione “Exibir chaves de API”.



  • Nessa página, você verá uma opção que diz “criar nova chave secreta” na seção de chaves de API.




  • Ele exibirá um pop-up onde sua chave secreta é exibida. Salve-o em um local seguro porque você nunca mais o verá.


Assim que tiver essa chave, passaremos para a próxima peça do quebra-cabeça, Whisper.



Você pode baixar e instalar a versão mais recente do Whisper em sua máquina executando o seguinte comando:


 pip install -U openai-whisper


Alternativamente, você pode instalar o commit mais recente do Git com suas dependências usando este comando:


 pip install git+https://github.com/openai/whisper.git


Isso lhe dá mais controle sobre qual versão você está instalando (e é o comando que você deseja executar se estiver tentando fazer isso em um notebook Colab).


Nota: Você precisará ter o 'ffmpeg' instalado se quiser executar o Whisper a partir da linha de comando.


Com o Whisper instalado, tudo o que precisamos agora são os arquivos que queremos transcrever. Podemos alimentá-lo com vários tipos de arquivos de mídia como ‘mp3’, ‘mp4’, ‘mpeg’, ‘wav’ e muitos mais.


A única limitação aqui é o tamanho dos arquivos, levará muito mais tempo com um vídeo de 10 minutos do que com um podcast de 20 minutos.


Agora, aqui está a próxima bifurcação na estrada.



Você terá que escolher se deseja transcrever vídeo ou áudio .


Para simplificar, neste exemplo, usaremos arquivos de áudio de podcasts.


E aqui, a pergunta que pode estar em sua mente é “ De onde faço o download dos episódios de podcast? ”.


Existem 2 maneiras que eu conheço.


A primeira é usar um site como o ListenNotes, escolher o podcast de sua preferência e ir para os episódios individuais.


Vale ressaltar que você terá que criar uma conta para poder acessar os episódios individuais e seus arquivos de áudio correspondentes.


A partir daí, você terá que clicar em um botão com 3 pontos para abrir uma aba “mais” e então você verá a opção de baixar o áudio.


Veja como ficará:





A segunda opção é usar o Podchaser. Você seguirá um processo semelhante para encontrar um podcast, percorrer a lista de episódios e escolher um específico.


Ao chegar à página do episódio individual, você verá uma coluna no lado direito que contém o botão de reprodução e outras opções abaixo.


Se você rolar para baixo, verá informações sobre o podcast, opções para compartilhar nas redes sociais e uma pequena seção com a opção de baixar o arquivo de áudio.


Veja como ficaria:






Escolha a opção de sua preferência e baixe alguns episódios de durações diferentes para testar como funciona o processo de transcrição.


Minha recomendação é que você escolha episódios com menos de 30 minutos.


A razão para isso é que se você escolher um mais longo, o Whisper poderá levar muito tempo para processá-lo e você poderá ter problemas de tempo limite (especialmente se estiver usando o ambiente Colab).


Um episódio de 20 a 30 minutos pode levar de 4 a 8 minutos para ser transcrito.


O principal gargalo aqui é a duração do processo de transcrição antes de obtermos um resultado que possamos usar em trabalhos futuros.


Agora que cumprimos todos os requisitos e a configuração está concluída.


É hora de passarmos para a próxima parte da jornada.



Ato 2: O Desenvolvimento (OpenAI Whisper Demo)

Estamos entrando em um território de programação mais profundo.


Usaremos o Whisper por meio do Python , pois é mais conveniente. E não precisamos fazer nada de especial para a transcrição, basta passar o arquivo de áudio para a modelo e aguardar a transcrição, pronto.


Então, vamos passar por esse processo linha por linha.

 import whisper model = whisper.load_model("base")


Aqui carregamos a versão 'base' do modelo Whisper. Existem várias versões (ou “tamanhos”) que a OpenAI lançou e variam de acordo com o número de parâmetros, recursos que consomem e tempo necessário para realizar a transcrição.


Aqui está um gráfico útil para referência.


Você pode ir em frente e experimentar todos pelo tamanho (trocadilho intencional), se quiser.


Lembre-se de que se você usar um modelo maior, precisará de mais recursos para executá-lo (como uma GPU).


Portanto, se você estiver executando isso no Colab, poderá usar este comando.


 model = whisper.load_model('medium', device='cuda')


Você passa o parâmetro do dispositivo no qual deseja que isso seja executado.


Depois de escolher o tamanho do modelo, você pode passar o arquivo de áudio que deseja transcrever, assim:


 result = model.transcribe(“path-to-where-the-file-is”)


Depois você pode imprimir o conteúdo para verificar se a transcrição funcionou. (Mas você pode querer dar uma olhada apenas nos primeiros 1.000 caracteres, em vez de imprimir tudo.)


 podcast_transcript = result['text'] podcast_transcript[:1000]


Se tudo deu certo, agora você tem os resultados do processo de transcrição salvos em uma variável. Aquele que usaremos para pós-processamento.


Isso é bastante fácil. Mas vamos supor que queremos saber o que foi discutido no podcast além do que encontraríamos na descrição do episódio.


Podemos criar uma função que pegue toda a transcrição e nos forneça um “resumo executivo”. Um resumo que também podemos compartilhar com pessoas ocupadas que não têm tempo para repassar tudo e ver se vale a pena ou não.


Vamos em frente e fazer isso.


Algum palpite sobre o que usaremos para fazer esse resumo?


Dica: já temos uma chave de API para isso.


Sim, você entendeu.


Usaremos o modelo `get-3.5-turbo` para criar este resumo, fornecendo-lhe a transcrição do podcast.



Poderíamos fazer as chamadas diretamente para a API, mas é muito mais conveniente usar o pacote OpenAI para isso (que é apropriadamente chamado de 'openai' 😆).


Também precisaremos da biblioteca tokenizer da OpenAI para saber a quantidade de tokens que enviaremos para o modelo.


E podemos instalar ambos executando…


 pip install openai pip install tiktoken


Agora, precisamos salvar a chave API em algum lugar antes de fazer a chamada para GPT-3.


Você pode salvá-lo como uma variável de ambiente e deixá-lo pronto para uso em um código como este.


 openai.api_key = os.environ["OPENAI"]


Ou se estiver usando o ambiente Colab, você pode fazer algo assim.


 import openai from getpass import getpass openai.api_key = getpass("Enter your key here: ")


E então, quando você executar esse comando, ele exibirá uma célula de entrada onde você pode colar a chave.


Agora, você pode confirmar se a chave funciona listando os modelos atualmente disponíveis com este trecho de código.


 models = openai.Model.list() for model in models['data]: print(model['root'])


Com nossa chave funcionando corretamente, podemos prosseguir e fazer a chamada para a API GPT-3.


Mas há algo importante que devemos levar em consideração primeiro. E isso está relacionado ao que mencionei anteriormente sobre “tokens”.


Como a ideia é passar a transcrição do podcast para o modelo de IA e receber um resumo dele, precisamos saber quantos “tokens” ele é capaz de aceitar.


A IA não conta palavras ou caracteres, mas usa tokens. É por isso que existe o conceito de “janela de contexto”.


Se excedermos o comprimento da janela de contexto, nossa transcrição poderá ficar truncada e obteremos um resumo dos dados incompletos. (Outra razão para escolher um episódio de podcast que não seja muito longo.)

Felizmente, existem 2 versões do modelo GPT-3. O tradicional e outro com janela de contexto estendida.


Se você verificar os documentos do OpenAI, poderá ver a diferença entre eles.



E é para isso que serve a biblioteca `tiktoken`. Isso nos ajudará a saber quantos tokens há na transcrição, assim saberemos qual modelo usar para o resumo.


Podemos fazer esse cálculo com o código a seguir.


 import tiktoken enc = tiktoken.encoding_for_model(“gpt-3.5-turbo”) print(“Number of tokens in the input ”, len(enc.encode(podcast_transcript)))


Se a quantidade de tokens no resultado for superior a 4.097, teremos que usar a versão ‘16k’ do modelo.



Depois de saber disso, podemos finalmente fazer a chamada para a API utilizando o modelo adequado para a situação.


Primeiro, vamos salvar o prompt que enviaremos ao modelo em uma variável. Você pode experimentar seu próprio prompt, mas aqui está um exemplo:


 prompt = """ You are an expert marketer responsible for the growth of several popular podcasts. You are now tasked with summarizing an episode in a way that is concise and covers the main points of the episode for others to understand. The transcript of the episode is provided below. """ request = prompt + podcast_transcript



Agora, vamos fazer a chamada para a API usando o código a seguir.


 chatOutput = openai.ChatCompletion.create(model="gpt-3.5-turbo-16k",    messages=[{"role": "system", "content": "You are a helpful assistant."},                        {"role": "user", "content": request}                        ]    )


E então vamos verificar a resposta da API.


 chatOutput.choices[0].messages.content


Aí está! Um resumo do episódio do podcast com base na transcrição que geramos usando o Whisper.


Você pode usar esse mesmo processo para extrair os principais destaques do episódio. É uma espécie de forma de fornecer ao ouvinte em potencial uma espiada na conversa.


A maneira de fazer isso é muito semelhante. A única parte que muda é o prompt que o modelo receberá. Em vez de pedir um resumo, você pode pedir para extrair os pontos mais importantes em formato de lista. Os resultados dependem da sua criatividade com as instruções.



Agora que sabemos que isso funciona, podemos colocar todo o código em uma função para executá-la localmente.


Então, vamos em frente e criar essa função.


 def transcribe_podcast(file_path):    print("Starting podcast transcription")    # Load the Whisper model    import os    import Whisper    print("Loading the Whisper model")    model = whisper.load_model("medium")    print(model.device)    # Do the transcription    print("Starting the transcription")    result = model.transcribe(file_path)       # Return the transcribed text     print("Transcription completed, returning results...")    return result


Você pode chamar essa função, enviando o caminho de um arquivo de áudio e obter uma transcrição em troca.


Aqui está um exemplo de como você faria isso.


 output = transcribe_podcast('path_to_audio_file')


E então dê uma olhada no conteúdo da transcrição.


 output[text][:1000]


Tudo bem, até agora tudo bem.


Agora que isso funciona localmente, seria ótimo carregá-lo na nuvem para que você pudesse mostrá-lo a outras pessoas e impressionar amigos e familiares com suas habilidades de codificação l33t h4xx0r. 😆


Mas não, na verdade, é uma boa opção implantá-lo em um serviço online para que outros possam experimentá-lo.


E faremos isso na parte 2. Criar uma função de nuvem que possa aceitar solicitações e fazer um frontend rápido para visualizar os resultados dessa função (como o resumo e os destaques dos episódios do podcast).



Continua…

Vamos deixar assim por enquanto.


Até agora você tem o aplicativo funcionando localmente e pode testá-lo com diferentes durações de episódios e ver o tempo médio que o Whisper leva para fazer a transcrição.


Obrigado por ler até aqui.


E espero vê-lo novamente na Parte 2.

Não se esqueça de me inscrever no Hackernoon para não perder os próximos artigos.