Un modelo base para la IA médica
Base model for medical AI
Presentando PLIP, un modelo base para la patología

Introducción
La revolución de la IA en curso nos está brindando innovaciones en todas las direcciones. Los modelos de OpenAI GPT(s) están liderando el desarrollo y mostrando cuánto pueden facilitar algunas de nuestras tareas diarias los modelos base. Desde ayudarnos a escribir mejor hasta agilizar algunas de nuestras tareas, todos los días vemos nuevos modelos que se anuncian.
Se están abriendo muchas oportunidades frente a nosotros. Los productos de IA que pueden ayudarnos en nuestra vida laboral serán una de las herramientas más importantes que obtendremos en los próximos años.
¿Dónde veremos los cambios más impactantes? ¿Dónde podemos ayudar a las personas a realizar sus tareas más rápidamente? Uno de los campos más emocionantes para los modelos de IA es aquel que nos lleva a las herramientas de IA médica.
En esta publicación de blog, describo PLIP (Preentrenamiento de Lenguaje e Imagen de Patología) como uno de los primeros modelos base para la patología. PLIP es un modelo visión-lenguaje que se puede utilizar para incrustar imágenes y texto en el mismo espacio vectorial, lo que permite aplicaciones multimodales. PLIP se deriva del modelo original CLIP propuesto por OpenAI en 2021 y se ha publicado recientemente en Nature Medicine:
Huang, Z., Bianchi, F., Yuksekgonul, M., Montine, T., Zou, J., Un modelo base de visión-lenguaje para el análisis de imágenes de patología utilizando Twitter médico. 2023, Nature Medicine.
- Investigadores del MIT otorgaron subvenciones iniciales para invest...
- Crea un gráfico de planilla de perforación con Seaborn
- Approximación de Matrices en Flujos de Datos
Algunos enlaces útiles antes de comenzar nuestra aventura:
- Pesos de HuggingFace;
- Artículo de Nature Medicine;
- Repositorio de GitHub.
Preentrenamiento Contrastivo 101
Mostramos que, mediante la recopilación de datos en las redes sociales y con algunos trucos adicionales, podemos construir un modelo que se puede utilizar en tareas de patología de IA médica con buenos resultados, sin necesidad de datos anotados.
Aunque introducir CLIP (el modelo del cual se deriva PLIP) y su pérdida contrastiva está un poco fuera del alcance de esta publicación de blog, todavía es bueno tener una primera introducción/recordatorio. La idea muy simple detrás de CLIP es que podemos construir un modelo que coloque imágenes y texto en un espacio vectorial en el cual “las imágenes y sus descripciones estarán cerca una de la otra”.

El GIF anterior también muestra un ejemplo de cómo se puede utilizar un modelo que incrusta imágenes y texto en el mismo espacio vectorial para la clasificación: al poner todo en el mismo espacio vectorial, podemos asociar cada imagen con una o más etiquetas al considerar la distancia en el espacio vectorial: cuanto más cerca esté la descripción de la imagen, mejor. Esperamos que la etiqueta más cercana sea la etiqueta real de la imagen.
Para ser claros: Una vez que CLIP está entrenado, puede incrustar cualquier imagen o cualquier texto que tenga. Tenga en cuenta que este GIF muestra un espacio 2D, pero en general, los espacios utilizados en CLIP tienen una dimensionalidad mucho mayor.
Esto significa que una vez que las imágenes y el texto están en el mismo espacio vectorial, hay muchas cosas que podemos hacer: desde clasificación de cero disparos (encontrar qué etiqueta de texto es más similar a una imagen) hasta recuperación (encontrar qué imagen es más similar a una descripción dada).
¿Cómo entrenamos a CLIP? En pocas palabras, el modelo se alimenta con MUCHOS pares de imágenes y texto, y trata de colocar elementos similares juntos (como en la imagen de arriba) y el resto lejos. Cuantos más pares de imágenes y texto tengas, mejor será la representación que aprenderás.
Detendremos aquí la explicación de fondo de CLIP, esto debería ser suficiente para entender el resto de esta publicación. Tengo una publicación de blog más detallada sobre CLIP en Towards Data Science.
Cómo entrenar a tu CLIP
Introducción a CLIP y cómo lo ajustamos para el idioma italiano durante la Semana de la Comunidad de HuggingFace.
towardsdatascience.com
CLIP ha sido entrenado para ser un modelo de imagen y texto muy general, pero no funciona tan bien para casos de uso específicos (por ejemplo, Moda (Chia et al., 2022)) y también hay casos en los que CLIP tiene un rendimiento inferior y las implementaciones específicas del dominio funcionan mejor (Zhang et al., 2023).
Preentrenamiento de lenguaje e imagen de patología (PLIP)
Ahora describiremos cómo construimos PLIP, nuestra versión ajustada del modelo CLIP original que está diseñada específicamente para Patología.
Construyendo un conjunto de datos para el preentrenamiento de lenguaje e imagen de patología
Necesitamos datos, y estos datos deben ser lo suficientemente buenos como para ser utilizados para entrenar un modelo. La pregunta es, ¿cómo encontramos estos datos? Lo que necesitamos son imágenes con descripciones relevantes, como la que vimos en el GIF anterior.
Aunque hay una cantidad significativa de datos de patología disponibles en la web, a menudo carecen de anotaciones y pueden estar en formatos no estándar como archivos PDF, diapositivas o videos de YouTube.
Necesitamos buscar en otro lugar, y este otro lugar va a ser las redes sociales. Al aprovechar las plataformas de redes sociales, podemos acceder potencialmente a una gran cantidad de contenido relacionado con la patología. Los patólogos utilizan las redes sociales para compartir su propia investigación en línea y hacer preguntas a sus colegas (consulte Isom et al., 2017, para obtener más información sobre cómo los patólogos utilizan las redes sociales). También existe un conjunto de hashtags de Twitter generalmente recomendados que los patólogos pueden usar para comunicarse.
Además de los datos de Twitter, también recopilamos un subconjunto de imágenes del conjunto de datos LAION (Schuhmann et al., 2022), una vasta colección de 5 mil millones de pares de imágenes y texto. LAION ha sido recopilado al raspar la web y es el conjunto de datos que se utilizó para entrenar muchos de los modelos populares de OpenCLIP.
Twitter de patología
Recopilamos más de 100,000 tweets utilizando hashtags de Twitter de patología. El proceso es bastante simple, utilizamos la API para recopilar tweets relacionados con un conjunto de hashtags específicos. Eliminamos los tweets que contienen un signo de interrogación porque a menudo contienen solicitudes de otras patologías (por ejemplo, “¿Qué tipo de tumor es este?”) y no contienen información que realmente necesitemos para construir nuestro modelo.

Muestreo de LAION
LAION contiene 5 mil millones de pares de imágenes y texto, y nuestro plan para recopilar nuestros datos es el siguiente: podemos utilizar nuestras propias imágenes que provienen de Twitter y encontrar imágenes similares en este gran corpus; de esta manera, deberíamos poder obtener imágenes razonablemente similares y, con suerte, estas imágenes similares también son imágenes de patología.
Ahora, hacer esto manualmente sería inviable, ya que incrustar y buscar en 5 mil millones de incrustaciones es una tarea que consume mucho tiempo. ¡Afortunadamente, hay índices de vectores precalculados para LAION que podemos consultar con imágenes reales utilizando APIs! Simplemente incrustamos nuestras imágenes y utilizamos la búsqueda K-NN para encontrar imágenes similares en LAION. Recuerda, cada una de estas imágenes viene con una leyenda, algo que es perfecto para nuestro caso de uso.

Asegurando la calidad de los datos
No todas las imágenes que recopilamos son buenas. Por ejemplo, en Twitter, recopilamos muchas fotos grupales de conferencias médicas. De LAION, a veces obteníamos algunas imágenes parecidas a fractales que vagamente podrían parecer algún patrón de patología.
Lo que hicimos fue muy simple: entrenamos un clasificador utilizando algunos datos de patología como datos de clase positiva y datos de ImageNet como datos de clase negativa. Este tipo de clasificador tiene una precisión increíblemente alta (en realidad es fácil distinguir imágenes de patología de imágenes aleatorias en la web).
Además de esto, para los datos de LAION aplicamos un clasificador de idioma inglés para eliminar ejemplos que no estén en inglés.
Entrenamiento de la preformación de idioma y de imagen de patología
La recopilación de datos fue la parte más difícil. Una vez que eso está hecho y confiamos en nuestros datos, podemos comenzar el entrenamiento.
Para entrenar PLIP utilizamos el código original de OpenAI para el entrenamiento, implementamos el bucle de entrenamiento, agregamos un enfriamiento coseno para la pérdida y algunos ajustes aquí y allá para que todo funcione sin problemas y de manera verificable (por ejemplo, seguimiento de Comet ML).
Entrenamos muchos modelos diferentes (cientos) y comparamos parámetros y técnicas de optimización. Finalmente, pudimos obtener un modelo con el que estábamos satisfechos. Hay más detalles en el artículo, pero uno de los componentes más importantes al construir este tipo de modelo contrastivo es asegurarse de que el tamaño del lote sea lo más grande posible durante el entrenamiento, esto permite que el modelo aprenda a distinguir tantos elementos como sea posible.
Pre-entrenamiento de idioma e imagen de patología para IA médica
Ahora es el momento de poner a prueba nuestro PLIP. ¿Es este modelo base bueno en los estándares de referencia?
Ejecutamos diferentes pruebas para evaluar el rendimiento de nuestro modelo PLIP. Las tres más interesantes son la clasificación de cero disparos, la sonda lineal y la recuperación, pero aquí me centraré principalmente en las dos primeras. Ignoraré la configuración experimental por brevedad, pero todo esto está disponible en el manuscrito.
PLIP como clasificador de cero disparos
El siguiente GIF ilustra cómo realizar la clasificación de cero disparos con un modelo como PLIP. Utilizamos el producto punto como medida de similitud en el espacio vectorial (cuanto mayor, más similar).

En el siguiente gráfico, se puede ver una rápida comparación de PLIP vs CLIP en uno de los conjuntos de datos que utilizamos para la clasificación de cero disparos. Hay una ganancia significativa en términos de rendimiento al usar PLIP en lugar de CLIP.

PLIP como extractor de características para exploración lineal
Otra forma de utilizar PLIP es como un extractor de características para imágenes de patología. Durante el entrenamiento, PLIP ve muchas imágenes de patología y aprende a construir vectores de incrustación para ellas.
Supongamos que tienes algunos datos anotados y quieres entrenar un nuevo clasificador de patología. Puedes extraer incrustaciones de imágenes con PLIP y luego entrenar una regresión logística (o cualquier otro tipo de regresor que te guste) sobre estas incrustaciones. Esta es una forma fácil y efectiva de realizar una tarea de clasificación.
¿Por qué funciona esto? La idea es que para entrenar un clasificador, las incrustaciones de PLIP, al ser específicas de la patología, deberían ser mejores que las incrustaciones de CLIP, que son de propósito general.

Aquí tienes un ejemplo de la comparación entre el rendimiento de CLIP y PLIP en dos conjuntos de datos. Mientras que CLIP obtiene un buen rendimiento, los resultados que obtenemos usando PLIP son mucho mejores.

Uso del Lenguaje de Patología y Preentrenamiento de Imágenes
¿Cómo se utiliza PLIP? Aquí tienes algunos ejemplos de cómo usar PLIP en Python y una demostración de Streamlit que puedes usar para jugar un poco con el modelo.
Código: APIs para Usar PLIP
Nuestro repositorio de GitHub ofrece un par de ejemplos adicionales que puedes seguir. Hemos construido una API que te permite interactuar fácilmente con el modelo:
from plip.plip import PLIPimport numpy as npplip = PLIP('vinid/plip')# creamos incrustaciones de imágenes e incrustaciones de textoimage_embeddings = plip.encode_images(images, batch_size=32)text_embeddings = plip.encode_text(texts, batch_size=32)# normalizamos las incrustaciones a norma unitaria (de manera que podamos usar el producto escalar en lugar de la similitud coseno para hacer comparaciones)image_embeddings = image_embeddings/np.linalg.norm(image_embeddings, ord=2, axis=-1, keepdims=True)text_embeddings = text_embeddings/np.linalg.norm(text_embeddings, ord=2, axis=-1, keepdims=True)
También puedes usar la API estándar de HF para cargar y utilizar el modelo:
from PIL import Imagefrom transformers import CLIPProcessor, CLIPModelmodel = CLIPModel.from_pretrained("vinid/plip")processor = CLIPProcessor.from_pretrained("vinid/plip")image = Image.open("images/image1.jpg")inputs = processor(text=["una foto de etiqueta 1", "una foto de etiqueta 2"], images=image, return_tensors="pt", padding=True)outputs = model(**inputs)logits_per_image = outputs.logits_per_image probs = logits_per_image.softmax(dim=1)
Demostración: PLIP como Herramienta Educativa
También creemos que PLIP y futuros modelos pueden ser utilizados de manera efectiva como herramientas educativas para la IA Médica. PLIP permite a los usuarios realizar recuperación sin entrenamiento: un usuario puede buscar palabras clave específicas y PLIP intentará encontrar la imagen más similar/correspondiente. Hemos construido una sencilla aplicación web en Streamlit que puedes encontrar aquí.
Conclusiones
¡Gracias por leer todo esto! Estamos entusiasmados con las posibles evoluciones futuras de esta tecnología.
Terminaré esta publicación del blog discutiendo algunas limitaciones muy importantes de PLIP y sugiriendo algunas cosas adicionales que he escrito que podrían ser de interés.
Limitaciones
Aunque nuestros resultados son interesantes, PLIP tiene muchas limitaciones diferentes. Los datos no son suficientes para aprender todos los aspectos complejos de la patología. Hemos construido filtros de datos para garantizar la calidad de los datos, pero necesitamos mejores métricas de evaluación para comprender qué es lo que el modelo está haciendo bien y qué es lo que el modelo está haciendo mal.
Más importante aún, PLIP no resuelve los desafíos actuales de la patología; PLIP no es una herramienta perfecta y puede cometer muchos errores que requieren investigación. Los resultados que vemos son definitivamente prometedores y abren un abanico de posibilidades para futuros modelos en patología que combinen visión y lenguaje. Sin embargo, aún queda mucho trabajo por hacer antes de que podamos ver estas herramientas utilizadas en la medicina cotidiana.
Miscelánea
Tengo un par de otras publicaciones de blog sobre el modelado de CLIP y las limitaciones de CLIP. Por ejemplo:
Enseñando a CLIP un poco de moda
Entrenando FashionCLIP, un modelo CLIP específico para moda
towardsdatascience.com
Tu modelo de visión y lenguaje podría ser un saco de palabras
Exploramos los límites de lo que los modelos de visión y lenguaje entienden sobre el lenguaje en nuestro artículo oral en ICLR 2023
towardsdatascience.com
Referencias
Chia, P.J., Attanasio, G., Bianchi, F., Terragni, S., Magalhães, A.R., Gonçalves, D., Greco, C., & Tagliabue, J. (2022). Aprendizaje contrastivo de lenguaje y visión de conceptos generales de moda. Scientific Reports, 12.
Isom, J.A., Walsh, M., & Gardner, J.M. (2017). Redes sociales y patología: ¿Dónde estamos ahora y por qué importa? Avances en Anatomía Patológica.
Schuhmann, C., Beaumont, R., Vencu, R., Gordon, C., Wightman, R., Cherti, M., Coombes, T., Katta, A., Mullis, C., Wortsman, M., Schramowski, P., Kundurthy, S., Crowson, K., Schmidt, L., Kaczmarczyk, R., & Jitsev, J. (2022). LAION-5B: Un conjunto de datos de gran escala y abierto para entrenar modelos de imagen-texto de próxima generación. ArXiv, abs/2210.08402.
Zhang, S., Xu, Y., Usuyama, N., Bagga, J.K., Tinn, R., Preston, S., Rao, R.N., Wei, M., Valluri, N., Wong, C., Lungren, M.P., Naumann, T., & Poon, H. (2023). Preentrenamiento a gran escala y específico del dominio para el procesamiento de visión y lenguaje biomédicos. ArXiv, abs/2303.00915.