Blog de Amazon Web Services (AWS)

Asistentes de voz como solución automatizada para el personal medico

Durante las últimas décadas, el cuidado de la salud ha sido uno de los desafíos de la industria así como proporcionar herramientas a los médicos para el desarrollo óptimo de sus actividades. Aunque la interacción y el diagnóstico del paciente son aspectos críticos del trabajo de un médico, las tareas administrativas son igualmente agotadoras y requieren mucho tiempo. Los médicos y los clínicos deben mantener un registro médico detallado de cada paciente. Ese registro se almacena en el sistema de registro de salud electrónico (EHR) en una base de datos que contiene los registros de cada paciente en el hospital. Para mantener estos registros, los médicos a menudo pasan varias horas cada día ingresando datos manualmente en el sistema EHR, lo que resulta en una menor productividad y un mayor desgaste.

En esta publicación, aprenderá la importancia de los asistentes de voz y cómo pueden automatizar las tareas administrativas para los médicos. También explicamos cómo crear un asistente de voz personalizado con PocketSphinx y Amazon Lex.

Asistentes de voz como solución automatizada para el  personal médico

Los asistentes de voz ahora están comenzando a automatizar partes vitales y actividades manuales de la atención al paciente. Pueden ser una herramienta poderosa para ayudar a los médicos a ahorrar tiempo y dedicarse a concentrar en el paciente en comparación con los requisitos administrativos de la documentación clínica.

Hoy en día, los asistentes de voz están cada vez más disponibles a medida que avanzan los modelos de procesamiento del lenguaje natural, disminuyendo los errores y el desarrollo se vuelve más accesible para el desarrollador promedio. Sin embargo, la mayoría de los dispositivos son limitados, por lo que los desarrolladores a menudo deben crear sus propias versiones personalizadas.

Como Arquitectos de soluciones que trabajamos en la industria de la salud, observamos una tendencia creciente hacia la adopción de asistentes de voz en hospitales y habitaciones de pacientes.

En esta publicación, aprenderá a crear un asistente de voz personalizado con PocketSphinx y Amazon Lex. Con nuestros servicios administrados y fáciles de configurar, los desarrolladores e innovadores pueden comenzar a desarrollar los dispositivos del futuro.

Arquitectura de la solución de asistente de voz

El siguiente diagrama de arquitectura presenta una descripción general a alto nivel de nuestra solución.

En nuestra solución, primero interactuamos con un script de asistente de voz que se ejecuta en su computadora. Una vez que se reconoce la palabra de activación, el asistente de voz comienza a grabar lo que dice y envía el audio a Amazon Lex, donde utiliza una función AWS Lambda para recuperar datos de pacientes ficticios almacenados en Amazon DynamoDB. Los datos del sensor son generados por otro script de Python, generate_data.py, que también se ejecuta en su computadora.

Los tipos de sensores incluyen presión arterial, glucosa en sangre, temperatura corporal, frecuencia respiratoria y cardíaca. Amazon Lex envía un mensaje de voz y usamos Amazon Polly, un servicio que convierte el texto en un habla realista para crear una experiencia coherente.

Ahora está listo para crear los componentes necesarios para esta solución.

Implemente los recursos de su solución

Puede encontrar todos los archivos de nuestra solución de asistente de voz personalizada en nuestro Repositorio de GitHub. Descargue todos los archivos, incluidos los archivos de modelo de PocketSphinx descargados de su repositorio.

Debe implementar la tabla DynamoDB y la función Lambda directamente eligiendo Launch Stack.

AWS CloudFormation tarda unos minutos en completarse. Cuando esté completo, puede ir a la pestaña de Recursos para ver la función Lambda y la tabla de DynamoDB creada. Tenga en cuenta el nombre de la función Lambda porque la referenciaremos más adelante al crear el bot de Amazon Lex.

Crear el bot en Amazon Lex

Cuando el stack de CloudFormation esté completo, estamos listos para crear el bot de Amazon Lex. Para esta publicación, usamos la consola V2 más nueva.

  1. En la consola de Amazon Lex, elija Switch to the new Lex V2 console.
  2. En el panel de navegación, elija Bots.
  3. Elija Create a blank bot.
  4. Para el nombre del bot, ingrese Healthbot.
  5. En Description, ingrese una descripción opcional.
  6. Para Runtime role, seleccione Create a role with basic Amazon Lex permissions.
  7. En la sección Children’s Online Privacy Protection Act (COPPA) , seleccione No.
  8. Mantenga la configuración del Idle session timeout en su valor predeterminado (5 minutos).
  9. Elija Next.

  • ParaVoice interaction, elija la voz que desea usar, en este caso utilizaremos Spanish (US)
  • En el apartado de Voice Interaction seleccionar Lupe en Neural text-to-speech voices
  • Elija

Cree slot types, intents, y utterances personalizados.

Ahora creamos un slot types personalizados para los sensores, nuestros intents y simple utterances.

  1. En la página Slot types, elija Add slot type.
  2. Elija Add blank slot type.
  3. Para el Slot type name, ingrese TipoDeSensor.
  4. Elija Add.
  5. En el Slot value resolution, seleccione Restrict to slot values.

  1. Agregue los siguientes valores:
    1. Presion arterial
    2. Glucosa en sangre
    3. Temperatura corporal
    4. Ritmo cardiaco
    5. Frecuencia respiratoria

7. SeleccioneSave slot type.

En la página Intents, tenemos dos Intents creados automáticamente para nosotros. Mantenemos FallbackIntent como predeterminado.

  1. Choose New Intent.
  2. For Intent name, change to DatosDelPaciente.

  1. En la sección de Sample utterances, agregue algunas frases para invocar esta intención. Proporcionamos algunos ejemplos en la siguiente captura de pantalla, pero también puede agregar los suyos..

  1. En la sección Slots seleccionar Add slot, para Name, ingresarPatientId.
  2. ParaSlot type¸elegir AlphaNumeric.
  3. ParaPrompts, ingresar ¿Cuál es el ID del Paciente?
  4. Este mensaje no es realmente importante porque estamos usando Lambda para el cumplimiento.

  1. Agregue otro slot llamado SensorType.
  2. ParaSlot type, elija TipoDeSensor (slot creado en pasos previos).
  3. ParaPrompts, ingrese ¿Qué te gustaría saber?
  4. SeleccioneAdd
  5. En la sección de Code hooks, seleccioneUse a Lambda function for initialization and validation.

  1. Dentro del apartado de Fulfillment seleccionar Advanced Options
  2. En Fulfillment Lambda code hook seleccionar Use a Lambda funciont for fulfillment
  3. Seleccionar Update options.

  1. ElijaSave intent.
  2. ElijaBuild.

La compilación puede tardar unos minutos en completarse, veras una confirmación como la siguiente.

Crea una nueva versión

Ahora creamos una nueva versión con nuestros nuevos intents. No podemos utilizar la versión preliminar en producción.

  1. Cuando la compilación esté completa, en la página de Bot versions, elija Create.
  2. Mantenga todas las configuraciones en sus valores predeterminados.
  3. Elija Create.
  4. Ahora debería ver la Versión 3 en la página Bot version


Crea un alias

Ahora creamos un Alias para implementar

  1. En Deployment en el panel de navegación, elija Aliases.
  2. Elija Create alias.
  3. Para Alias name¸ ingrese prod.
  4. Asocie este alias con la versión más reciente (Version 4).

  1. Elija Create.
  2. En la página Aliases, elija el alias que acaba de crear.
  3. En Idiomas, elija Spanish (US).

  1. Cuando seleccione el idioma aparecerá el siguiente cuadro

  1. En Source, elija la función Lambda que genero durante el Cloudformation.
  2. Para Lambda function versión or alias, elija $LATEST.

11. Seleccione

Ahora tiene un Amazon Lex Bot en funcionamiento con el que puede comenzar a probar. Antes de continuar, asegúrese de guardar el ID del bot y el ID de alias.

El ID del bot se encuentra en la página de Bot details.

El ID del alias se encuentra en la pagina de Aliases.

Debe reemplazar estos valores en el script del asistente de voz voice_assistant.py  más adelante.

En las siguientes secciones, explicamos cómo usar PocketSphinx para detectar una palabra de activación personalizada y cómo comenzar a usar la solución.

Utilice PocketSphinx para el reconocimiento de palabras de activación

El primer paso de nuestra solución consiste en invocar una palabra de activación personalizada antes de comenzar a escuchar sus comandos para enviarlos a Amazon Lex. Los asistentes de voz necesitan un programa siempre activo, de alta precisión y de tamaño reducido para escuchar constantemente una palabra de activación. Por lo general, esto se debe a que están alojados en un dispositivo pequeño de batería baja, como un Amazon Echo.

Para el reconocimiento de palabras de activación, utilizamos PocketSphinx, un motor de reconocimiento de voz continuo de código abierto creado por la Universidad Carnegie Mellon, para procesar cada fragmento de audio. Decidimos utilizar PocketSphinx porque proporciona un sistema de despertador gratuito, flexible y preciso con un buen rendimiento.

Crea tu palabra de activación personalizada

Construir el modelo de lenguaje usando PocketSphinx es simple. El primer paso es crear un corpus. Puede usar el modelo incluido que está previamente entrenado con “Amazon“, por lo que si no desea entrenar su propia palabra de activación, puede pasar al siguiente paso. Sin embargo, le recomendamos que pruebe la creación de su propia palabra de activación personalizada para usar con el guión del asistente de voz.

El corpus es una lista de oraciones que usas para entrenar el modelo de lenguaje. Puede encontrar nuestro archivo corpus prediseñado en el archivo example_corpus.txt que descargó anteriormente.

  1. Modifique el archivo de corpus según la frase clave o la palabra de activación que desee utilizar y luego vaya a la página LMTool.
  2. Elija Browse y seleccione el archivo example_ctxt que creó
  3. Elija COMPILE KNOWLEDGE BASE.
  4. Descargue los archivos que creó la herramienta y reemplace los archivos de corpus de ejemplo que descargó anteriormente.
  5. Reemplace las variables KEY_PHRASE y DICT en la secuencia de comandos de Python para reflejar los nuevos archivos y la palabra de activación.

  1. Actualice el bot_id y el bot_alias_id con los valores que guardó anteriormente en la secuencia de comandos del asistente de voz.

Configure el script del asistente de voz en su computadora

En el repositorio de GitHub, puede descargar los dos scripts de Python que usa para esta publicación: generate_data.py y voice_assistant.py.

Debe completar algunos pasos antes de poder ejecutar el script, es decir, instalar la versión y las bibliotecas correctas de Python.

PocketSphinx admite hasta Python 3.6. Si tiene otra versión de Python instalada, puede usar pyenv para cambiar entre versiones de Python.

Asegúrate de usar la ultima versión usando pip install boto3==<version>.

Instalar AWS Command Line Interface (AWS CLI) y  configurar su perfil. Si aún no tiene un usuario de AWS Identity and Access Management (IAM), puede crear uno. Asegúrese de establecer la Región en la misma Región en la que creó sus recursos anteriormente.

Inicie su asistente de voz

Ahora que tenemos todo configurado, abra una terminal en su computadora y ejecute generate_data.py.

Asegúrese de ejecutarlo durante al menos un minuto para que la tabla en DynamoDB esté correctamente poblada. Nuestro asistente de voz solo consulta los datos más recientes insertados en la tabla, por lo que puede detenerlo después de que se ejecute una vez. Los ID de paciente generados están entre 0 y 99.

Consulte la tabla para asegurarse de que se estén generando datos.

Ahora puedes ejecutar voice_assistant.py.

Tu computadora está escuchando la palabra de activación que estableciste anteriormente (o la “Hola Amazon” predeterminada) y no comienza a grabar hasta que detecta la palabra de activación. La detección de la palabra de activación se procesa mediante el decodificador de PocketSphinx. El decodificador busca continuamente KEYPHRASE  o WakeWord  en el canal de audio.

Para iniciar la conversación, diga el enunciado que estableció en su intención anteriormente. La siguiente es una conversación de muestra:

Usted: Hola Amazon

Usted: Quiero obtener datos de pacientes.

Lex: ¿Cuál es el ID del paciente sobre el que desea obtener información?

Usted: 45

Lex: ¿Qué le gustaría saber sobre Esteban Paul?

Usted: presion arterial

Lex: Presion arterial de Esteban Paul es 186 sobre 134. Gracias

Conclusión

¡Felicidades! Ha configurado un asistente de voz para el cuidado de la salud que puede servir como un bot de recuperación de información del paciente. Ahora ha completado el primer paso para crear un asistente de voz personalizado.

Los asistentes de voz, con su creciente evolución, pueden ayudar a marcar la diferencia en la comunidad médica al servir como dictador virtual, asistentes y mucho más. En lugar de sobrecargar a los médicos con tareas menores, como pedir medicamentos o recuperar información del paciente, pueden utilizar tecnologías innovadoras para optimizar sus tareas administrativas.

Usamos PocketSphinx y Amazon Lex para crear un asistente de voz con la simple tarea de recuperar información del paciente. En lugar de ejecutar el programa en su computadora, puede intentar alojarlo en cualquier dispositivo pequeño que admita Python, como Raspberry Pi.

Además, Amazon Lex es elegible para HIPAA, lo que significa que puede integrarlo con los sistemas de atención médica existentes siguiendo los estándares HL7 / FHIR.

Los asistentes de atención médica personalizados pueden ser vitales para ayudar a los médicos y enfermeras a cuidar a sus pacientes, y la recuperación de datos de sensores es solo uno de los muchos casos de uso que pueden ser viables. Otros casos de uso, como pedir medicamentos y escribir conversaciones, pueden beneficiar a los médicos y enfermeras de todos los hospitales.

¡Queremos desafiarlo a que pruebe Amazon Lex y vea lo que puede hacer!


Sobre los autores

Edgar Tellez ha ayudado a múltiples empresas de sector público y privado en la adopción tecnológica de nube en los últimos 15 años. Se ha especializado en Aplicaciones de Comunicación como es Amazon Connect asi como Plataformas de Datos (Bases de Datos, Inteligencia de Negocios, etc) ademas de generacion de soluciones y arquitecturas integrando todos los servicios con los que cuenta AWS. Edgar cuenta con varias certificaciones de la industria de tecnología así como en AWS, que junto con su experiencia le han dado una visión transversal de las necesidades técnicas y de negocio de sus clientes.