Blog de Amazon Web Services (AWS)

Indexando audios con Amazon Transcribe, Amazon Comprehend y Amazon Elasticsearch Service

Por: Felipe Brito, Arquitectos de Soluciones AWS Brasil y
Eduardo Pereira, Arquitectos de Soluciones AWS Brasil

 

Introducción

En pleno 2021, donde las clases por video, podcasts y otros medios van en aumento y están siendo ampliamente utilizadas, impulsado además por la cuarentena y la necesidad de clases y trabajo remotos. En este contexto, es  evidente que el contenido generado va en crecimiento, lo que conlleva un desafío para mantenerse al día con este crecimiento. El mayor reto que encontramos en este escenario es precisamente la gestión de este material, donde tareas como la indexación, la identificación y la búsqueda aumentan en complejidad a medida que aumenta el contenido a gestionar. Estas tareas son laboriosas y requieren tiempo y esfuerzo si se completan manualmente.

En un entorno de AWS, existen diferentes servicios para facilitar la implementación de cada etapa. Por ejemplo, es posible utilizar Amazon Transcribe para automatizar la creación de texto a partir de archivos de audio, Amazon Comprenhend para el análisis e identificación de contexto, y Amazon Elasticsearch Service para la creación y búsqueda de índices. Sin embargo, sigue siendo necesaria la orquestación de estos componentes.

En este blog explicaremos cómo crear una solución automática de ingesta e indexación de archivos de audio, utilizando un workflow de orquestación basado en AWS Lambda. En la solución propuesta, el workflow comienza al momento de cargar un archivo, tras lo cual se realiza la transcripción, el análisis de lenguaje y la carga de datos. Como resultado, es posible crear índices y gráficos como base para soluciones de búsqueda y para facilitar el análisis de datos.

También demostraremos los pasos necesarios para crear índices y gráficos sobre los datos generados por el workflow. En particular, veremos cómo analizar los temas más comentados en los audios o realizar búsquedas de ciertos temas en los archivos, usando palabras clave y metadatos.

 

Solución

El siguiente diagrama ilustra los componentes utilizados en la solución propuesta:

 

 

Como se observa en el diagrama, la arquitectura consiste en utilizar los servicios Amazon Transcribe y Amazon Comprehend para transcribir y extraer metadatos de archivos insertados en un bucket de Amazon Simple Storage Service (Amazon S3). También utilizamos el servicio Amazon Elasticsearch Service, que permite crear un cluster totalmente administrado y automatiza todo el proceso de configuración de clusters y la implementación de Kibana, herramienta de exploración y visualización de datos de código abierto.

La solución sigue un modelo de arquitectura serverless y utiliza los siguientes servicios:

  • Amazon S3: Solución de almacenamiento de objetos que se utilizará para el almacenamiento de audio que se indexará y los archivos generados por el workflow.
  • Amazon Transcribe: Servicio que permite la conversión de archivos de audio a formato de texto.
  • Amazon Comprenhend: Servicio de procesamiento de lenguaje natural que realizará análisis sobre el texto generado por Amazon Transcribe y extraerá palabras clave, personas, fecha, lugares, entre otros metadatos.
  • AWS Lambda: Permite ejecutar código sin necesidad de aprovisionar o administrar servidores.
  • AWS Step Functions: Solución para gestionar workflow de transcripción y análisis de archivos de audio realizados por diferentes funciones Lambda.
  • Amazon Elasticsearch Service: Cluster administrado de Elasticsearch que almacena la información extraída y permite la creación de índices y visualizaciones.
  • Amazon Cognito: Autenticación y autorización de usuarios para Kibana en Elasticsearch.

 

Workflow de la aplicación

 

 

Tal como se indicó, debido a que el flujo involucra una serie de actividades, hemos optado por utilizar Step Functions y Lambda para organizar todo el proceso de ingesta e indexación de audio. El workflow se activa cuando subimos el archivo al bucket S3 de origen (explicado en detalle en el transcurso de esta publicación). Los pasos involucradas son:

1. startTranscribeJob: Inicia un trabajo asíncrono de transcripción con Transcribe;

2. getTranscribeJob: Comprueba si el trabajo de Transcribe sigue ejecutándose o ha finalizado (correctamente o no);

3. isTranscribeJobComplete?: Dirige el flujo de acuerdo con el estado final devuelto por el paso anterior. Si se ha completado correctamente, el proceso continúa con el siguiente paso; si se produce algún error, el workflow finaliza; y, finalmente, si el trabajo aún no ha finalizado, el flujo se dirige al paso waitTranscribeJobs, donde se esperan 60 segundos y el proceso se repite;

4. getTranscribeTranscript: Con el trabajo realizado correctamente, se obtiene la información devuelta por Transcribe, como el texto y la ubicación de los archivos;

5. startComprehendJob: Usando Comprenhend, inicia un trabajo asíncrono para extraer entidades y palabras clave de la transcripción;

6. getComprehendJobsAsync: Comprueba si el trabajo de Comprenhend sigue ejecutándose o ha finalizado (correctamente o no);

7. isComprehendJobsAsyncCompleted? : Dirige el flujo de acuerdo con el estado final devuelto por el paso anterior. Si es exitoso, el proceso continúa con el siguiente paso; si se produce algún error, el workflow finaliza; y, finalmente, si el trabajo aún no ha finalizado, el flujo se dirige al paso waitComprehendJobs, donde se esperan 60 segundos y el proceso se repite;

8. extractComprehendOutputFiles: Con el trabajo completado exitosamente, se toma la información devuelta por Comprenhend, incluyendo la ubicación de los archivos que presentan la entidad y las palabras clave;

9. loadES: La entidad y las palabras clave devueltas se insertan en el cluster de Elasticsearch

 

Implementando la solución

Para facilitar la replicación de la solución, se ha implementado un proyecto SAM . Todos los componentes destacados en la arquitectura y pasos del workflow se pueden implementar en una cuenta de AWS mediante la ejecución del siguiente repositorio: https://github.com/aws-samples/serverless-audio-indexing.

La raiz del proyecto incluye información sobre cómo ejecutarlo, así como requisitos previos.

 

Ejecutando el workflow

Con la solución implementada en la cuenta, finalmente podemos iniciar la ejecución del workflow. Basta con subir un archivo a uno de los buckets S3 creados por el proyecto en la sección anterior. Los pasos son:

  1. Inicie sesión en la consola de AWS y abra la consola de Amazon S3: https://console.aws.amazon.com/s3;
  2. En la página de lista de buckets, escoja la opción cuyo nombre contenga RawS3bucket;
  3. Suba al bucket un archivo en formato .mp3 o .mp4;
  4. Una vez finalizada la carga, se activa un evento de S3 y activa la máquina de estado que iniciará el workflow;
  5. A continuación, podemos pasar a la consola de Step Functions, seleccionar la máquina de estado creada por el proyecto y realizar un seguimiento de la ejecución del proyecto.

 

Creación de índices en Elasticsearch

Una vez que el workflow se ha completado correctamente y los datos se han ingestado en Elasticsearch por primera vez, es necesario crear los índices en el cluster. Para acceder a la URL de Kibana asociada con nuestro servidor, podemos ir a la consola de Amazon Elasticsearch Service, seleccionar el cluster creado por nuestro stack de AWS CloudFormation y utilizar la URL en el parámetro Kibana.

Al acceder a Kibana por primera vez, será necesario crear un usuario en el menú. Este usuario se creará en el pool de Cognito.

 

Creación de índices en Kibana (paso a paso)

  • Configuración del índice
    • Para crear el índice dentro de Kibana, vaya a la pestaña de la izquierda Stack Management, escoja el menú Index Patterns, y luego escoja Create index patterns:

 

 

    • Como ya existen datos dentro de Kibana, la herramienta indica los índices que pueden ser creados. En nuestro escenario, los índices sugeridos son entities y keyphrases.

 

    • En el paso 2, solo es necesario confirmar la creación del índice.

    • En el menú Index Patterns, se pueden ver los campos y sus tipos descritos que pueden ser usados más adelante. Una vez creado el índice, puede trabajar con los dashboards dentro de Kibana y también cambiar los tipos de datos de índice. Por ejemplo, es posible configurar un campo de índice con formato de número entero.

 

Visualizando y buscando documentos con Kibana

  • Tutorial de búsqueda simple
    • La pestaña Discover dentro de Kibana permite explorar los datos ingestados en el índice. Una vez ingresados los parámetros de búsqueda dentro de la barra de búsqueda, Kibana devolverá los elementos correspondientes dentro del índice.

    • Otra forma de interactuar con los datos de índice en Kibana es mediante SQL Workbench:

    • Se pueden crear visualizaciones y utilizarlas en dashboards, que se actualizan automáticamente a medida que se ingestan datos. Hay múltiples tipos de gráficos disponibles, como gráfico de área, mapa de calor, barras verticales y horizontales, etc.

    • En el siguiente ejemplo, se creó un gráfico circular para analizar y comparar los tipos de entidades que componen el índice:

 

Conclusion

En esta publicación hemos explorado las posibilidades que la nube y los servicios de AWS pueden aportar en términos de agilidad y facilidad. Utilizando servicios con un alto nivel de abstracción y que siguen el modelo serverless, implementamos una solución rápida y fácil que automatiza todo el proceso de ingesta e indexación de textos extraídos de archivos de audio.

Además de la transcripción de audio, también se crearon nuevos insights durante el workflow, por medio del uso de Amazon Comprenhend para extraer palabras clave y entidades relevantes. Cabe destacar que la solución se puede extender incorporando nuevos insights, como la extracción de sentimiento.

Las siguientes referencias fueron utilizadas durante la creación de esta publicación:

https://aws.amazon.com/blogs/machine-learning/discovering-and-indexing-podcast-episodes-using-amazon-transcribe-and-amazon-comprehend/

https://aws.amazon.com/blogs/machine-learning/building-an-nlp-powered-search-index-with-amazon-textract-and-amazon-comprehend/

 

Este artículo fue traducido del Blog de AWS en Portugués.

 

 


Sobre los autores

Eduardo Pereira es Arquitecto de Soluciones. Ayuda a los clientes empresariales durante su viaje hacia la nube de AWS. Tiene gran interés en el área de infraestructura, networking y serverless.

 

 

 

 

Felipe Brito es Arquitecto de Soluciones en AWS y guía a los clientes en las mejores prácticas de arquitectura en la nube. Tiene experiencia en proyectos de desarrollo de software y analytics.

 

 

 

 

Revisor

Rodrigo Alarcón es Arquitecto de Soluciones senior en AWS. En su rol, ayuda a empresas de distinto tamaño a generar valor para su negocio mediante tecnologías de computación en la nube. Sus intereses incluyen machine learning y ciberseguridad.