JetBrains Education: предсказание побочных эффектов лекарств

Привет, Хабр!

Меня зовут Елена Картышева, я выпускница программы «Разработка программного обеспечения» Университета ИТМО — одной из образовательных инициатив JetBrains. Я занимаюсь биоинформатикой и машинным обучением, и сегодня хочу рассказать о своей выпускной квалификационной работе. В рамках диплома я улучшила модель предсказания совместных побочных эффектов лекарств. Это поможет разрабатывать более эффективный дизайн клинических исследований и собирать информацию о побочных эффектах новых препаратов.

fe8c0b9264032a84ae41bb033bce1419.jpeg

В этом году я окончила корпоративную магистерскую программу JetBrains в Университете ИТМО «Разработка программного обеспечения». Сейчас я работаю исследователем в лаборатории Machine Learning Applications and Deep Learning JetBrains Research.

Как я попала в магистратуру

В школе я хотела заниматься прикладной математикой и не особо любила программировать, поэтому поступила на направление «Прикладная математика и информатика» матмеха СПбГУ. На 4-м курсе пошла учиться в Институт Биоинформатики, заинтересовалась биологическими задачами и решила в дальнейшем развиваться в этом направлении. Там же я попала на стажировку в исследовательскую группу BioLabs в JetBrains Research, где занималась разработкой статистической модели для анализа данных ChIP-seq на Kotlin.

Мне нравилось работать со статистическими моделями, но из-за слабых навыков кодинга было сложно выполнять техническую часть работы. К счастью, мне повезло с научным руководителем, Алексеем Диевским, который много рассказывал про Kotlin и вообще JVM, и это оказалось неожиданно интересно. Я и раньше задумывалась, что для работы с прикладными задачами стоит научиться нормально программировать, но стажировка сыграла в этом решающую роль.

Так и получилось, что после окончания бакалавриата я решила поступать в корпоративную магистратуру JetBrains «Разработка программного обеспечения». Во-первых, мне ее посоветовал научный руководитель, а во-вторых, я знала о программе от друга, который учился на курс старше и рассказывал о серьезной нагрузке. Если честно, я думала, что не смогу поступить: про языки программирования я знала ужасно мало, да и с алгоритмами, которые являются важной частью собеседования, совсем не дружила. Но получилось как в меме: «Я по приколу подала заявку, меня по приколу взяли, и прикол вышел из-под контроля».

Пост получился довольно большим, поэтому вначале привожу краткий план своего рассказа:

Зачем нужно исследовать побочные эффекты лекарств?

Вам наверняка известно такое понятие, как побочные эффекты лекарств. Обычно различают индивидуальные побоч­ные эффекты — это негативные последствия, вызванные приемом одного лекарства, и совместные — побочные эффекты, появляющиеся при приеме нескольких препаратов.

Совместные побочные эффекты возникают из-за нежела­тельного взаимодействия комбинаций препаратов. Они могут вызы­вать серьезные осложнения при лечении тяжелых пациентов [1]. Их сложно идентифицировать экспериментально: проверить все существующие пары препара­тов попросту невозможно, поэтому в клинических испытаниях совместные побочные эффекты не тестируются, и информация о них появляется только когда лекарство начинают применять [2].

Формулировка задачи

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

Источник: Zitnik Marinka, Agrawal Monica, Leskovec Jure. Modeling polypharmacy side effects with graph convolutional networks // Bioinformatics. — 2018. — Vol. 34, no. 13. — P. 457–466.Источник: Zitnik Marinka, Agrawal Monica, Leskovec Jure. Modeling polypharmacy side effects with graph convolutional networks // Bioinformatics. — 2018. — Vol. 34, no. 13. — P. 457–466.

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

В итоге получается следующий граф: каждое ребро представляется тройкой (h, r, t), где h и t — вершины, которые соединяются ребром, а r — тип ребра: один из побочных эффектов или отображение связи лекарство-белок / белок-белок. Задача предсказания сводится к задаче бинарной классификации: необходимо определить, существует ли ребро (h, r, t) в графе.

Существующие модели и их ограничения

Через граф знаний задачу предсказания совместных побочных эффектов впервые сформулировали в 2018 году [3], и с тех пор было предложено достаточно много моделей. Одна из лучших — TriVec [4] достигает высоких значений метрик: AUROC (area under ROC curve) — 0.975, AUPRC (area under precision-recall curve) — 0.966 на датасете Decagon[5]. В этом датасете содержатся данные из баз побочных эффектов TWOSIDES [6], OFFSIDE [6] и SIDER [7], а также данные о белках, полученные из баз данных STITCH [8] и STRING [9].

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

Результаты работы некоторых моделей на лекарствах без известных взаимодействий:

Модель

AUROC

AUPRC

TriVec

0.44 ± 0.016

0.535 ± 0.007

ComplEx

0.352 ± 0.004

0.481 ± 0.004

Decagon

0.303 ± 0.009

0.453 ± 0.004

Лекарств с малым количеством взаимодействий достаточно много — около 17% датасета. Также каждый год на фармацевтический рынок выходят новые препараты, для которых совместные побочные эффекты неизвестны вообще. Для таких случаев и нужны более совершенные модели, способные их предсказывать.

Один из сценариев использования подобных моделей — разработка схемы клинических испытаний. Когда производят новые препараты, проводят клинические тестирования в том числе и для выявления возможных побочных эффектов лекарства. Но исследований совместных побочных эффектов не делают, поскольку возможное количество испытаний слишком велико. Здесь и поможет модель: в дизайн эксперимента можно включить тестирование предсказаний, которые модель посчитает правдоподобными.

Как я решила доработать модель

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

Способы векторного представления молекулы

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

Различаются и способы получения представлений. Какие-то просто являются набором измерений различных свойств (например, молекулярные дескрипторы), какие-то основаны на простых и достаточно понятных алгоритмах (например, различные алгоритмы получения молекулярных отпечатков пальцев), а какие-то получены с помощью моделей машинного обучения (например, модели HVAE [10] и ChemBERTa [11]), и неизвестно, как именно в них представлена химическая информация.

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

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

1. Молекулярные отпечатки пальцев по Моргану [12]. Это один из самых распространенных типов векторного представления. Молекула отображается как битовый вектор, где каждый бит кодирует наличие или отсутствие определенной подструктуры.

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

2. Молекулярные дескрипторы [13]. Вектор представляет собой набор значений различных молекулярных свойств, например, атомной массы и заряда. Это представление широко используются в разных задачах предсказания молекулярных свойств, поэтому его применение может помочь и в текущей задаче.

3. Векторное представление из модели HVAE [14] — Hyperbolic Variational Autoencoder.

Быстро напомню идею модели автоэнкодера: модель пытается научиться отображать входные данные в латентное пространство и обратно.

Источник: neerc.ifmo.ru/wikiИсточник: neerc.ifmo.ru/wiki

Одна из вариаций такой модели — это как раз HVAE, использующая в качестве скрытого пространства гиперболическое. На вход модели подается структура молекулы в виде SMILES-строки [15].

Структура молекулы ибупрофена в виде SMILES-строкиСтруктура молекулы ибупрофена в виде SMILES-строки

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

Источник:Yu Ke, Visweswaran Shyam, Batmanghelich Kayhan. Semi-supervised hierarchical drug embedding in hyperbolic space // Journal of Chemical Information and Modeling. –– 2020.Источник: Yu Ke, Visweswaran Shyam, Batmanghelich Kayhan. Semi-supervised hierarchical drug embedding in hyperbolic space // Journal of Chemical Information and Modeling. –– 2020.

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

Модель TriVec

Модель TriVec в своей основе использует принцип матричного разложения.

Модели такого типа устроены по одному принципу. Каждой вершине i сопоставляется векторное представление (эмбеддинг) ei ∈ Rd, каждому ребру сопоставляется эмбеддинг wi ∈ Rl. Обучающие данные состоят из троек (h, r, t), где h — вершина из которой исходит ребро, t — вершина в которую входит ребро, а r — тип ребра. У каждой модели есть функция оценки f (h, r, t), которая показывает правдоподобность тройки: чем выше значение функции, чем более правдоподобна тройка. Функция оценки использует эмбеддинги вершин eh, et и ребра wr для подсчета значения. Обучение происходит путем минимизации функции потерь L которая вычисляется по значениям функции оценки на истинных тройках (существующих в графе) и ложных (негативных).

image-loader.svg

В модели TriVec каждая вершина i и ребро j имеют по три эмбеддинга заданного размера K (обозначаются как (e1i, e2i, e3i) и (w1i, w2i, w3i)). То есть эмбеддинги вершин и ребер имеют размер K3. Эмбеддинги инициализируются случайно.

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

L^{TriVec}(h,r,t)=-2*f(h,r,t)+log\left( \sum_{t'\in\{\epsilon \setminus t\}} exp(f(h,r,t'))\right)++ log\left(\sum_{h'\in\{\epsilon \setminus t\}} exp(f(h',r,t))\right)+\frac\lambda3 \sum_{i=1}^3(|e_h^i|^3+|w_r^i|^3+|e_t^i|^3),

где E — множество всех сущностей.

Функция оценки TriVec выглядит следующим образом:

f_{TriVec}(h,r,t)=<e^1_h,w^1_r,e^3_t>+<e^2_h,w^2_r,e^2_t>+<e^3_h,w^3_r,e^1_t>,» src=«https://habrastorage.org/getpro/habr/upload_files/416/392/659/416392659d78760751b1496b682ef432.svg» /></p>

<p>где <...> — скалярное произведение.</p>

<h4>Изменение структуры графа</h4>

<p>После этого мне нужно было выбрать способы, как добавить информацию в модель. Здесь мне здорово помогла мой научный руководитель Нина Лукашина. Мы обсуждали, пробовали, меняли и пробовали снова. Это было время бесконечных вычислительных экспериментов, многие из которых проваливались.</p>

<p>В итоге мы остановились на трёх способах улучшения модели.</p>

<p><strong>1. Изменение случайной инициализации эмбеддингов вершин и ребер на химическое представление.</strong></p>

<p>Этот способ был выбран, как самое простое и распространенное улучшение. В качестве инициализирующих векторов использовалось одно из трех векторных представлений, описанных выше (тип представления является параметром).</p>

<p><strong>2. Добавление в граф нового типа ребра с весом.</strong></p>

<p>Введение такого ребра позволит распространять информацию между похожими лекарствами. Идея состоит в том, чтобы вес зависел от химической схожести молекул следующим образом: </p>

<ul><li><p>чем более схожи два лекарства, тем вес больше; </p></li><li><p>чем больше степень вершины, тем вес меньше.</p></li></ul>

<p>Обратная пропорциональность степени вершины и веса обусловлена следующим: на лекарствах с большим количеством связей модель и так показывает достаточно хорошие результаты, поэтому улучшение обучения необходимо только для вершин со сравнительно небольшими степенями.</p>

<p>Для подсчета схожести мы использовали векторные представления молекул. Поскольку часто эти представления рассчитаны как раз на то, чтобы считать схожесть молекул, им обычно соответствует некая функция схожести. Для молекулярных отпечатков пальцев по Моргану это коэффициент Танимото, а для векторов, полученных из модели HVAE, — близость в гиперболическом пространстве. </p>

<p>Определим функцию потерь для нового типа ребер следующим образом: </p>

<p><img alt=

где rweighted— новый тип ребра.

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

weight(h,t)=similarity(h,t)*inverse\_deg(t),где\ inverse\_deg(x)=1-\frac{degree(x)-min\_degree}{max\_degree=min\_degree},

а similarity (h, t) — функция схожести, соответствующая выбранному типу векторного представления.

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

image-loader.svg

где window_size (h, t) = lower_bound+inverse_deg (h)*inverse_deg (t)*(upper_bound-lower_bound), lower_bound=0.5, upper_bound=20 (так же подбирались исходя из данных).

Подводя итог, в этом улучшении параметром также является тип векторного представления. C молекулярными отпечатками пальцев по Моргану и векторами, полученными из модели HVAE, использовалась функция weight1для подсчета весов, для молекулярных дескрипторов —weight2, поскольку для них нет естественной функции схожести.

3. Приближение эмбеддингов лекарств с малым количеством взаимодействий к топ-N лекарств, похожим по одиночным побочным эффектам, с помощью MSE loss.

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

Алгоритм такой: для каждого лекарства берется топ-

© Habrahabr.ru