La desidentificación es un procedimiento crítico para salvaguardar la información de salud protegida (PHI) dentro de las notas clínicas, donde los datos se anonimizan u ofuscan mediante el reemplazo de entidades reales por otras falsas.
[******][*******][********]
Desidentificación multimodo con Spark NLP para atención médica
Destacamos la importancia de compartir datos clínicos de conformidad con las reglas de privacidad de HIPAA y exploramos las funcionalidades disponibles en la biblioteca Spark NLP for Healthcare para lograr este objetivo en la publicación del blog. Coherencia de formato para la ofuscación de entidades en la desidentificación con Spark NLP.
Ahora hablaremos sobre una nueva característica lanzada en la última versión, v4.3.2, de Spark NLP for Healthcare que brinda la capacidad de ofuscar o anonimizar las entidades PHI en una sola pasada.
¿Por qué necesitamos la aplicación de múltiples políticas de desidentificación a la vez?
Hay varias políticas de desidentificación para reemplazar los datos PHI en Spark NLP for Healthcare. Aquí hay una lista de estas opciones;
obfuscate: Reemplace los valores con valores falsos generados aleatoriamente, p. Juan nieve -> miguel willian.
mask_same_length_chars: Reemplace el valor con el asterisco menos dos de la misma longitud y un corchete más en ambos extremos, p. Juan Nieve -> [*******].
mask_entity_labels: Reemplace los valores con las etiquetas de entidad, por ejemplo. Juan nieve -> .
mask_fixed_length_chars: Reemplace el valor con un asterisco de longitud fija. También puedes invocar setFixedMaskLength() p.ej. Juan Nieve -> ****.
El Deidentification annotator es una herramienta crucial dentro de Spark NLP for Healthcare, específicamente para llevar a cabo tareas de desidentificación. Proporcionando las entidades necesarias y especificando el modo deseado de cualquiera ofuscación o mascarilla a través de setmode() parámetro de este anotador, la salida resultante se anula de forma efectiva.
En los casos en los que se requirió una salida no identificada usando una combinación de varias políticas, como ofuscando ambas entidades NOMBRE y UBICACIÓN mientras enmascaramiento DATE entidades con caracteres de la misma longitud, se hizo necesario definir varios anotadores de desidentificación dentro de la misma canalización para cada par de política de etiqueta de entidad. Posteriormente, también se requirió cierto procesamiento posterior de los resultados. Si bien este requisito era muy simple, la aplicación fue hacer que la canalización sea más compleja y agregar pasos posteriores al proceso fue rompiendo la funcionalidad del flujo del proceso.
Con el lanzamiento de Spark NLP para el cuidado de la salud versión 4.3.2ahora es posible aplicar simultáneamente múltiples políticas de desidentificación a diferentes entidades de PHI, gracias a la función recientemente introducida.
Implementación de la funcionalidad multimodo en la desidentificación
Mejoramos la Deidentification anotador agregando un nuevo setSelectiveObfuscationModes() parámetro que requiere un archivo JSON que contiene un diccionario definido por el usuario con las políticas que se aplicarán a las etiquetas. Si las entidades no se proporcionan en el archivo JSON, se desidentificarán de acuerdo con el setMode() por defecto. También proporciona la capacidad de omitir entidades que no queremos desidentificar.
Supongamos que estamos trabajando en una tarea de desidentificación y queremos aplicar esta combinación de políticas al documento;
ofuscar entidades de TELÉFONO
enmascarar entidades de ID con etiquetas de entidad
enmascarar entidades de NOMBRE con caracteres de la misma longitud
enmascare las entidades ZIP y LOCATION con caracteres de longitud fija
NO desidentificar (saltar) entidades de FECHA
Después de crear una canalización NER que pueda detectar todas estas entidades, definiremos un diccionario con estos pares de etiquetas de política y lo guardaremos como un archivo JSON. No es necesario que tengamos en cuenta la carcasa de la etiqueta al crear el diccionario, esta función no distingue entre mayúsculas y minúsculas para las etiquetas. Esto significa Zip y CREMALLERA devolverá los mismos resultados.
Entonces definiremos Deidentification anotador configurando setMode('obfuscate') y proporcionando la ruta del archivo JSON a setSelectiveObfuscationModes('multi_mode.json') además de la configuración de las columnas de entrada y salida. Esto significa que todas las entidades detectadas por los modelos NER que no establecimos políticas específicas serán ofuscado en los resultados Además, puede invocar setFixedMaskLength() para configurar los recuentos de caracteres de longitud fija.
¡Eso es todo! No necesitamos definir más Deidentification anotadores para la aplicación de políticas de desidentificación multimodo. Veamos cómo funciona esto en un texto de muestra;
text = ''' Record date : 2093-01-13 , David Hale , M.D . Name : Hendrickson Ora MR # 7194334 PCP : Oliveira , 25 years-old Record date : 2079-11-09 Cocke County Baptist Hospital , 0295 Keats Street , Phone 55-555-5555 '''
+---------------------------------------------------------------------+------------------------------------------------------+ |sentence |deidentified | +---------------------------------------------------------------------+------------------------------------------------------+ |Record date : 2093-01-13 , David Hale , M.D . |Record date : 2093-01-13 , [********] , M.D . | |Name : Hendrickson Ora MR # 7194334 |Name : [*************] MR # <ID> | |PCP : Oliveira , 25 years-old Record date : 2079-11-09 |PCP : [******] , 22 years-old Record date : 2079-11-09| |Cocke County Baptist Hospital , 0295 Keats Street , Phone 55-555-5555|**** , **** , Phone 97-182-9152 | +---------------------------------------------------------------------+------------------------------------------------------+
Como puedes ver arriba;
DATE se omitieron entidades: 2093-01-13 => 2093-01-13, 2079–11–09=> 2079–11–09
NAME las entidades se enmascararon con caracteres de la misma longitud: David Hale = > [********], Hendrickson Ora => [*************] , Oliviera : [******],
ID entidad estaba enmascarada con IDENTIFICACIÓN etiqueta: 7194334 => <ID>
AGE entidad estaba ofuscada ya que no establecimos ninguna política para ellos y establecimos setMode() como ofuscar: 25 years-old => 22 years-old
LOCATION las entidades se enmascararon con caracteres de longitud fija: Cocke County Baptist Hospital => **** , 0295 Keats Street => ****
PHONE entidad fue ofuscada con una falsa: 55-555-5555 => 97-182-9152
Conclusión
La desidentificación multimodo representa una solución eficaz para mejorar el flujo de proceso de las tareas de desidentificación, gracias a sus ventajas de funcionalidad, integrabilidad y velocidad. Al aprovechar este enfoque, es posible implementar una variedad de políticas de ofuscación y enmascaramiento para diferentes entidades de manera simplificada, al mismo tiempo que se logran resultados más rápidos debido a la eliminación de etapas adicionales de canalización y requisitos de procesamiento posterior.
La desidentificación es una tarea crucial en el mundo de la PNL y Spark NLP for Healthcare es una de las bibliotecas más populares para esto. Laboratorios John Snow mantiene actualizada esta biblioteca con nuevos lanzamientos cada dos semanas. Habrá nuevas funciones en los próximos lanzamientos, ¡sigue siguiéndonos!
Los modelos Spark NLP for Healthcare tienen licencia, por lo que si desea utilizar estos modelos, puede ver el video «Obtener una licencia gratuita para las bibliotecas NLP de John Snow Labs» y solicitar uno en https://www.johnsnowlabs.com/install/.
Puede seguirnos en medium y Linkedin para obtener más actualizaciones o unirse al canal de soporte de Slack para obtener soporte técnico instantáneo de los desarrolladores de Spark NLP. Si desea obtener más información sobre la biblioteca y comenzar a codificar de inmediato, consulte nuestros cuadernos de capacitación de certificación.