Escrito por

Sales Engineer at InterSystems Iberia
Artículo Luis Angel Pérez Ramos · jul 24, 2024 4m read

d[IA]gnosis: desarrollando aplicaciones RAG con IRIS for Health

Con la introducción de los tipos de datos vectoriales y la funcionalidad de Vector Search en IRIS se nos abre todo un mundo de posibilidades para el desarrollo de aplicaciones y un ejemplo de estas aplicaciones es la que vi reciéntemente publicada un concurso público de la Consejería de Sanidad de Valencia en la que solicitaban una herramienta para ayudar en la codificación CIE-10 utilizando modelos de IA.

¿Cómo podríamos implementar una aplicación similar a la solicitada? Veamos que necesitaríamos:

  1. Listado de códigos CIE-10, que usaremos como contexto de nuestra aplicación RAG para buscar diagnósticos dentro de los textos libres.
  2. Un modelo entrenado que nos vectorice los textos en los que vamos a buscar equivalencias en los códigos CIE-10.
  3. Las librerías Python necesarias para la ingesta y vectorización de los códigos CIE-10 y los textos.
  4. Un front-end amigable que admita textos sobre los que busquemos posibles diagnósticos.
  5. Orquestación de las solicitudes recibidas desde el front-end.

¿Qué nos proporciona IRIS para cubrir las necesidades anteriores?

  1. Importación de CSV, ya sea usando la funcionalidad de RecordMapper o directamente usando Embedded Python.
  2. Embedded Python nos permite implementar el código Python necesario para generar los vectores haciendo uso del modelo seleccionado.
  3. Publicación de APIs REST a las que se invocará desde la aplicación de front-end.
  4. Producciones de interoperabilidad que permiten el seguimiento de la información dentro de IRIS.

Pues sólo nos queda ver el ejemplo desarrollado:

d[IA]gnosis

Asociado a este artículo tenéis el acceso a la aplicación desarrollada, en los próximos artículos veremos en detalle como implementamos cada una de las funcionalidades, desde la utilización del modelo, el almacenamiento de los vectores y la utilización de las búsquedas vectoriales.

Revisemos la aplicación:

Importando códigos CIE-10

Desde la pantalla de configuración se nos indica el formato que debe seguir el archivo CSV con los códigos CIE-10 que vamos a importar, el proceso de carga y vectorización consume bastante tiempo y recursos, por ello el despliegue del contenedor Docker configura no sólo la memoria RAM utilizable por Docker sino que también la memoria de disco en caso de que los requerimientos superen la RAM asignada:

# iris  iris:    init:true    container_name:iris    build:      context:.      dockerfile:iris/Dockerfile    ports:      -52774:52773      -51774:1972    volumes:    -./shared:/shared    environment:    -ISC_DATA_DIRECTORY=/shared/durable    command:--check-capsfalse--ISCAgentfalse    mem_limit:30G    memswap_limit:32G

El archivo con los códigos CIE-10 está disponible en la ruta del proyecto /shared/cie10/cie10.csv, una vez alcanzado el 100% la aplicación estará lista para ser utilizada.

En nuestra aplicación hemos definido dos funcionalidades distintas para la codificación de diagnósticos, una a partir de los mensajes HL7 recibidos en el sistema y otra basada en textos libres.

Captura de diagnósticos mediante HL7

El proyecto contiene una serie de mensajes de HL7 preparados para realizar pruebas, sólo es necesario copiar el archivo /shared/hl7/messagesa01.hl7 a la carpeta /shared/HL7In y la producción asociada se encargará de extraer el diagnóstico del mismo para mostrarlo en la aplicación web:

Desde la pantalla de solicitudes de diagnóstico podremos ver todos los diagnósticos recibidos vía mensajería HL7, para su codificación a CIE-10 sólo necesitamos pulsar en lupa para mostrar un listado de aquellos códigos CIE-10 más próximo al diagnóstico recibido:

Una vez seleccionado veremos en el listado el diagnóstico y su código CIE-10 asociado, pulsando en el botón con el icono del sobre se generará un mensaje usando el original e incluyendo dentro del segmento del diagnóstico el nuevo seleccionado:

MSH|^~\&|HIS|HULP|EMPI||||ADT^A08|592956|P|2.5.1
EVN|A01|
PID|||1556655212^^^SERMAS^SN~922210^^^HULP^PI||GARCÍA PÉREZ^JUAN^^^||20150403|M|||PASEO PEDRO ÁLVAREZ 1951 CENTRO^^LEGANÉS^MADRID^28379^SPAIN||555283055^PRN^^JUAN.GARCIA@YAHOO.COM|||||||||||||||||N|
PV1||N
DG1|1||O16.9^Hipertensión materna no especificada, trimestre no especificado^CIE10-ES|Hipertensión gestacional||A||

Dicho mensaje se podrá encontrar en la ruta /shared/HL7Out

Capturas de diagnósticos en texto libre

Desde la opción de Analizador de texto el usuario podrá incluir un texto libre sobre el que se realizará un proceso de análisis. La aplicación buscará en tuplas de 3 palabras lematizadas (eliminando artículos, pronombres y demás palabras poco relavantes). Una vez analizadas el sistema nos mostrará el texto relevante subrayado y los posibles diagnósticos localizados:

Una vez realizado el análisis este podrá ser consultado en cualquier momento desde el histórico de análisis.

Histórico de análisis

Todos los análisis realizados quedan registrados y podrán ser consultados en cualquier momento, pudiendo visualizar todos los posibles códigos CIE-10 disponibles:

En el próximo artículo...

Veremos como mediante Embedded Python utilizamos un modelo LLM específico para la vectorización tanto de los códigos CIE-10 que usaremos como contexto como de los textos libres.

Si tenéis cualquier pregunta o sugerencia no dudéis en escribir un comentario en el artículo.

Comments

Luis Angel Pérez Ramos · jul 25, 2024

Como veréis en la parte superior derecha la aplicación es multiidioma, de momento en español e inglés pero el código está totalmente abierto para incluir todos los que sean necesarios (siempre y cuando el modelo esté preentrenado al idioma que queráis incluir, claro).

0
Yone Moreno · jul 31, 2024

Muchas gracias @Luis Angel Pérez Ramos , porque es un ejemplo muy práctico, y me parece muy interesante la forma en la que lo has explicado de manera más visual, mediante el apoyo de las imágenes de la propia aplicación para ilustrar los casos de uso.

Muchísimas gracias Luis Ángel por tu explicación.

Por cierto, conocías que: han creado una herramienta web de Inteligencia Artificial conversacional, a la cual solicitar códigos CIE-10. https://www.notetoicd10.com/ ( no tengo ninguna relación con los creadores, ni gano nada citándola; únicamente me topé con ella por casualidad ).

Por ejemplo si le escribes: "Get a code for pain in the eye" te muestra:

Ocular pain, unspecified eye

H57.10

Ocular pain, right eye

H57.11

Ocular pain, left eye

H57.12

De nuevo, muchísimas gracias Luis Ángel por tu explicación.

0
Luis Angel Pérez Ramos  jul 31, 2024 to Yone Moreno

¡Buenas @Yone Moreno ! Pues no lo conocía, pero parece que funciona prácticamente igual, echemos un vistazo a qué nos devolvería nuestra aplicación con el "Get a code for pain in the eye"

0
Yone Moreno  ago 1, 2024 to Luis Angel Pérez Ramos

👍👍🙂🧑‍💻🙂👍👍

0