Logotipo de Zephyrnet

Aplicar clasificación de voz en un flujo de contacto de telemedicina de Amazon Connect

Fecha:

Dada la creciente demanda de detección rápida y eficaz de COVID-19, los clientes están explorando el uso de datos de sonido respiratorio, como toser, respirar y contar, para diagnosticar automáticamente COVID-19 según los modelos de aprendizaje automático (ML). Los investigadores de la Universidad de Cambridge construyeron Aplicación de sonido COVID-19 y demostró que un clasificador ML binario simple puede Clasificar toses sanas y COVID-19 con más del 80% del área bajo la curva (AUC) para todas las tareas.. Los investigadores del Instituto de Tecnología de Massachusetts (MIT) publicaron un modelo de voz abierta, y ellos El clasificador binario basado en la red neuronal convolucional (CNN) logra una sensibilidad COVID-19 del 98.5% con una especificidad del 94.2% (AUC 0.97). La Universidad Carnegie Mellon también construyó un Detector de voz COVID desarrollar un sistema de inteligencia artificial automatizado para diagnosticar una infección por COVID-19 basado en la voz humana. Los prometedores resultados de estos estudios preliminares basados ​​en señales de audio de colaboración colectiva muestran el poder de la IA en la industria médica para el diagnóstico y la detección de enfermedades.

Aunque la investigación ha mostrado ser muy prometedora, todavía es difícil crear una solución escalable que aproveche estos modelos prometedores. En esta publicación, demostramos un flujo de trabajo de aplicación de centro de llamadas inteligente que integra un modelo de clasificación de voz para detectar infecciones por COVID-19 u otros tipos de enfermedades respiratorias en personas que llaman al centro de llamadas. Con el fin de crear un flujo de trabajo de un extremo a otro, entrenamos el modelo en el código abierto Datos de Coswara, que se basa en una variedad de sonidos como la respiración profunda o superficial, la tos y el conteo para distinguir los sonidos saludables de los no saludables. Puede reemplazar este modelo y los datos de entrenamiento con cualquier otro modelo o conjunto de datos para lograr el nivel de rendimiento que se demuestra en los artículos de investigación.

Resumen de la solución

Esta solución utiliza Amazon conectar, un flujo de contacto del centro de contacto en la nube omnicanal fácil de usar para hacer inferencias en tiempo real a un modelo de ML entrenado e implementado usando Amazon SageMaker. Las grabaciones de audio están etiquetadas como saludables (negativas) y no saludables (positivas), es decir, una infección por COVID-19 y otras enfermedades respiratorias. Porque el La distribución de etiquetas positivas y negativas está muy desequilibrada., usamos el técnica de sobremuestreo de la biblioteca de aprendizaje desequilibrada de Python para mejorar la relación. Usamos el Modelo de clasificación acústica PyTorch, que se basa en Red neuronal convolucional profunda (CNN) para esta predicción COVID basada en audio. El modelo de CNN entrenado se implementa en un punto final de inferencia de SageMaker. los AWS Lambda La función activada por el flujo de contacto de Amazon Connect se utiliza para hacer inferencias en tiempo real basadas en las transmisiones de audio de una grabación de llamadas telefónicas de Amazon Connect en Transmisiones de video de Amazon Kinesis.

El siguiente es el diagrama de arquitectura para integrar la inferencia ML en línea en un flujo de contacto de telemedicina a través de Amazon Connect.

El siguiente es el diagrama de arquitectura para integrar la inferencia ML en línea en un flujo de contacto de telemedicina a través de Amazon Connect.

Entrenamiento e implementación de un modelo de clasificación de voz usando SageMaker

Primero creamos una instancia de notebook SageMaker, en la que construimos un modelo de aprendizaje profundo de clasificación de voz para predecir la probabilidad de enfermedades respiratorias usando el código abierto Conjunto de datos de Coswara. Para implementar el Formación en la nube de AWS pila para la instancia de notebook, elija Pila de lanzamiento:

No dude en cambiar el tipo de instancia del cuaderno si es necesario. La implementación también clona los siguientes dos repositorios de GitHub:

Ir al cuaderno de Jupyter coswara-audio-classification.ipynb bajo el applying-voice-classification-in-amazon-connect-contact-flow/sagemaker-voice-classification/notebook carpeta.

El cuaderno le guía por las siguientes tareas:

El cuaderno le guía por las siguientes tareas:

  1. Procese previamente los datos de Coswara, incluida la descompresión de archivos y la generación de archivos CSV de metadatos para cada tipo de grabación de audio.
  2. Cree y cargue la imagen del contenedor de Docker para los trabajos de inferencia y entrenamiento de SageMaker Registro de contenedores elásticos de Amazon (Amazon ECR).
  3. Cargue los datos de Coswara en un Servicio de almacenamiento simple de Amazon (Amazon S3) para el trabajo de formación de SageMaker.
  4. Entrene un estimador Pytorch CNN para la clasificación de voz dados los hiperparámetros de muestra.
  5. Cree un trabajo de optimización de hiperparámetros (HPO) (opcional).
  6. Implemente el estimador de PyTorch entrenado en el punto final de inferencia de SageMaker.
  7. Pruebe la predicción por lotes e invoque el punto final.

Porque este conjunto de datos es muy desequilibrado, etiquetamos las muestras sanas como negativas y todas las muestras no sanas como positivas, y sobremuestreamos las positivas utilizando biblioteca de aprendizaje desequilibrado existentes train.py archivo en la carpeta del cuaderno:

import torch
from imblearn.over_sampling import RandomOverSampler
ros = RandomOverSampler(random_state=0)
for data, target in data_loader: data_resampled, target_resampled = ros.fit_resample(np.squeeze(data), target) data = torch.from_numpy(data_resampled) data = data.unsqueeze_(-2) target = torch.tensor(target_resampled)

En el código anterior, los datos y el objetivo son tensores de antorcha devueltos por el getitem función definida en el CoswareDataset clase en el coswara_dataset.py expediente. El enfoque de sobremuestreo mejoró el rendimiento de la predicción en aproximadamente un 40%. Implementamos una CNN muy profunda para la clasificación de voz en el inference.py archivo con el número predeterminado de clases como dos, y aplicó diferentes métricas en la biblioteca de Python de Scikit-learn para evaluar el rendimiento de la predicción:

from sklearn.metrics import precision_score, recall_score, accuracy_score, f1_score, fbeta_score, roc_auc_score
accuracy = accuracy_score(actuals, predictions)
rocauc = roc_auc_score(actuals, np.exp(prediction_probs))
precision = precision_score(actuals, predictions, average='weighted')
recall = recall_score(actuals, predictions, average='weighted')
f1 = f1_score(actuals, predictions, average='weighted')
f2 = fbeta_score(actuals, predictions, average='weighted', beta=0.5)

El trabajo de ajuste intenta maximizar la Puntuación F-beta, que es la media armónica ponderada de precisión y recuperación. Cuando esté satisfecho con el rendimiento de predicción del trabajo de entrenamiento, puede implementar un punto final de inferencia de SageMaker:

from sagemaker.pytorch import PyTorchModel pytorch_model = PyTorchModel(model_data=model_location, role=role, entry_point='inference.py', source_dir='./', py_version='py3', framework_version='1.6.0', )
predictor = pytorch_model.deploy(initial_instance_count=1, instance_type='ml.c5.2xlarge', wait=True)

Después de implementar el estimador para la predicción en línea, tome nota del nombre del extremo de inferencia, que utilizará en el siguiente paso.

Después de implementar el estimador para la predicción en línea, tome nota del nombre del extremo de inferencia, que utilizará en el siguiente paso.

Es de destacar que el punto final de inferencia puede ser invocado por dos tipos de cuerpo de solicitud definidos en el inference.py archivo:

  • Una cadena de texto para el objeto S3 del archivo WAV de grabación de audio
  • Una matriz NumPy en escabeche

Ver el siguiente código:

def input_fn(request_body, request_content_type): if request_content_type == 'text/csv': new_sr=8000 audio_len=20 sampling_ratio=5 tmp=request_body[5:] bucket=tmp[:tmp.index('/')] print("bucket: {}".format(bucket)) obj=tmp[tmp.index('/')+1:] print("object: {}".format(obj)) s3.download_file(bucket, obj, '/audioinput.wav') print("audio input file size: {}".format(os.path.getsize('/audioinput.wav'))) waveform, sample_rate = torchaudio.load('/audioinput.wav') waveform = torchaudio.transforms.Resample(sample_rate, new_sr)(waveform[0, :].view(1, -1)) const_len = new_sr * audio_len tempData = torch.zeros([1, const_len]) if waveform.shape[1] < const_len: tempData[0, : waveform.shape[1]] = waveform[:] else: tempData[0, :] = waveform[0, :const_len] sound = tempData tempData = torch.zeros([1, const_len]) if sound.shape[1] < const_len: tempData[0, : sound.shape[1]] = sound[:] else: tempData[0, :] = sound[0, :const_len] sound = tempData new_const_len = const_len // sampling_ratio soundFormatted = torch.zeros([1, 1, new_const_len]) soundFormatted[0, 0, :] = sound[0, ::5] return soundFormatted elif request_content_type in ['application/x-npy', 'application/python-pickle']: return torch.tensor(np.load(BytesIO(request_body), allow_pickle=True)) else: print("unknown request content type: {}".format(request_content_type)) return request_body

El resultado es la probabilidad de la clase positiva de 0 a 1, lo que indica la probabilidad de que la voz no sea saludable en este caso de uso, definido en inference.py también:

def predict_fn(input_data, model): device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.to(device) model.eval() with torch.no_grad(): output = model(input_data.to(device)) output = output.permute(1, 0, 2)[0] pred_prob = np.exp( output.cpu().detach().numpy()[:,1] ) return pred_prob[0]

Implementación de una plantilla de CloudFormation para funciones Lambda para inferencia de transmisión de audio

Puede implementar la función Lambda con la siguiente implementación de un clic de la pila de CloudFormation en el us-east-1 Región:

Debe completar el nombre del depósito de S3 para la grabación de audio y el punto final de inferencia de SageMaker como parámetros.

Debe completar el nombre del depósito de S3 para la grabación de audio y el punto final de inferencia de SageMaker como parámetros.

Si desea implementar esta pila en regiones de AWS que no sean us-east-1, o si desea cambiar las funciones Lambda, vaya a la conectar-audio-stream-solution carpeta y siga los pasos para crear e implementar el Modelo de aplicación sin servidor (AWS SAM) pila. Tome nota de los resultados de la pila de CloudFormation para los ARN de la función Lambda, que usará en el siguiente paso.

Tome nota de las salidas de la pila de CloudFormation para los ARN de la función Lambda, que usará en el siguiente paso.

Configuración de una respuesta de voz interactiva con Amazon Connect

Usamos un flujo de contacto de Amazon Connect para activar las funciones Lambda, creadas en el paso anterior, para procesar el grabación de audio capturada en Kinesis Video Streams, asumiendo que tiene una instancia de Amazon Connect lista para usar. Para obtener instrucciones sobre cómo configurar una instancia de Amazon Connect, consulte Cree una instancia de Amazon Connect. También necesitas habilitar la transmisión de audio en vivo para tu instancia. Su instancia debe crearse en la misma región de AWS que su pila de CloudFormation anterior, porque su transmisión de video debe crearse en la misma región para que las funciones Lambda consuman.

Puede crear un nuevo flujo de contacto entrante importando el archivo de configuración de flujo. Debe reclamar un número de teléfono y asociarlo con el flujo de contacto recién creado. Hay dos funciones Lambda que se configuran aquí: los ARN de ContactFlowlambdaInitArn y ContactFlowlambdaTriggerArn, ubicado en el Salidas pestaña de la pila de CloudFormation que implementó en el paso anterior.

Puede crear un nuevo flujo de contacto entrante importando el archivo de configuración de flujo.

Después de cambiar los ARN para las funciones de Lambda, guarde y publique el flujo de contactos. Ahora está listo para probarlo llamando al número de teléfono asociado con este flujo de contacto.

Limpiar

Para evitar cargos futuros inesperados, limpie sus recursos:

  1. Elimine el punto final de inferencia de SageMaker.
  2. Vaciar y eliminar el depósito de S3 DefaultS3Bucket.
  3. Elimine la pila de CloudFormation para las instancias de notebook de SageMaker y las funciones Lambda que usa Amazon Connect.

Referencias

Esta solución se inspiró y se basó en los siguientes repositorios de GitHub:

Conclusión

En esta publicación, demostramos cómo predecir la probabilidad de COVID-19 u otras enfermedades respiratorias basándonos solo en la clasificación de la voz. Para mejorar aún más el rendimiento de la predicción de AA, puede incorporar otra información relacionada en el modelo, como la edad, el sexo o los síntomas existentes. El aumento de datos de audio más las funciones hechas a mano pueden ayudar a producir mejores resultados de predicción, según estudios existentes. Puede utilizar la predicción de diagnóstico basada en audio en un flujo de contacto de Amazon Connect para clasificar el grupo objetivo de llamadas entrantes y escalar a un médico para realizar un seguimiento si es necesario. Los agentes del centro de llamadas pueden utilizar la inteligencia proporcionada por la clasificación acústica junto con Lente de contacto para Amazon Connect, que proporciona una transcripción paso a paso, alertas en tiempo real, categorización automatizada de llamadas basada en palabras clave y frases, análisis de sentimientos, detección de problemas (la razón por la que el cliente se comunicó con el centro de llamadas) y redacción de datos confidenciales.

Para encontrar los últimos desarrollos de esta solución, consulte el Repositorio GitHub.


Acerca de los autores

Pandilla Fu es arquitecto senior de soluciones sanitarias en AWS. Tiene un doctorado en Ciencias Farmacéuticas de la Universidad de Mississippi y tiene más de 10 años de experiencia en investigación biomédica y en tecnología. Le apasiona la tecnología y el impacto que puede tener en la atención médica.

Ujjwal ratán es Especialista Principal en Aprendizaje Automático en el equipo Global Healthcare and Life Sciences en Amazon Web Services. Trabaja en la aplicación del aprendizaje automático y el aprendizaje profundo a problemas de la industria del mundo real, como imágenes médicas, texto clínico no estructurado, genómica, medicina de precisión, ensayos clínicos y mejora de la calidad de la atención. Tiene experiencia en escalar el aprendizaje automático y los algoritmos de aprendizaje profundo en la nube de AWS para el entrenamiento y la inferencia acelerados. En su tiempo libre, le gusta escuchar (y tocar) música y hacer viajes por carretera no planificados con su familia.

Wei Yih YapWei Yih Yap es un científico de datos sénior de AWS Professional Services, donde trabaja con los clientes para abordar los desafíos comerciales mediante el aprendizaje automático en AWS. En su tiempo libre, disfruta pasar tiempo con su familia.

Fuente: https://aws.amazon.com/blogs/machine-learning/applying-voice-classification-in-an-amazon-connect-telemedicine-contact-flow/

punto_img

Información más reciente

punto_img