blackrock-cio-dijo-que-bitcoin-podría-alcanzar-nuevas-alturas.jpg

"Ok, Google": Speech to Text en Python con Deep Learning en 2 minutos

Nodo de origen: 1866555

Este artículo fue publicado como parte del Blogatón de ciencia de datos

Introducción

Es posible que esté utilizando con frecuencia Asistente de Google o de Apple Siri o incluso Alexa de Amazon para encontrar respuestas rápidas en la web o simplemente para ordenar algo. Estos asistentes de inteligencia artificial son bien conocidos por comprender nuestros comandos de voz y realizar las tareas deseadas. Responden rápidamente a los comandos de voz como "OK, Google. ¿Cuál es la capital de Islandia? " o “Oye, Siri. Enséñame la receta de lasaña ". y mostrar el resultado exacto. ¿Alguna vez te has preguntado cómo lo hacen realmente? Hoy, construiremos un sistema de reconocimiento de voz muy simple que toma nuestra voz como entrada y produce el texto correspondiente al escuchar la entrada.

voz en texto
1 imagen

TLDR ¡Muéstrame el código!

Si está impaciente como yo, este es prácticamente el código fuente completo que se puede copiar, pegar y ejecutar rápidamente a través de un archivo Python. Asegúrese de tener un archivo llamado 'my-audio.wav' como su entrada de voz. Además, asegúrese de tener todas las bibliotecas instaladas.

En la parte posterior del tutorial, discutiremos qué está haciendo cada una de las líneas.

¡Aquí está el código!

importar antorcha importar librosa importar numpy as np importar archivo de sonido como sf de scipy.io importar wavfile de IPython.display importar audio de transformadores importar Wav2Vec2ForCTC, Wav2Vec2Tokenizer
tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")
file_name = 'mi-audio.wav'
data = wavfile.read (nombre_archivo) framerate = data [0] sounddata = data [1] time = np.arange (0, len (sounddata)) / framerate input_audio, _ = librosa.load (file_name, sr = 16000) input_values = tokenizer (input_audio, return_tensors = "pt"). input_values ​​logits = model (input_values) .logits predicted_ids = torch.argmax (logits, dim = -1) transcription = tokenizer.batch_decode (predicted_ids) [0] print (transcripción)

Antes de que comencemos

Asegúrese de consultar el código fuente completo de este tutorial en este repositorio de Github.

Wav2Vec: un modelo revolucionario

wave2vec | dictado a texto
2 imagen

Usaremos onda2vec - un enfoque de reconocimiento de voz de última generación de Facebook.

Los investigadores de Facebook describen este enfoque como:

Hay miles de idiomas que se hablan en todo el mundo, muchos con varios dialectos diferentes, lo que presenta un gran desafío para crear tecnología de reconocimiento de voz de alta calidad. Simplemente, no es factible obtener recursos para cada dialecto y cada idioma en los muchos dominios posibles (habla leída, habla por teléfono, etc.). Nuestro nuevo modelo, wav2vec 2.0, utiliza la autosupervisión para superar los límites al aprender de datos de entrenamiento sin etiquetar para habilitar sistemas de reconocimiento de voz para muchos más idiomas, dialectos y dominios. Con solo una hora de datos de entrenamiento etiquetados, wav2vec 2.0 supera el estado de la técnica anterior en el subconjunto de 100 horas del punto de referencia LibriSpeech, utilizando 100 veces menos datos etiquetados.

¡Ahí tienes! Wav2Vec es un modelo auto-supervisado que tiene como objetivo crear un sistema de reconocimiento de voz para varios idiomas y dialectos. Con muy pocos datos de entrenamiento (aproximadamente 100 veces menos etiquetados), el modelo ha podido superar el punto de referencia anterior de última generación.

Este modelo, como BERT, se entrena mediante la predicción de unidades de voz para segmentos de audio enmascarados. El audio de voz, por otro lado, es una señal continua que captura muchas características de la grabación sin estar claramente segmentada en palabras u otras unidades. Wav2vec 2.0 aborda este problema aprendiendo unidades básicas de 25ms para aprender representaciones contextualizadas de alto nivel. Estas unidades luego se utilizan para caracterizar una amplia gama de grabaciones de audio habladas, mejorando la robustez de wav2vec. Con datos de entrenamiento 100 veces menos etiquetados, podemos crear algoritmos de reconocimiento de voz que superan los enfoques mejor semisupervisados. Gracias al aprendizaje auto supervisado, Wav2vec 2.0 es parte de los modelos de aprendizaje automático que dependen menos de la entrada etiquetada. La autosupervisión ha ayudado al avance de los sistemas de clasificación de imágenes, comprensión de video y comprensión de contenido. El algoritmo podría conducir a avances en la tecnología del habla para una amplia gama de idiomas, dialectos y dominios, así como para los sistemas actuales.

Elegir nuestro entorno y bibliotecas

Usaremos PyTorch, un marco de aprendizaje automático de código abierto para esta operación. Del mismo modo, usaremos Transformers, una biblioteca de procesamiento de lenguaje natural de última generación por Abrazando la cara.

A continuación se muestra la lista de todos los requisitos que quizás desee instalar a través de pip. Se recomienda que instale todos estos paquetes dentro de un ambiente virtual antes de continuar.

  1. Cuaderno Jupyter
  2. Torch
  3. librosa
  4. Numpy
  5. Archivo de sonido
  6. scipy
  7. IPython
  8. Transformers

Trabajando con el código

Abra su cuaderno Jupyter mientras activa el entorno virtual que contiene todas las bibliotecas esenciales mencionadas anteriormente.

Una vez que se cargue el cuaderno, cree un nuevo archivo y comience a importar las bibliotecas.

importar antorcha importar librosa importar numpy as np importar archivo de sonido como sf de scipy.io importar wavfile de IPython.display importar audio de transformadores importar Wav2Vec2ForCTC, Wav2Vec2Tokenizer

Ahora que hemos importado con éxito todas las bibliotecas, carguemos nuestro tokenizador y el modelo. Usaremos un modelo previamente entrenado para este ejemplo. Un modelo previamente entrenado es un modelo que ya ha sido entrenado por otra persona y que podemos reutilizar en nuestro sistema. El modelo que vamos a importar es entrenado por Facebook.

tokenizer = Wav2Vec2Tokenizer.from_pretrained("facebook/wav2vec2-base-960h")
model = Wav2Vec2ForCTC.from_pretrained("facebook/wav2vec2-base-960h")

Es posible que la descarga lleve algún tiempo.

Una vez hecho esto, puede grabar su voz y guardar el archivo wav justo al lado del archivo en el que está escribiendo su código. Puede nombrar su audio como “my-audio.wav”.

nombre_archivo = 'my-audio.wav' Audio (nombre_archivo)

Con este código, puede reproducir su audio en el cuaderno Jupyter.

A continuación: cargaremos nuestro archivo de audio y comprobaremos nuestra frecuencia de muestreo y el tiempo total.

data = wavfile.read (file_name) framerate = data [0] sounddata = data [1] time = np.arange (0, len (sounddata)) / framerate print ('Tasa de muestreo:', framerate, 'Hz')

El resultado de este ejemplo variará del suyo, ya que es posible que esté utilizando su propio audio.

Frecuencia de muestreo: 44100 Hz

Esto está impreso para mi audio de muestra.

Tenemos que convertir la frecuencia de muestreo a 16000 Hz ya que el modelo de Facebook acepta la frecuencia de muestreo en este rango. Tomaremos la ayuda de Librosa, una biblioteca que habíamos instalado anteriormente.

input_audio, _ = librosa.load (nombre_archivo, sr = 16000)

Finalmente, el audio de entrada se envía al tokenizador que luego es procesado por el modelo. El resultado final se almacenará en la variable de transcripción.

input_values ​​= tokenizer (input_audio, return_tensors = "pt"). input_values ​​logits = model (input_values) .logits predicted_ids = torch.argmax (logits, dim = -1) transcription = tokenizer.batch_decode (predicted_ids) [0] print (transcripción)

La salida:

'EL APRENDIZAJE PROFUNDO ES INCREÍBLE'

Bueno, eso es exactamente lo que había grabado en el archivo my-audio.wav.

Continúe e intente grabar su propio discurso y vuelva a ejecutar el último bloque de código. Debería funcionar en segundos.

Sobre el Autor:

¡Hola! Mi nombre es Akash y he trabajado como desarrollador de Python durante más de 4 años. En el transcurso de mi carrera, comencé como desarrollador junior de Python en el sitio del portal de empleo más grande de Nepal, merojob. Más tarde, participé en ciencia de datos e investigación en la primera empresa de viajes compartidos de Nepal, Tocar la flauta. Actualmente, he participado activamente en la ciencia de datos y en el desarrollo web con Django.

Puedes encontrar mis otros proyectos en:

https://github.com/akashadhikari

Conectame en LinkedIn

https://www.linkedin.com/in/akashadh/

Email: GME@dhr-rgv.com | GME@dhr-rgv.com

Sitio web (trabajando en el blog de ciencia de datos): https://akashadhikari.github.io/

Fuentes de imagen:

Imagen 1 - https://www.bullfrag.com/how-to-program-google-assistant-commands-type-ok-google-turn-off-the-lights-in-10-minutes/

Imagen 2 - https://www.bullfrag.com/how-to-program-google-assistant-commands-type-ok-google-turn-off-the-lights-in-10-minutes/

Notas finales:

¡Gracias por leer!

Espero que hayas disfrutado leyendo el artículo. Si lo encontró útil, compártelo con sus amigos en las redes sociales también. Para cualquier consulta, sugerencia, crítica constructiva o cualquier otra discusión, por favor escríbame aquí en los comentarios o puede comunicarse conmigo directamente por correo electrónico.

Fuente: https://www.analyticsvidhya.com/blog/2021/09/ok-google-speech-to-text-in-python-with-deep-learning-in-2-minutes/

Sello de tiempo:

Mas de Analítica Vidhya