paint-brush
Uso de la API Whisper y GPT-3 de OpenAI para crear e implementar una aplicación de transcripción - Parte 1por@juanfrank77
7,393 lecturas
7,393 lecturas

Uso de la API Whisper y GPT-3 de OpenAI para crear e implementar una aplicación de transcripción - Parte 1

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

Demasiado Largo; Para Leer

El artículo describe el desarrollo de una aplicación de transcripción que utiliza Whisper de OpenAI y GPT-3.5 Turbo API. La parte 1 cubre la configuración, incluida la adquisición de claves API, la instalación de Whisper y la elección de desarrollo local o en línea. Explica cómo descargar archivos de audio para transcripción, demuestra la transcripción de audio con Whisper y detalla el proceso de generación de un resumen ejecutivo utilizando GPT-3. La parte 2 se centrará en implementar la aplicación en la nube.
featured image - Uso de la API Whisper y GPT-3 de OpenAI para crear e implementar una aplicación de transcripción - Parte 1
Juan F. Gonzalez HackerNoon profile picture
0-item


A medida que comenzó el revuelo en torno a las tecnologías de inteligencia artificial como chatbots, modelos de lenguaje grandes (LLM) y copilotos después del lanzamiento de ChatGPT, pronto aparecieron muchos más casos de uso.


No me refiero a los más comunes como asistentes de escritura, generadores de imágenes o chatbots entrenados con tus datos. Me refiero a casos de uso más especializados, como avatares parlantes realistas, editores de vídeo o síntesis de voz.


En este artículo, exploraremos uno de esos casos de uso: una aplicación de transcripción que puedes usar con podcasts o videos de YouTube . Será de gran valor si alguna vez quiso utilizar la API GPT-3 o ver una demostración de OpenAI Whisper en acción.


Para la parte 1 de este tutorial, repasaremos todo lo que necesitamos para configurar y comenzar el desarrollo de la aplicación.


Y luego, en la parte 2, cargaremos nuestro código de trabajo en la nube y conseguiremos que funcione una interfaz de usuario para que otros puedan ver los resultados e interactuar con la aplicación.


Ahora, abróchate el cinturón porque nos ensuciaremos las manos con algo de código Python para crear esto.




Preparando el escenario

Para construir esto, pasaremos por 3 actos.


  • En el primero veremos todo lo que necesitamos para prepararnos para el viaje que tenemos por delante.


  • En el segundo, construiremos un prototipo localmente y descubriremos qué herramientas pueden ayudarnos en el proceso.


  • Y en el último, subiremos todo lo que creamos a la nube para que otros también puedan probarlo.


¿Suena bien?


Muy bien, ¡vamos a por ello!





Acto 1: La configuración (Whisper y API GPT-3)

Lo primero es lo primero, una descripción general aproximada del proceso que seguiremos: extraer la información que queremos transcribir y luego enviársela a El susurro de OpenAI .


A partir de ahí, tomaremos el resultado y le realizaremos un posprocesamiento antes de mostrarlo en una aplicación de interfaz para que otros lo vean y puedan interactuar con él.


Este proceso requeriría un par de pasos adicionales si lo hiciéramos manualmente. Afortunadamente, OpenAI está disponible Acceso API para Whisper y ChatGPT .


Aquí tendrás que decidir qué camino tomar.


  • Construyendo esto localmente en su máquina (suponiendo que tenga Python 3 instalado) o,
  • Construyéndolo en línea usando un Cuaderno de Google Colab .


Elige tu camino primero y luego procederemos.


A continuación, necesitaremos una clave API de OpenAI para acceder al modelo GPT-3.5 Turbo (que es básicamente el modelo que impulsa ChatGPT).


Si no sabes cómo conseguir uno, sigue estos pasos:

  • Ve al sitio web de la plataforma OpenAI e inicia sesión o regístrate (según tu caso).


  • Luego, haga clic en el ícono de su perfil en la parte superior derecha para mostrar las opciones y seleccione "Ver claves API".



  • En esa página, verá una opción que dice "crear nueva clave secreta" en la sección de claves API.




  • Mostrará una ventana emergente donde se muestra su clave secreta. Guárdalo en un lugar seguro porque no lo volverás a ver nunca más.


Una vez que tengas esa clave, buscaremos la siguiente pieza del rompecabezas, Whisper.



Puede descargar e instalar la última versión de Whisper en su máquina ejecutando el siguiente comando:


 pip install -U openai-whisper


Alternativamente, puedes instalar la última confirmación de Git con sus dependencias usando este comando:


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


Esto le brinda más control sobre la versión que está instalando (y es el comando que querrá ejecutar si está intentando esto desde una computadora portátil Colab).


Nota: Necesitará tener instalado 'ffmpeg' si desea ejecutar Whisper desde la línea de comando.


Con Whisper instalado, todo lo que necesitamos ahora son los archivos reales que queremos transcribir. Podemos alimentarlo con varios tipos de archivos multimedia como 'mp3', 'mp4', 'mpeg', 'wav' y muchos más.


La única limitación aquí es el tamaño de los archivos, llevará mucho más tiempo con un vídeo de 10 minutos que con un podcast de 20 minutos.


Ahora, aquí está la siguiente bifurcación en el camino.



Tendrás que elegir si quieres transcribir vídeo o audio .


En aras de la simplicidad en este ejemplo, usaremos archivos de audio de podcasts.


Y aquí, la pregunta que podría tener en mente es “ ¿De dónde descargo episodios de podcast?” ”.


Hay 2 formas que yo sepa.


La primera es utilizar un sitio como ListenNotes, elegir cualquier podcast que desee y acceder a los episodios individuales.


Vale la pena señalar que tendrás que crear una cuenta para poder acceder a los episodios individuales y sus correspondientes archivos de audio.


Desde allí, tendrás que hacer clic en un botón con 3 puntos para abrir una pestaña "más" y luego verás la opción para descargar el audio.


Así es como se verá:





La segunda opción es utilizar Podchaser en su lugar. Seguirá un proceso similar para buscar un podcast, revisar la lista de episodios y elegir uno en particular.


Una vez que llegues a la página del episodio individual, verás una columna en el lado derecho que tiene el botón de reproducción y otras opciones debajo.


Si te desplazas hacia abajo, verás información sobre el podcast, opciones para compartir en redes sociales y una pequeña sección con la opción de descargar el archivo de audio.


Así es como se vería:






Elige la opción que prefieras y descarga un par de episodios de diferente duración para que puedas probar cómo funciona el proceso de transcripción.


Mi recomendación es que elijas episodios de menos de 30 minutos.


La razón de esto es que si elige uno más largo, Whisper puede tardar mucho en procesarlo y podría tener problemas de tiempo de espera (especialmente si está utilizando el entorno Colab).


Un episodio de 20 a 30 minutos puede tardar entre 4 y 8 minutos en transcribirse.


El principal obstáculo aquí es la duración del proceso de transcripción antes de obtener un resultado que podamos utilizar para seguir trabajando.


Ahora que hemos cumplido todos los requisitos y la configuración está completa.


Es hora de que pasemos a la siguiente parte del viaje.



Acto 2: El desarrollo (demostración de OpenAI Whisper)

Nos estamos adentrando en un territorio de programación más profundo.


Usaremos Whisper a través de Python ya que es más conveniente. Y no necesitamos hacer nada especial para la transcripción, simplemente pasar el archivo de audio al modelo y esperar la transcripción, eso es todo.


Así que repasemos ese proceso línea por línea.

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


Aquí cargamos la versión 'base' del modelo Whisper. Hay varias versiones (o "tamaños") que OpenAI lanzó y varían según la cantidad de parámetros, los recursos que consumen y el tiempo que lleva realizar la transcripción.


Aquí hay un gráfico útil como referencia.


Puedes seguir adelante y probarlos todos por tamaño (juego de palabras) si quieres.


Ten en cuenta que si utilizas un modelo más grande, necesitarás más recursos para ejecutarlo (como una GPU).


Entonces, si estás ejecutando esto en Colab, puedes usar este comando en su lugar.


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


Usted pasa el parámetro del dispositivo en el que desea que se ejecute.


Después de haber elegido el tamaño del modelo, puedes pasar el archivo de audio que deseas transcribir, así:


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


Luego puede imprimir el contenido para verificar que la transcripción funcionó. (Pero es posible que desee echar un vistazo solo a los primeros 1000 caracteres, aproximadamente, en lugar de imprimirlo todo).


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


Si eso resultó bien, ahora tiene los resultados del proceso de transcripción guardados en una variable. El que usaremos para el posprocesamiento.


Eso es bastante fácil. Pero supongamos que queremos tener una forma de saber de qué se habló en el podcast más allá de lo que encontraríamos en la descripción del episodio.


Podemos crear una función que tome la transcripción completa y nos brinde un "resumen ejecutivo". Un resumen que también podemos compartir con personas ocupadas que no tienen tiempo para repasarlo todo y ver si vale la pena o no.


Sigamos adelante y hagamos eso.


¿Alguna idea sobre lo que usaremos para hacer ese resumen?


Sugerencia: ya tenemos una clave API para ello.


Sí, lo tienes.


Usaremos el modelo "get-3.5-turbo" para crear este resumen proporcionándole la transcripción del podcast.



Podríamos hacer las llamadas directamente a la API, pero es mucho más conveniente usar el paquete OpenAI (que acertadamente se llama 'openai' 😆).


También necesitaremos la biblioteca tokenizer de OpenAI para saber la cantidad de tokens que enviaremos al modelo.


Y podemos instalar ambos ejecutando...


 pip install openai pip install tiktoken


Ahora, necesitamos guardar la clave API en algún lugar antes de realizar la llamada a GPT-3.


Puede guardarlo como una variable de entorno y luego tenerlo listo para usar en el código como este.


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


O si estás utilizando el entorno Colab, puedes hacer algo como esto.


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


Y luego, cuando ejecute ese comando, mostrará una celda de entrada donde podrá pegar la clave.


Ahora puede confirmar que la clave funciona enumerando los modelos actualmente disponibles con este código.


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


Con nuestra clave funcionando correctamente, podemos continuar y realizar la llamada a la API GPT-3.


Pero hay algo importante que debemos tener en cuenta primero. Y eso está relacionado con lo que mencioné anteriormente sobre los "tokens".


Dado que la idea es pasar la transcripción del podcast al modelo de IA y obtener un resumen del mismo, necesitamos saber cuántos "tokens" es capaz de aceptar.


La IA no cuenta palabras ni caracteres, sino que utiliza fichas. Por eso existe el concepto de “ventana de contexto”.


Si excedemos la longitud de la ventana de contexto, nuestra transcripción puede truncarse y obtendremos un resumen de los datos incompletos. (Otra razón para elegir un episodio de podcast que no sea demasiado largo).

Afortunadamente, existen 2 versiones del modelo GPT-3. El tradicional y otro con ventana de contexto ampliada.


Si consulta los documentos de OpenAI, podrá ver la diferencia entre ellos.



Y para eso está la biblioteca `tiktoken`. Nos ayudará a saber cuántos tokens hay en la transcripción, de esa manera sabremos qué modelo usar para el resumen.


Podemos hacer ese cálculo con el siguiente código.


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


Si la cantidad de tokens en el resultado es mayor que 4097, entonces tendremos que usar la versión '16k' del modelo.



Después de saber esto, finalmente podemos realizar la llamada a la API utilizando el modelo adecuado para la situación.


Primero, guardemos el mensaje que enviaremos al modelo en una variable. Puedes experimentar con tu propio mensaje, pero aquí tienes un ejemplo:


 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



Ahora, hagamos la llamada a la API usando el siguiente código.


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


Y luego verifiquemos la respuesta de la API.


 chatOutput.choices[0].messages.content


¡Ahí tienes! Un resumen del episodio del podcast basado en la transcripción que generamos usando Whisper.


Puedes utilizar este mismo proceso para extraer los aspectos más destacados del episodio. Algo así como una forma de brindarle al oyente potencial un vistazo a la conversación.


La forma de hacer esto es muy similar. La única parte que cambia es el mensaje que recibirá el modelo. En lugar de pedir un resumen, puedes pedirle que extraiga los puntos más importantes en formato de lista. Los resultados dependen de tu creatividad con las indicaciones.



Ahora que sabemos que esto funciona, podemos poner todo el código en una función para ejecutarlo localmente.


Entonces, sigamos adelante y creemos esa función.


 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


Puede llamar a esa función, enviarle la ruta de un archivo de audio y obtener una transcripción a cambio.


Aquí tienes un ejemplo de cómo harías eso.


 output = transcribe_podcast('path_to_audio_file')


Y luego eche un vistazo al contenido de la transcripción.


 output[text][:1000]


Muy bien, hasta ahora todo bien.


Ahora que esto funciona localmente, sería fantástico subirlo a la nube para poder mostrárselo a otras personas e impresionar a amigos y familiares con sus habilidades de codificación l33t h4xx0r. 😆


Pero en realidad no, es una buena opción implementarlo en un servicio en línea para que otros puedan probarlo.


Y lo haremos en la parte 2. Crear una función en la nube que pueda aceptar solicitudes y realizar una interfaz rápida para visualizar los resultados de esa función (como el resumen y los aspectos más destacados de los episodios del podcast).



Continuará…

Lo dejaremos así por ahora.


Hasta ahora, la aplicación funciona localmente y puedes probarla con episodios de diferentes duraciones y ver el tiempo promedio que toma Whisper para realizar la transcripción.


Gracias por leer hasta aquí.


Y espero verte de nuevo para la Parte 2.

No olvides suscribirte a Hackernoon para no perderte los próximos artículos.