MedCAT | Введение - Анализ электронных медицинских карт

Введение о том, как использовать MedCAT для организации, структурирования и анализа электронных медицинских карт (ЭМК). В качестве примера MedCAT использовался в недавнем исследовании Ингибиторы АПФ и CoVid-2019.

EHR - это кладезь медицинской информации; в них содержится невероятное количество знаний. Приведу несколько данных, обычно доступных для каждого пациента: (1) Болезни с симптомами; (2) лекарства, часто вместе с инструкциями по дозировке, возможными побочными эффектами и отзывами пациентов; (3) процедуры, иногда с отзывами пациентов; (4) риски, предположения и мнения врачей; (5) Свидетельства пациентов; (6) Различные измерения и лабораторные результаты.

При работе с EHR нам сначала нужно их структурировать и организовать. Информация, которую они содержат, обычно доступна в неструктурированном формате (свободный текст). Для врачей это относительно нормально; они могут читать документы и получать необходимую информацию. Но если мы хотим использовать данные для статистического анализа или машинного обучения, это сложно без структуры.

При наличии структурированной EHR возможны следующие варианты использования в исследованиях: (1) прогноз смертности; (2) Расчет риска заболевания; (3) Клиническое кодирование; (4) временное моделирование заболеваний или пациентов; (5) Взаимодействие болезнь / лекарство; (6) Выявление побочных реакций на лекарства;

Я, конечно, не первый, кто понимает, что данные, имеющиеся в ЭМК, могут принести большую пользу как пациентам, так и медицинским учреждениям. В последнее время мы наблюдаем большие движения от Google Health (инструмент агрегирования данных), Amazon (их Comprehend Medical) и многих других. Хотя приятно видеть, что крупные компании понимают ценность электронных медицинских записей, пройдет много времени, прежде чем они смогут получить полный доступ к данным больниц (проблемы с конфиденциальностью). И, наконец, даже когда они получат доступ, сомнительно, поможет ли он исследовательским проектам или поможет пациентам.

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

Остальная часть этого поста организована следующим образом. Во-первых, мы собираемся определить небольшой проект, который будет использоваться для демонстрации MedCAT. Во-вторых, мы собираемся взглянуть на набор данных, который мы используем. И в-третьих, мы проверим настройку среды.

Обратите внимание: (1) все сделано на Python, поэтому необходимы базовые знания; (2) Я не буду делиться какими-либо наборами медицинских данных, но покажу, где и как получить к ним доступ; (3) Некоторые знания статистики и машинного обучения помогут, но не обязательно; (4) Здесь мы фокусируемся на электронных медицинских записях, тот же подход может быть использован для других типов документов, но в настоящее время инструмент в основном тестируется на биомедицинских документах.

Обзор Учебного пособия по MedCAT

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

  1. Введение - это сообщение
  2. Анализ и подготовка наборов данных - эта часть в целом связана с настройкой проекта машинного обучения, анализом наборов данных, предварительной обработкой текста и всем остальным, что необходимо, прежде чем мы начнем с моделирования.
  3. Извлечение болезней из электронных медицинских карт - глубокое погружение в библиотеку MedCAT в Python и распознавание именованных сущностей и связывание медицинских концепций. Полезно, если вас интересует только, как пользоваться MedCAT.
  4. Обучение с учителем и полный конвейер MedCAT - изучение более сложных частей библиотеки MedCAT и способы создания полного конвейера для NER + L и MetaAnnotations.
  5. Анализ результатов - пример того, что возможно после того, как мы извлекли интересующие нас объекты из электронных медицинских записей.
  6. Другие инструменты и функции библиотеки MedCAT (коды ICD10, SNOMED CT) и чего ожидать в будущем

Введение - определение проекта

Давайте посмотрим на пример. Предположим, у нас есть доступ к базе данных большой больницы, у каждого пациента в этой больнице есть электронная запись, которая содержит много свободного текста (пример документа ниже, вы можете найти больше на mtsamples). Кроме того, каждый EHR также включает несколько структурированных полей, таких как возраст, пол и раса. Теперь предположим, что наш проект должен показать связь между заболеваниями и возрастом (может использоваться для расчета оценок риска возрастных заболеваний). Для этого нам нужно знать возраст каждого пациента, а также заболевания, которые отображаются в его EHR. Выделить возраст легко, это структурированное поле, но проблема в болезнях. Они упоминаются только в свободном тексте и обычно нигде больше. Прежде чем мы сможем продолжить, нам нужно извлечь болезни из каждой электронной записи и сохранить их в структурированной базе данных.

Обратите внимание: (1) Проблема извлечения болезней - это гораздо больше, но мы будем расширяться по мере продвижения. (2) Заболевания - это всего лишь пример, мы можем делать то же самое с лекарствами, симптомами, процедурами или чем-то еще.

Формальное определение проблемы извлечения болезни

То, чего мы хотим достичь, известно в обработке естественного языка (NLP) как обнаружение и связывание именованных сущностей (NER + L). NER означает обнаружение объекта в тексте (например, медицинские термины, второй шаг на рисунке 1). В то время как L означает привязку распознанного объекта к концепции в биомедицинской базе данных (например, UMLS, третий шаг на рисунке 1).

Связующая часть важна, потому что она позволяет нам стандартизировать и систематизировать обнаруженные объекты, поскольку несколько распознанных объектов могут ссылаться на одну и ту же медицинскую концепцию в биомедицинской базе данных. Например, в EHR мы можем иметь:

  • Пациентке поставили диагноз злокачественное новообразование груди
  • Предыдущий медицинский анамнез включал рак груди
  • Причина госпитализации: грудная клетка

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

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

После того, как мы обнаружили и связали объекты с нашей биомедицинской базой данных, мы можем, например, отфильтровать объекты на основе поля Semantic Type или найти все объекты, которые связаны с биомедицинской концепцией с идентификатором C0006142. Обзор всех семантических типов, доступных в UMLS, можно найти здесь (обратите внимание, что один из семантических типов - это Заболевания, что как раз то, что нам нужно).

Обратите внимание: (1) для биомедицинской базы данных мы будем использовать UMLS, поскольку это самая большая база данных, содержащая более 4,2 миллиона медицинских концепций. Есть много других биомедицинских баз данных, но UMLS идеально подходит для наших нужд, поскольку мы хотим выделить все возможные заболевания.

Набор данных - MIMIC-III

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

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

Настройка среды (при локальном запуске)

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

Для всего буду использовать python 3.7, скорее всего с версией 3.5+ все будет нормально.

Если вы следуете этому руководству на своем локальном компьютере, рекомендуется запустить новую виртуальную среду Python, используя:

python3 -m venv medcat

Как только это будет сделано, вы можете клонировать репозиторий MedCAT и перейти в каталог tutorial. Оттуда запустите (не забудьте активировать medcatenvironment):

pip install -r requirements

Поскольку MedCAT построен на основе SpaCy / SciSpaCy, вам также потребуется загрузить языковые модели, используя:

pip install https://s3-us-west-2.amazonaws.com/ai2-s2-scispacy/releases/v0.2.4/en_core_sci_md-0.2.4.tar.gz

Google Colab

Весь код также доступен в Google Colab, ссылки на записные книжки можно найти в tutorial разделе репозитория. Это самый простой способ следовать этому руководству, так как все уже настроено и готово. Но обратите внимание, что Colabs не будет использовать реальные данные (MIMIC-III), а только общедоступные наборы данных и сгенерированные фиктивные данные.