«Основная модель для медицинского искусственного интеллекта»

Main model for medical artificial intelligence

Представляем PLIP, фундаментальную модель для патологии

Фото Тары Уинстед: https://www.pexels.com/photo/person-reaching-out-to-a-robot-8386434/

Введение

Продолжающаяся революция в области искусственного интеллекта приносит нам инновации во всех направлениях. Модели GPT(s) от OpenAI ведут разработку и показывают, насколько фундаментальные модели могут упростить некоторые из наших повседневных задач. Каждый день мы видим анонсы новых моделей, помогающих нам писать лучше и оптимизировать наши задачи.

У нас открываются множество возможностей. Искусственный интеллект, способный помочь нам в рабочей жизни, станет одним из самых важных инструментов, которыми мы будем обладать в следующие годы.

Где мы увидим наиболее значимые изменения? Где мы можем помочь людям выполнить свои задачи быстрее? Одним из самых захватывающих направлений для моделей искусственного интеллекта является область Медицинских инструментов искусственного интеллекта.

В этом блог-посте я описываю PLIP (Pathology Language and Image Pre-Training) как одну из первых фундаментальных моделей для патологии. PLIP – это модель, объединяющая зрительное и языковое восприятие и позволяющая использовать изображения и текст в одном векторном пространстве, что обеспечивает возможность мультимодальных приложений. PLIP производная модель от оригинальной модели CLIP, предложенной OpenAI в 2021 году и недавно опубликованной в Nature Medicine:

Huang, Z., Bianchi, F., Yuksekgonul, M., Montine, T., Zou, J., Визуально-языковая фундаментальная модель для анализа патологических изображений с использованием медицинского Twitter. 2023, Nature Medicine.

Некоторые полезные ссылки перед началом нашего путешествия:

  • HuggingFace Weights;
  • Статья в журнале Nature Medicine;
  • Репозиторий на GitHub.

Контрастное предварительное обучение 101

Мы показываем, что с помощью сбора данных из социальных сетей и некоторых дополнительных трюков мы можем создать модель, которую можно использовать в задачах патологии медицинского искусственного интеллекта с хорошими результатами – без необходимости аннотированных данных.

Хотя введение CLIP (модели, от которой происходит PLIP) и ее контрастной потери выходит за рамки этого блог-поста, все же полезно получить первое введение/освежение. Очень простая идея, лежащая в основе CLIP, заключается в том, что мы можем построить модель, размещающую изображения и текст в векторном пространстве, в котором “изображения и их описания будут близко расположены друг к другу”.

Контрастная модель - такая как PLIP/CLIP - помещает изображения и текст в одно векторное пространство для сравнения. Описание в желтом прямоугольнике соответствует изображению в желтом прямоугольнике и поэтому они также близко расположены в векторном пространстве.

Приведенный выше GIF также показывает пример того, как модель, встраивающая изображения и текст в одно векторное пространство, может использоваться для классификации: поместив все в одно векторное пространство, можно ассоциировать каждое изображение с одной или несколькими метками, рассматривая расстояние в векторном пространстве: чем ближе описание к изображению, тем лучше. Мы ожидаем, что ближайшая метка будет реальной меткой изображения.

Чтобы быть ясными: после обучения CLIP вы можете вставить любое изображение или любой текст, которыми вы располагаете. Обратите внимание, что этот GIF показывает 2D пространство, но в общем случае пространства, используемые в CLIP, имеют гораздо более высокую размерность.

Это означает, что после того, как изображения и текст находятся в одном векторном пространстве, мы можем делать много разных вещей: от классификации без обучения (найти, какая текстовая метка больше всего похожа на изображение) до поиска (найти, какое изображение больше всего похоже на заданное описание).

Как мы обучаем CLIP? Простыми словами, модель питается МНОГИМИ парами изображений и текста и пытается поместить похожие сочетания близко друг к другу (как на изображении выше), а все остальные – далеко. Чем больше пар изображений и текста у вас есть, тем лучше представление вы сможете изучить.

Мы остановимся здесь с фоном CLIP, этого должно быть достаточно, чтобы понять остаток этого поста. У меня есть более подробная статья о CLIP на Towards Data Science.

Как обучить свой CLIP

Введение в CLIP и в то, как мы его настроили для итальянского языка во время недели сообщества HuggingFace.

towardsdatascience.com

CLIP был обучен быть очень общей моделью изображений и текста, но он работает не так хорошо для конкретных случаев использования (например, мода (Chia et al., 2022)), и также есть случаи, когда CLIP работает хуже, и специализированные реализации, связанные с определенной областью, работают лучше (Zhang et al., 2023).

Патология языка и предварительное обучение изображений (PLIP)

Теперь мы расскажем, как мы создали PLIP, нашу настроенную версию исходной модели CLIP, специально разработанную для патологии.

Создание набора данных для предварительного обучения патологического языка и изображений

Нам нужны данные, и эти данные должны быть достаточно хорошими, чтобы использовать их для обучения модели. Вопрос в том, как мы ищем эти данные? Нам нужны изображения с соответствующими описаниями – подобные тому, что мы видели на GIF выше.

Хотя в Интернете доступно значительное количество патологических данных, они часто не имеют аннотаций и могут быть в нестандартных форматах, таких как файлы PDF, слайды или видео на YouTube.

Нам нужно посмотреть в другом месте, и это место – социальные медиа. Используя платформы социальных медиа, мы, вероятно, сможем получить доступ к множеству контента, связанного с патологией. Патологи используют социальные медиа, чтобы делиться своими исследованиями онлайн и задавать вопросы своим коллегам (см. Isom et al., 2017, для обсуждения того, как патологи используют социальные медиа). Также есть набор рекомендуемых хэштегов в Twitter, которые патологи могут использовать для общения.

В дополнение к данным из Twitter, мы также собираем подмножество изображений из набора данных LAION (Schuhmann et al., 2022), огромной коллекции из 5 млрд пар изображений и текста. LAION был собран путем скрэппинга веба и является набором данных, на основе которого обучались многие популярные модели OpenCLIP.

Патологический Twitter

Мы собираем более 100 тыс. твитов, используя хэштеги патологического Twitter. Процесс довольно простой: мы используем API для сбора твитов, связанных с определенными хэштегами. Мы удаляем твиты, содержащие вопросительный знак, потому что эти твиты часто содержат просьбы о других патологиях (например, “Какой это вид опухоли?”), а не информацию, которая нам действительно может понадобиться для создания нашей модели.

Мы извлекаем твиты с определенными ключевыми словами и удаляем конфиденциальный контент. Кроме того, мы также удаляем все твиты, содержащие вопросительные знаки, которые появляются в твитах, используемых патологами, чтобы задавать вопросы своим коллегам о возможных редких случаях.

Выборка из LAION

LAION содержит 5 млрд пар изображений и текста, и наш план сбора данных будет следующим: мы можем использовать собственные изображения, полученные из Twitter, и найти похожие изображения в этом большом корпусе; таким образом, мы должны получить достаточно похожие изображения, и, надеюсь, эти похожие изображения также являются патологическими изображениями.

Теперь, делать это вручную было бы невозможно, встраивание и поиск по 5 млрд векторов – это очень трудоемкая задача. К счастью, есть заранее вычисленные векторные индексы для LAION, которые мы можем запросить с помощью API! Мы просто встраиваем наши изображения и используем поиск K-NN для поиска похожих изображений в LAION. Помните, каждое из этих изображений сопровождается подписью, что идеально подходит для нашего случая использования.

Очень простая настройка того, как мы расширяем наш набор данных с помощью поиска K-NN в наборе данных LAION. Мы начинаем с нашего собственного изображения из нашего исходного корпуса, а затем ищем похожие изображения в наборе данных LAION. Каждое из полученных изображений сопровождается фактическим заголовком.

Обеспечение качества данных

Не все собранные нами изображения хорошие. Например, мы собрали множество групповых фотографий с медицинских конференций из Twitter. Из LAION мы иногда получали некоторые фрактальные изображения, которые могли отдаленно напоминать некоторые патологические образцы.

Мы сделали очень простую вещь: мы обучили классификатор, используя некоторые патологические данные в качестве положительных данных класса и данные ImageNet в качестве отрицательных данных класса. Такой классификатор имеет невероятно высокую точность (фактически легко отличить патологические изображения от случайных изображений в Интернете).

Кроме того, для данных LAION мы применяем классификатор английского языка, чтобы удалить примеры, которые не на английском языке.

Обучение патологического языка и предварительное обучение изображений

Сбор данных был самой сложной частью. После того, как это сделано и мы доверяем нашим данным, мы можем начать обучение.

Для обучения PLIP мы использовали исходный код OpenAI для обучения – мы реализовали цикл обучения, добавили косинусное затухание для функции потерь и несколько настроек, чтобы все работало гладко и можно было проверить (например, отслеживание Comet ML).

Мы обучили много разных моделей (сотни) и сравнили параметры и техники оптимизации. В конечном итоге мы смогли создать модель, которой мы были довольны. Больше деталей есть в статье, но одной из самых важных компонентов при создании такой контрастной модели является обеспечение как можно большего размера пакета во время обучения, что позволяет модели научиться различать максимальное количество элементов.

Предварительное обучение патологического языка и изображений для медицинского ИИ

Пришло время проверить нашу PLIP. Хороша ли эта основная модель на стандартных бенчмарках?

Мы провели различные тесты для оценки производительности нашей модели PLIP. Наиболее интересными из них являются классификация без обучения, линейное зондирование и поиск, но здесь я сосредоточусь в основном на первых двух. Я опущу конфигурацию эксперимента для краткости, но все это доступно в рукописи.

PLIP в качестве классификатора без обучения

На анимации ниже показано, как выполнять классификацию без обучения с помощью модели, подобной PLIP. Мы используем скалярное произведение в качестве меры сходства в векторном пространстве (чем выше значение, тем более похожи элементы).

Процесс выполнения классификации без обучения. Мы встраиваем изображение и все метки, а затем находим, какие метки ближе всего к изображению в векторном пространстве.

На следующем графике вы можете увидеть быстрое сравнение PLIP против CLIP на одном из наборов данных, которые мы использовали для классификации без обучения. Имеется значительное улучшение в терминах производительности при использовании PLIP вместо CLIP.

Производительность PLIP против CLIP (взвешенная макро F1) на двух наборах данных для классификации без обучения. Обратите внимание, что ось Y ограничена примерно 0,6, а не 1.

PLIP в качестве извлекателя признаков для линейного зондирования

Еще один способ использования PLIP – это использование его в качестве извлекателя признаков для патологических изображений. Во время обучения PLIP видит множество патологических изображений и учится создавать векторные вложения для них.

Допустим, у вас есть некоторые размеченные данные, и вы хотите обучить новый классификатор патологии. Вы можете извлечь вложения изображений с помощью PLIP, а затем обучить логистическую регрессию (или любой другой тип регрессора, который вам нравится) на основе этих вложений. Это простой и эффективный способ выполнить классификацию.

Почему это работает? Идея заключается в том, что для обучения классификатора вложения PLIP, являясь специфичными для патологии, должны быть лучше, чем вложения CLIP, которые предназначены для общего использования.

Кодировщик изображений PLIP позволяет извлекать вектор для каждого изображения и обучать классификатор изображений на его основе.

Вот пример сравнения результатов работы CLIP и PLIP на двух наборах данных. В то время как CLIP дает хорошие результаты, результаты, полученные с помощью PLIP, гораздо выше.

Производительность PLIP по сравнению с CLIP (Macro F1) на двух наборах данных для линейной проверки. Обратите внимание, что ось y начинается с 0,65, а не с 0.

Использование предварительного обучения на языке патологии и изображений

Как использовать PLIP? Вот несколько примеров использования PLIP на Python и демонстрация Streamlit, с которой вы можете поиграть.

Код: API для использования PLIP

В нашем репозитории GitHub предлагаются еще несколько примеров, которыми вы можете воспользоваться. Мы создали API, которое позволяет взаимодействовать с моделью легко:

from plip.plip import PLIPimport numpy as npplip = PLIP('vinid/plip')# создаем вложения изображений и текстовые вложенияimage_embeddings = plip.encode_images(images, batch_size=32)text_embeddings = plip.encode_text(texts, batch_size=32)# нормализуем вложения до единичной нормы (чтобы мы могли использовать скалярное произведение вместо косинусного сходства для сравнения)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)

Вы также можете использовать более стандартный API HF для загрузки и использования модели:

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=["a photo of label 1", "a photo of label 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)  

Демо: PLIP в качестве образовательного инструмента

Мы также считаем, что PLIP и будущие модели могут быть эффективно использованы в качестве образовательных инструментов для медицинского искусственного интеллекта. PLIP позволяет пользователям выполнять поиск с нулевым сопоставлением: пользователь может искать определенные ключевые слова, и PLIP попытается найти наиболее похожее/соответствующее изображение. Мы создали простое веб-приложение в Streamlit, которое вы можете найти здесь.

Выводы

Спасибо, что прочитали все это! Мы взволнованы возможными будущими эволюциями этой технологии.

Я закончу этот блог, обсудив некоторые очень важные ограничения PLIP и предложив некоторые дополнительные вещи, о которых я написал, и которые могут быть интересны.

Ограничения

Хотя наши результаты интересны, PLIP имеет множество различных ограничений. Данных недостаточно для изучения всех сложных аспектов патологии. Мы создали фильтры данных, чтобы обеспечить их качество, но нам нужны лучшие метрики оценки, чтобы понять, что модель делает правильно и что модель делает неправильно.

Более важно, PLIP не решает текущие проблемы патологии; PLIP не является идеальным инструментом и может допускать много ошибок, требующих исследования. Результаты, которые мы видим, определенно обнадеживают и открывают широкий спектр возможностей для будущих моделей в патологии, объединяющих визию и язык. Однако перед тем, как мы сможем увидеть эти инструменты в повседневной медицине, еще много работы нужно выполнить.

Прочее

У меня есть несколько других блог-постов, касающихся моделирования CLIP и ограничений CLIP. Например:

Обучение CLIP моделированию моды

Обучение FashionCLIP, предметно-ориентированной модели CLIP для моды

towardsdatascience.com

Ваша модель визуально-языкового восприятия может быть мешком слов

Мы исследуем границы того, что модели визуально-языкового восприятия понимают о языке в нашей устной статье на ICLR 2023

towardsdatascience.com

Ссылки

Chia, P.J., Attanasio, G., Bianchi, F., Terragni, S., Magalhães, A.R., Gonçalves, D., Greco, C., & Tagliabue, J. (2022). Contrastive language and vision learning of general fashion concepts. Scientific Reports, 12.

Isom, J.A., Walsh, M., & Gardner, J.M. (2017). Social Media and Pathology: Where Are We Now and Why Does it Matter? Advances in Anatomic Pathology.

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: An open large-scale dataset for training next generation image-text models. 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). Large-Scale Domain-Specific Pretraining for Biomedical Vision-Language Processing. ArXiv, abs/2303.00915.