Краткий обзор

В последние годы в области здравоохранения и биомедицинских исследований произошел значительный технологический прогресс, в основном благодаря доступности огромного количества цифровых данных, генерируемых пациентами, и демократизации современных алгоритмов компьютерных наук и инженерии. Такие фреймворки и библиотеки с открытым исходным кодом, среди прочего, как PyTorch, TensorFlow, fast.ai, spacy.io, scikit-learn и huggingface.co упростили использование сложного машинного обучения. и конвейеры глубокого обучения в исследованиях и производстве.

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

Признание концепций

Идентификация интересующих концепций в свободных текстах является подзадачей извлечения информации, более известной как распознавание именованных сущностей (NER), и направлена ​​на классификацию токенов (слов) по заранее определенным категориям. Например, используя NER-компонент spaCy:

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

Модель NER SpaCy готова к использованию в различных последующих задачах НЛП и способна идентифицировать 18 различных концепций в текстах, начиная от имен людей (включая вымышленные), стран, мест, транспортных средств, продуктов питания, названий книг, дат и числовых величин. . Хотя NER spaCy является довольно общим, недавно было представлено несколько реализаций биомедицинского NER на Python (scispaCy, BioBERT и ClinicalBERT). Эти модели были обучены определять конкретные концепции в биомедицинских текстах, такие как названия лекарств, ткань органа, организм, клетка, аминокислота, генный продукт, клеточный компонент, ДНК, типы клеток и другие.

Чтобы максимально использовать электронные медицинские карты с произвольным текстом (EHR), мы сосредоточились на конкретной подзадаче извлечения клинической информации и разработали специальную модель распознавания именованных сущностей Med7 для определения 7 понятий, связанных с лекарствами, дозировки, названий лекарств, продолжительности, формы , частота, способ введения и сила. Модель обучается на MIMIC-III, который является одним из крупнейших открытых наборов данных, разработанных лабораторией вычислительной физиологии Массачусетского технологического института. MIMIC-III включает в себя EHR из более чем 60 000 поступлений в отделения интенсивной терапии, включая как структурированные, так и неструктурированные медицинские записи. Med7 имеет открытый исходный код и использует лучшие практики, представленные в spaCy, и может взаимодействовать между конвейерами внутри spaCy Universe. Кроме того, мы предоставляем ряд предварительно обученных весов spaCy для всего корпуса MIMIC-III, включающего более 2 миллионов документов, с использованием различных архитектурных параметров. Было показано, что инициализация весов модели с использованием предварительного обучения на данных из целевой области незначительно улучшает производительность модели в последующих задачах NLP при обучении с ограниченным количеством примеров с золотой аннотацией. Эта проблема особенно актуальна для области EHR, где серьезно не хватает высококачественных вручную аннотированных обучающих примеров с правильно идентифицированными клиническими концепциями.

Med7 в двух словах

Med7 - это свободно доступный пакет Python для spaCy. В качестве предварительного условия требуется последняя версия spaCy (2.2.3) и Python 3.6+. Он частично обучен на вручную аннотированных данных, предоставленных Национальными клиническими проблемами НЛП (n2c2) за 2018 год, который включает набор из 303 и 202 документов для обучения и тестирования, соответственно, взятых из категории выписки данных MIMIC-III. . Чтобы повысить точность Med7 NER, мы создали зашумленный обучающий серебряный аннотированный набор данных из 303 документов из MIMIC-III, где мы использовали сопоставление на основе правил spaCy со списком шаблонов для каждого из семь категорий. Кроме того, чтобы собрать еще больше данных об обучении, отмеченных золотом, два аннотатора использовали радикально эффективный инструмент аннотации активного обучения Prodigy для аннотирования 606 дополнительных документов, взятых из MIMIC-III, строго следуя официальному руководству по аннотациям 2018 n2c2. Ниже представлены примеры семи категорий и их описание:

Как установить Med7

Рекомендуется создать выделенную виртуальную среду и установить в нее все последние необходимые пакеты. Обученная модель была протестирована с помощью spaCy версии 2.3.2 и Python 3.7. Например, если уже установлен дистрибутив Python Anaconda:

  1. создать новую виртуальную среду:

(base) conda create -n med7 python=3.7

2. активируйте и установите spaCy:

(base) conda activate med7
(med7) pip install spacy==2.3.5

3. Как только все пройдет гладко, проверьте репозиторий Huggingface

Модель Med7 на основе векторов может быть установлена:

(med)pip install https://huggingface.co/kormilitzin/en_core_med7_lg/resolve/main/en_core_med7_lg-any-py3-none-any.whl

или модели на базе трансформатора:

pip install https://huggingface.co/kormilitzin/en_core_med7_trf/resolve/main/en_core_med7_trf-any-py3-none-any.whl

Более подробную информацию можно найти в специальном репозитории GitHub.

Как пользоваться Med7:

import spacy

med7 = spacy.load("en_core_med7_lg")

# create distinct colours for labels
col_dict = {}
seven_colours = ['#e6194B', '#3cb44b', '#ffe119', '#ffd8b1', '#f58231', '#f032e6', '#42d4f4']
for label, colour in zip(med7.pipe_labels['ner'], seven_colours):
    col_dict[label] = colour

options = {'ents': med7.pipe_labels['ner'], 'colors':col_dict}

text = 'A patient was prescribed Magnesium hydroxide 400mg/5ml suspension PO of total 30ml bid for the next 5 days.'
doc = med7(text)

spacy.displacy.render(doc, style='ent', jupyter=True, options=options)

[(ent.text, ent.label_) for ent in doc.ents]

и вывод:

[('Magnesium hydroxide', 'DRUG'),
 ('400mg/5ml', 'STRENGTH'),
 ('suspension', 'FORM'),
 ('PO', 'ROUTE'),
 ('30ml', 'DOSAGE'),
 ('bid', 'FREQUENCY'),
 ('for the next 5 days', 'DURATION')]

также можно отобразить идентифицированные концепции:

Этот пример также можно запустить в Колабе.

Разработанную модель NER можно легко интегрировать в конвейеры, разработанные в рамках spaCy framework. Например, интеграция с -negspaCy идентифицирует отрицаемые понятия, такие как лекарства, которые были упомянуты, но фактически не прописаны.

Эта статья - первый шаг к моделям с открытым исходным кодом для клинической обработки естественного языка. Более подробную информацию о разработке модели можно найти в нашем недавнем препринте: Med7: переносимая клиническая модель обработки естественного языка для электронных медицинских карт.