ClinicalBERT: использование модели преобразователя глубокого обучения для прогнозирования повторной госпитализации

Прежде чем мы начнем, позвольте мне указать вам на мой репозиторий GitHub [или Jupyter Notebook], содержащий весь код, используемый в этом руководстве. Не стесняйтесь использовать код, чтобы следовать вместе с руководством. Вы можете использовать эту ссылку Google (439 МБ), чтобы загрузить модель раннего реадмиссии (это все, что вам нужно будет выполнить). В качестве альтернативы вы можете использовать эту ссылку в Google (1,32 ГБ), чтобы загрузить предварительно обученную модель ClinicalBERT + весовые коэффициенты уточненной модели задачи повторного допуска + модель раннего повторного допуска.

Предисловие

Если вы пришли сюда из моей более ранней работы Прогнозирование реадмиссии в больницу с помощью НЛП, эта работа по глубокому обучению не будет служить прямым сравнением для метрики AUROC, потому что в этой статье мой подход полностью отличается. Чем больше я углублялся в это, тем больше я обнаруживал, что наиболее полезное применение для врачей - это возможность использовать эти прогнозы для внесения корректировок, пока пациент все еще находится в больнице, чтобы врачи могли вмешаться. и предотвратить их повторный прием в будущем. Следовательно, вместо того, чтобы использовать выписки из выписки (написанные после завершения пребывания пациента), лучше всего просто внести в модель первые записи, которые были собраны в течение 2 или 3 дней после пребывания пациента.

В этом руководстве я буду использовать ClinicalBERT для обучения классификатора реадмиссии. В частности, я возьму предварительно обученную модель ClinicalBERT, добавлю в конце необученный слой нейронов и обучу новую модель (точная настройка). A.k.a. Передача обучения.

TL; DR

Мои результаты по прогнозированию повторной госпитализации, с использованием записей в отделении интенсивной терапии только за первые несколько дней (а не отчетов о выписке):

  • Для 2 дней AUROC = 0,748 и для 3 дней AUROC = 0,758.
  • Для 2 дней RP80 = 38,69% и для 3 дней RP80 = 38,02%.

См. Полную информацию внизу этой статьи.

Вступление

Недавно я прочитал эту замечательную статью ClinicalBert: моделирование клинических заметок и прогнозирование повторной госпитализации Хуанга и др. (Paper и GitHub).

Они разрабатывают ClinicalBert, применяя BERT (представления двунаправленного кодировщика от трансформаторов) к клиническим заметкам.

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

Чем моя работа отличается от авторской:

  1. Я работаю только с ранними клиническими записями (первые 24–48 часов и 48–72 часов, также известные как 2 дня и 3 дня, соответственно), потому что, хотя сводки выписки имеют силу прогнозирования повторной госпитализации, отчеты о выписках могут быть написаны. после выписки пациента из больницы. Таким образом, отчеты о выписке не подлежат действию, поскольку врачи не могут вмешиваться, когда пациент выписывается из больницы. Модели, которые динамически прогнозируют повторную госпитализацию на ранних стадиях госпитализации пациента, актуальны для клиницистов ... объединяются максимум первые 48 или 72 часа записей пациента. Эти составные записи используются для прогнозирования повторного поступления [ стр. 12 ]. Модель ClinicalBERT может динамически прогнозировать повторную госпитализацию. Прогнозирование с использованием сводки о выписке в конце пребывания означает, что существует меньше возможностей снизить вероятность повторной госпитализации. Чтобы построить клинически значимую модель, мы определяем задачу прогнозирования повторной госпитализации в любой момент времени с момента госпитализации пациента.
  2. Мой код представлен в блокноте Jupyter.
  3. Важно отметить, что мой код отличается от кода Хуанга, потому что я перешел на использование нового модуля transformer HuggingFace вместо ранее известного как pytorch_pretrained_bert, который использовал автор.
  4. Я не провожу предварительное обучение для ClinicalBERT, потому что автор уже провел предварительное обучение по клиническим словам, а веса модели уже доступны здесь. Это точно такая же концепция для оригинального BERT, поскольку он предварительно обучен в Википедии / Корпусе книг и может использоваться для других последующих задач. * Примечание. Это очень дорогостоящий процесс (сотни часов работы графического процессора!), Который Google уже предпринял, а затем предоставил выходные векторы для всеобщего использования :) Передача обучения!

О наборе данных

Я буду использовать MIMIC-III (Medical Information Mart for Intensive Care III), потрясающую бесплатную базу данных больниц.

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

MIMIC-III - это реляционная база данных с открытым доступом, содержащая таблицы данных о пациентах, которые находились в отделениях интенсивной терапии (ICU) Медицинского центра Beth Israel Deaconess. Эта общедоступная база данных Electronic Health Records содержит данные о 41 000 пациентов из отделений интенсивной терапии в период с 2001 по 2012 годы, включая записи о почти 53 000 госпитализациях.

Из-за конфиденциального характера медицинских данных я не могу открыто включать их в этот репозиторий. Если вы хотите получить доступ к данным для этого проекта, вам нужно будет запросить доступ по этой ссылке (https://mimic.physionet.org/gettingstarted/access/).

Краткое введение BERT

BERT (двунаправленные представления кодировщика от Transformers) - недавняя модель, опубликованная в октябре 2018 года исследователями из Google AI Language. Он вызвал переполох в сообществе машинного обучения, представив самые современные результаты в самых разных задачах НЛП, включая ответы на вопросы (SQuAD v1.1), вывод естественного языка (MNLI) и другие.

Что такое ClinicalBERT?

ClinicalBERT - это двунаправленный преобразователь.

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

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

Зачем нужен ClinicalBERT?

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

Медицина страдает тревожным переутомлением. Это означает, что полезные правила классификации для медицины должны иметь высокую точность (положительная прогностическая ценность).

Качество усвоенных представлений текста зависит от текста, на котором была обучена модель. Обычный BERT предварительно обучен в BooksCorpus и Википедии. Однако эти два набора данных отличаются от клинических заметок. В клинических заметках используется жаргон, сокращения, а также синтаксис и грамматика, отличные от общепринятого языка в книгах или энциклопедиях. ClinicalBERT обучен работе с медицинскими записями / электронными записями о здоровье (EHR).

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

По сравнению с популярной моделью word2vec, ClinicalBert более точно отражает клиническое сходство слов.

Основы BERT

Как и BERT, Clinical BERT - это обученный стек кодировщика трансформаторов.

Вот краткое описание основ работы BERT.

База BERT имеет 12 уровней кодировщика.

В моем коде я использую базу BERT без корпуса.

Предварительно обученный BERT имеет максимум 512 входных токенов (встраивание позиций). Результатом будет вектор для каждого входного токена. Каждый вектор состоит из 768 чисел с плавающей запятой (скрытых единиц).

Предварительная подготовка ClinicalBERT

Обучение базовой модели BERT обычно выполняется с помощью AdamW, варианта оптимизатора Adam с уменьшением веса в качестве оптимизатора.

По сути, Адам представляет собой простую и интуитивно понятную идею: зачем использовать одинаковую скорость обучения для каждого параметра, когда мы знаем, что одни обязательно нужно продвигать дальше и быстрее, чем другие? Поскольку квадрат недавних градиентов показывает нам, сколько сигнала мы получаем для каждого веса, мы можем просто разделить его на это, чтобы гарантировать, что даже самые медленные веса получат шанс проявить себя. Адам берет эту идею, добавляет стандартный подход к импульсу, и (с небольшой настройкой, чтобы предотвратить предвзятость ранних партий) вот и все!… Мы должны использовать уменьшение веса с Адамом, а не L2 регуляризация, которую реализуют классические библиотеки глубокого обучения [fast.ai].

ClinicalBERT превосходит BERT по двум задачам неконтролируемого языкового моделирования, которые оцениваются на большом корпусе клинического текста. В задачах моделирования языка с масками (где вы маскируете 15% входных токенов и используете модель для прогнозирования следующих токенов) и прогнозирование следующего предложения, ClinicalBERT превосходит BERT на 30 пунктов и 18,75 балла соответственно.

Тонкая настройка ClinicalBERT

В этом руководстве мы будем использовать ClinicalBERT для обучения классификатора реадмиссии. В частности, я возьму предварительно обученную модель ClinicalBERT, добавлю в конце необученный слой нейронов и обучу новую модель.

Преимущества точной настройки

Вы можете спросить, почему мы должны выполнять тонкую настройку, а не тренировать конкретную модель глубокого обучения (BiLSTM, Word2Vec и т. Д.), Которая хорошо подходит для конкретной задачи НЛП, которая вам нужна?

  • Более быстрая разработка. Предварительно обученные веса модели ClinicalBERT уже содержат большой объем информации о нашем языке. В результате для обучения нашей точно настроенной модели требуется гораздо меньше времени - это как если бы мы уже тщательно обучили нижние уровни нашей сети, и нам нужно только осторожно настроить их, используя их выходные данные в качестве функций для нашей задачи классификации. Например, в исходной статье BERT авторы рекомендуют только 2–4 эпохи обучения для точной настройки BERT для конкретной задачи NLP по сравнению с сотнями часов графического процессора, необходимыми для обучения исходной модели BERT или LSTM с нуля!
  • Меньше данных: из-за предварительно обученных весов этот метод позволяет нам точно настроить нашу задачу на гораздо меньшем наборе данных, чем это потребовалось бы в модели, построенной с нуля. Главный недостаток моделей НЛП, построенных с нуля, заключается в том, что нам часто требуется непомерно большой набор данных, чтобы обучить нашу сеть до разумной точности, а это означает, что на создание набора данных приходилось много времени и энергии. Путем тонкой настройки BERT теперь мы можем обойтись без обучения модели с хорошей производительностью на гораздо меньшем количестве обучающих данных.
  • Лучшие результаты. Показано, что тонкая настройка позволяет достичь самых современных результатов с минимальными индивидуальными настройками для самых разных задач: классификация, языковой вывод, семантическое сходство, ответы на вопросы и т. д., а не При реализации нестандартных, а иногда и непонятных архитектур, показывающих, что они хорошо работают с конкретной задачей, точная настройка оказывается лучшей (или, по крайней мере, равной) альтернативой.

Детали точной настройки

ClinicalBert настроен на выполнение конкретной задачи, связанной с клиническими данными: прогнозирование повторной госпитализации.

В модель вводятся клинические записи пациента, и риск повторной госпитализации пациента в течение 30-дневного окна прогнозируется с использованием линейного слоя, применяемого к классификационному представлению hcls, изученному ClinicalBert.

Параметры модели настроены так, чтобы максимизировать логарифмическую вероятность этого двоичного классификатора.

Вот формула вероятности реадмиссии:

P (readmit = 1 | hcls) = σ(W hcls)
  • readmit - двоичный индикатор повторного допуска (0 или 1).
  • σ - сигмовидная функция
  • hcls - это линейный уровень, работающий над окончательным представлением токена CLS. Другими словами, hcls - это результат работы модели, связанной с маркером классификации.
  • W - матрица параметров

Настройка

Перед запуском необходимо создать следующие каталоги и файлы:

Установка

Выполните эту команду, чтобы установить модуль-преобразователь HuggingFace:

conda install -c conda-forge transformers

Набор данных MIMIC-III в AWS S3 Bucket

Я использовал набор данных MIMIC-III, который они размещают в облаке в ведре S3. Я обнаружил, что проще всего просто добавить номер моей учетной записи AWS в мою учетную запись MIMIC-III и использовать эту ссылку s3://mimic-iii-physionet, чтобы перенести таблицу ADMISSIONS и NOTEEVENTS в мою записную книжку.

Предварительная обработка

ClinicalBert требует минимальной предварительной обработки:

  1. Сначала слова переводятся в нижний регистр
  2. Разрывы строк удалены
  3. Возврат каретки удален
  4. Деидентифицирована личная информация в скобках
  5. Удалите специальные символы, такие как ==, −−
  6. Пакет сегментации предложений SpaCy используется для сегментации каждой заметки (Honnibal and Montani, 2017).

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

  • Например 1.2 будет удален.
  • M.D., доктор. будет заменен на MD, Dr
  • Клинические заметки могут включать различные лабораторные результаты и лекарства, которые также содержат множество разделителей на основе правил, таких как 20 мг, перорально, каждые сутки (где qd означает один раз в день, а qo означает принимать внутрь. 20 слов объединены в предыдущую сегментацию, чтобы они не выделялись как разные предложения.

AWS SageMaker - Обучение на графическом процессоре

Я использовал Notebook в AWS Sagemaker и тренировался на одном графическом процессоре p2.xlarge K80 (в SageMaker выберите ml.p2.xlarge). Вам нужно будет запросить увеличение лимита у службы поддержки AWS, прежде чем вы сможете использовать графический процессор. Это ручной запрос, который в конечном итоге выполняется человеком и может занять несколько часов или один день.

Создайте новый блокнот в SageMaker. Затем откройте новый Терминал (см. Рисунок ниже):

Скопируйте / вставьте и запустите приведенный ниже сценарий на компакт-диск в каталог SageMaker и создайте необходимые папки и файлы:

cd SageMaker/
mkdir -p ./data/discharge
mkdir -p ./data/3days
mkdir -p ./data/2days
touch ./data/discharge/train.csv
touch ./data/discharge/val.csv
touch ./data/discharge/test.csv
touch ./data/3days/train.csv
touch ./data/3days/val.csv
touch ./data/3days/test.csv
touch ./data/2days/test.csv

Загрузите блокнот, в котором вы работали, на локальный компьютер.

При создании роли IAM выберите параметр Any S3 bucket.

Создайте каталог /pickle и загрузите 3 маринованных файла: df_discharge.pkl, df_less_2.pkl и df_less_3.pkl. Это может занять несколько минут, поскольку файлы имеют размер 398 МБ, 517 МБ и 733 МБ соответственно.

Затем загрузите файлы modeling_readmission.py и file_utils.py в домашний каталог Jupyter.

Затем загрузите каталог model в домашний каталог Jupyter. Вы можете создать структуру каталогов с помощью следующей команды: mkdir -p ./model/early_readmission. Затем вы можете загрузить 2 файла pytorch_model.bin и bert_config.json в эту папку. Это может занять несколько минут, поскольку pytorch_mode.bin составляет 438 МБ.

В конечном итоге ваша структура каталогов Jupyter должна выглядеть так:

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

Работа всего ноутбука на графическом процессоре K80 заняла около 8 минут.

Если вы хотите сохранить все файлы (включая выходные данные) на локальном компьютере, запустите эту строку в своем Jupyter Notebook: !zip -r -X ClinicalBERT_results.zip './', тогда вы можете загрузить его вручную из своего Notebook.

Разбор кода

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

Конфигурация модели для повторного допуска

Вот параметры, используемые для модели:

{
  "attention_probs_dropout_prob": 0.1,
  "hidden_act": "gelu",
  "hidden_dropout_prob": 0.1,
  "hidden_size": 768,
  "initializer_range": 0.02,
  "intermediate_size": 3072,
  "max_position_embeddings": 512,
  "num_attention_heads": 12,
  "num_hidden_layers": 12,
  "type_vocab_size": 2,
  "vocab_size": 30522
}

Разделить на 318 блоков слов

# to get 318 words chunks for readmission tasks
    df_len = len(df_less_n)
    want = pd.DataFrame({'ID': [], 'TEXT': [], 'Label': []})
    for i in tqdm(range(df_len)):
        x = df_less_n.TEXT.iloc[i].split()
        n = int(len(x) / 318)
        for j in range(n):
            want = want.append({'TEXT': ' '.join(x[j * 318:(j + 1) * 318]), 'Label': df_less_n.OUTPUT_LABEL.iloc[i],
                                'ID': df_less_n.HADM_ID.iloc[i]}, ignore_index=True)
        if len(x) % 318 > 10:
            want = want.append({'TEXT': ' '.join(x[-(len(x) % 318):]), 'Label': df_less_n.OUTPUT_LABEL.iloc[i],
                                'ID': df_less_n.HADM_ID.iloc[i]}, ignore_index=True)

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

Вам может быть интересно, почему мы разделились на 318 словесных частей? Потому что с BERT существует максимум 512 порядковых номеров токенов единиц вложенного слова (в среднем ~ 318 слов). Другими словами, BERT в качестве единицы ввода использует вложенные слова (WordPieces) вместо целого слова. Таким образом, концептуально вместо “I am having lunch” как 4 отдельных слов он может делать что-то вроде “I am hav ing lun ch”.

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

Прогноз реадмиссии

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

Хуанг считает, что вычисление вероятности повторного допуска с использованием приведенного выше уравнения неизменно превосходит прогнозы для каждой подпоследовательности в отдельности на 3-8%. Это потому что:

  1. Некоторые подпоследовательности n (например, токены, соответствующие отчетам о ходе выполнения) НЕ содержат информации о повторном допуске, тогда как другие содержат. Риск повторного допуска следует рассчитывать с использованием подпоследовательностей, которые коррелируют с риском повторного допуска, а влияние неважных подпоследовательностей следует минимизировать. Это достигается за счет использования максимальной вероятности по подпоследовательностям (Pnmax).
  2. Также зашумленные подпоследовательности вводят модель в заблуждение и снижают производительность. Таким образом, они также включают среднюю вероятность повторного допуска по подпоследовательностям (Pnmean). Это приводит к компромиссу между средней и максимальной вероятностями повторного допуска.
  3. Если существует большое количество подпоследовательностей для пациента с большим количеством клинических записей, существует более высокая вероятность наличия зашумленной максимальной вероятности повторной госпитализации. Это означает, что для более длинных последовательностей может потребоваться больший вес в среднем прогнозе. Мы включаем этот вес как коэффициент масштабирования n/c с c корректировкой для пациентов с большим количеством клинических замечаний. Опытным путем Хуанг обнаружил, что c=2 лучше всего работает с данными проверки.

Формулу можно найти в функции vote_score в переменной temp. Помните, что 2 от c=2:

def vote_score(df, score, readmission_mode, output_dir):
    df['pred_score'] = score
    df_sort = df.sort_values(by=['ID'])
    #score 
    temp = (df_sort.groupby(['ID'])['pred_score'].agg(max)+df_sort.groupby(['ID'])['pred_score'].agg(sum)/2)/(1+df_sort.groupby(['ID'])['pred_score'].agg(len)/2)
    x = df_sort.groupby(['ID'])['Label'].agg(np.min).values
    df_out = pd.DataFrame({'logits': temp.values, 'ID': x})
fpr, tpr, thresholds = roc_curve(x, temp.values)
    auc_score = auc(fpr, tpr)
plt.figure(1)
    plt.plot([0, 1], [0, 1], 'k--')
    plt.plot(fpr, tpr, label='Val (area = {:.3f})'.format(auc_score))
    plt.xlabel('False positive rate')
    plt.ylabel('True positive rate')
    plt.title('ROC curve')
    plt.legend(loc='best')
    plt.show()
    string = 'auroc_clinicalbert_'+readmission_mode+'.png'
    plt.savefig(os.path.join(output_dir, string))
return fpr, tpr, df_out

Полученные результаты

На валидацию выдается 10% данных, на тестирование - 10% данных.

Каждая модель оценивается с использованием трех показателей:

  1. Площадь под кривой ROC (AUROC)
  2. Площадь под кривой точности-отзыва (AUPRC)
  3. Отзыв с точностью 80% (RP80): для задачи повторного допуска важны ложные срабатывания. Чтобы свести к минимуму количество ложных срабатываний и, таким образом, снизить риск переутомления срабатывания сигнализации, мы установили точность 80%. Другими словами, мы устанавливаем 20% ложных срабатываний из класса предсказанных положительных результатов и используем соответствующий порог для расчета отзыва. Это приводит к клинически значимой метрике, которая позволяет нам создавать модели, контролирующие частоту ложных срабатываний.

Вот результаты, полученные в результате прогнозирования реадмиссии в ранних заметках:

Интерпретация результатов

Быстрый обзор точности, отзыва и AUROC

Рекомендую прочитать статью Джейсона Браунли.

  • Точность - это отношение количества истинных положительных результатов к сумме истинных положительных и ложных срабатываний. Он описывает, насколько хорошо модель предсказывает положительный класс. Это также называется положительной прогностической ценностью.
  • Напоминание, также известное как чувствительность, рассчитывается как отношение количества истинно положительных результатов к сумме истинных положительных и ложно отрицательных результатов.

Важно учитывать как точность, так и отзывчивость в случаях, когда наблюдается дисбаланс в наблюдениях между двумя классами. В частности, когда есть много примеров отсутствия события (класс 0) и только несколько примеров события (класс 1). Поскольку обычно большое количество примеров класса 0 означает, что нас меньше интересует умение модели правильно предсказывать класс 0, например высокие истинные негативы.

При расчете точности и напоминания важно отметить, что в расчетах не используются истинные отрицания. Это касается только правильного предсказания класса меньшинства, класса 1.

Когда использовать кривые ROC по сравнению с кривыми точного отзыва?

Рекомендации следующие:

  • Кривые ROC следует использовать при примерно равном количестве наблюдений для каждого класса.
  • Кривые Precision-Recall следует использовать при наличии среднего и большого дисбаланса класса.

Почему? Потому что кривые ROC представляют чрезмерно оптимистичную картину модели на наборах данных с дисбалансом классов. Это оптимистично из-за использования истинно отрицательных значений в показателе ложных положительных результатов на кривой ROC; однако помните, что частота ложных срабатываний тщательно избегается в Precision-Recall.

Теперь вернемся к интерпретации наших результатов.

Поскольку мы сбалансировали данные, я сосредоточусь на представлении кривой AUROC как наиболее подходящей метрики вместо AUPRC.

Я также сосредоточусь на сообщении метрики отзыва с точностью 80% в связи с тем, что она имеет клиническое значение (помните, что усталость от сигналов тревоги - это реальная проблема в здравоохранении, которую мы намеренно пытаемся избежать / уменьшить).

Для 2 дней AUROC = 0,748 и для 3 дней AUROC = 0,758.

Для 2 дней RP80 = 38,69% и для 3 дней RP80 = 38,02%.

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

Однако в качестве легкого ориентира, согласно экспериментам Хуанга, он обнаружил, что ClinicalBERT превосходит базовые показатели Bag-Of-Words и BILSTM «до» следующего:

2 дня по сравнению с другими моделями:

  • До 9,5% AUROC по сравнению с Bag-of-Words и до 6,5% AUROC по сравнению с BILSTM.
  • До 20,7% RP80 по сравнению с пакетом слов и до 19,4% RP80 по сравнению с BILSTM .

3 дня по сравнению с другими моделями:

  • До 9,8% AUROC по сравнению с Bag-of-Words и до 9,6% AUROC по сравнению с BILSTM.
  • До 26,2% RP80 по сравнению с пакетом слов и до 20,9% RP80 по сравнению с BILSTM .
  • Я хотел бы подчеркнуть, что приведенные выше показатели дают только верхнюю границу дельты экспериментов Хуанга.

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

Карты самовосприятия - визуализация результатов

Код, который я использовал для создания карты самовосприятия в этом разделе, находится здесь.

Человеку очень сложно понять, почему нейронная сеть сделала определенный прогноз и какие части входных данных модель сочла наиболее информативной. Поэтому врачи могут не доверять выводам метода, основанного на данных.

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

Возможно, вы уже знакомы с популярной статьей Внимание - это все, что вам нужно, которая была представлена ​​на arXiv 2017 года командой машинного перевода Google. Если нет, посмотрите эту анимацию, которая объясняет внимание. Более интуитивно мы можем думать самовнимание, когда предложение смотрит на себя, чтобы определить, как представить каждый токен.

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

- Иллюстрированный трансформер Джея Аламмара.

Для каждой клинической заметки, вводимой в ClinicalBert, каждый механизм самовнимания вычисляет распределение по каждому термину в предложении с учетом запроса. Уравнение самовнимания:

Интуитивно мы можем думать об этом так: запрос q представляет, какую информацию мы ищем, а ключ K представляет релевантность запросу.

Высокий вес внимания между запросом и токеном ключа означает, что взаимодействие между этими токенами позволяет прогнозировать повторный доступ. В кодировщике ClinicalBert 144 головки (что составляет 12 механизмов внимания с несколькими головками для каждого из 12 уровней кодировщика). В разных заголовках будет различие, чего и следовало ожидать, потому что разные головы узнают разные отношения между парами слов. Хотя каждая голова получает одно и то же встраивание входных данных, посредством случайной инициализации каждый изучает разные фокусы [img].

Приведенная ниже карта самовнимания - это лишь одна из глав самовнимания в ClinicalBERT: она показывает, какие термины в клинических заметках позволяют прогнозировать повторную госпитализацию пациента. Предложение he has experienced acute on chronic diastolic heart failure in the setting of volume overload due to his sepsis . используется в качестве входных данных, которые вводятся в модель. Это предложение представляет клиническую заметку, найденную в MIMIC-III. Уравнение самовнимания используется для вычисления распределения по токенам в этом предложении, где каждый токен запроса q также является токеном в том же входном предложении.

Обратите внимание, что карта самовнимания показывает больший вес внимания между словами chronic и acute… или chronic и ###load.

Интуитивно понятно, что наличие токена, связанного со словом «хронический», является предиктором реадмиссии.

Однако помните, что на каждом слое по 12 голов (всего 144 головы для этой модели). И каждая голова смотрит на разные вещи. Разнообразные изображения, которые он фиксирует, - вот что делает BERT таким умным! Таким образом, если посмотреть на график внимания каждого руководителя по отдельности, вы поймете, как модель делает прогнозы, но это не упростит интерпретацию всей системы как «единого окна». Вместо этого вы можете выполнить некоторое агрегирование (суммирование или усреднение всех весов сосредоточенной головы).

Итак, если вы врач, ищущий универсальное понимание помощи с интерпретацией, exBERT - это интерактивный программный инструмент, который обеспечивает понимание значения контекстных представлений путем сопоставления введенных человеком вводимых данных с аналогичными контекстами. в большом аннотированном наборе данных. Агрегируя аннотации совпадающих похожих контекстов, exBERT помогает интуитивно объяснить, чему научился каждый внимательный руководитель [Бумага]. Хотя он был создан для BERT, этот тип инструмента также может быть адаптирован для ClinicalBERT!

Кроме того, если вы хотите больше узнать о головах и весах самовнимания, относящихся к нескольким задачам BERT NLP, я очень, очень рекомендую эту академическую статью Раскрытие темных секретов BERT »- он отлично справляется с анализом и исследованием механизма самовнимания, лежащего в основе архитектур на основе BERT.

использованная литература

@article{clinicalbert,
author = {Kexin Huang and Jaan Altosaar and Rajesh Ranganath},
title = {ClinicalBERT: Modeling Clinical Notes and Predicting Hospital Readmission},
year = {2019},
journal = {arXiv:1904.05342},
}

MIMIC-III, свободно доступная база данных по интенсивной терапии. Johnson AEW, Pollard TJ, Shen L, Lehman L, Feng M, Ghassemi M, Moody B, Szolovits P, Celi LA и Mark RG. Научные данные (2016). DOI: 10.1038 / sdata.2016.35. Доступно на: https://www.nature.com/articles/sdata201635