Современные результаты с использованием нейронных сетей Chemprop и графов

В этом посте мы используем машинное обучение / ИИ для прогнозирования свойств малых молекул (задача, известная как QSAR). Для этого используются современные графические нейронные сети из библиотеки с открытым исходным кодом Chemprop.

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

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

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

Какие входные данные?

Прогнозирование химических свойств традиционно известно как модели количественного отношения структура-активность (QSAR). Входными данными для этих моделей является строковое представление молекулы, также известное как строка «УЛЫБКИ». Например, это может выглядеть примерно так:

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

Что это за модель Chemprop?

Модель Chemprop была опубликована в 2019 году в [1], но с тех пор постоянно обновлялась и показывала свою ценность в ряде более поздних публикаций, в первую очередь в [2], где они использовали ее для выявления новых потенциальных антибиотических соединений.

В основе Chemprop лежит нейронная сеть передачи сообщений, реализованная в Pytorch, что означает, что входными данными для модели является графическое представление молекул. Тем не менее, помимо работы непосредственно с графиком, Chemprop также автоматически использует более классические производные химические характеристики, что означает, что в целом он хорошо работает (по сравнению с другими моделями) как с небольшими, так и с большими наборами данных. Для получения дополнительной информации рекомендую прочитать статью [1].

Chemprop можно установить из PyPI: pip install chemprop.

Приступим: 3 строки кода

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

В Интернете можно найти множество похожих наборов данных, например, ознакомьтесь с этими тестами. При типичном использовании Chemprop мы должны пройти следующие шаги: 1) оптимизировать гиперпараметры модели, 2) обучить модель и 3) выполнить прогнозы для нового набора молекул.

Шаг 1: Настройте гиперпараметры.

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

Шаг 2. Обучите модель

Когда идеальные гиперпараметры определены и сохранены в data/config.json, мы можем затем обучить модель с этими параметрами:

Здесь следует отметить несколько интересных параметров:

  • num_folds: мы создаем 5 складок (разные тренировочные / тестовые) и обучаем / оцениваем модель на каждой из этих складок.
  • ensemble_size: мы создаем ансамбль из 3-х моделей с разной инициализацией, что улучшит среднюю производительность. Обратите внимание, что каждая из этих 3 моделей имеет 5 складок, поэтому в общей сложности мы обучаем модель 15 раз!
  • split_typeПри создании наших внутренних разделений поездов / тестов мы гарантируем, что похожие молекулы помещены в одни и те же складки, чтобы получить более реалистичную меру обобщения.

Во время моего тренировочного прогона я получил следующий результат: Overall test AUC: 0.871 +/- 0.036 - то есть довольно многообещающие результаты перекрестной проверки обучения.

Шаг 3: Оцените модель на новых данных.

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

В результате будет создан файл predictions.csv с прогнозами для соединений в нашем тестовом наборе данных. Обратите внимание, что эти прогнозы являются средним значением для 15 моделей, обученных на предыдущем шаге. Сопоставляя это с истинными ценностями, мы получаем следующее:

Неплохо при минимальных усилиях! 👏

Шаг вперед: интерпретация

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

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

Вкратце, здесь «оценка важности» данного атома или связи в молекуле рассчитывается как градиент предсказанной цели по отношению к характеристикам этого атома или связи; то есть, чем больше абсолютная сумма градиентов, приписываемых данной связи / атому, тем более важным для предсказания предполагается, что связь / атом. Карты чувствительности, генерируемые непосредственно таким образом, как известно, очень зашумлены. Поэтому BayesGrad предлагает использовать выпадение для выборки апостериорного распределения p (W | D) сетевых параметров W, что позволяет нам вычислять среднее значение градиентов из всех этих выбранных сети, таким образом сглаживая результаты. Вместо того, чтобы полагаться на включение исключения в Chemprop, мы вместо этого выбираем p (W | D), просто используя веса W из сверток перекрестной проверки и ансамблевых моделей. - т.е. для набора из 20 моделей мы вычисляем среднюю сумму градиентов для каждого атома и связи.

Заключительные замечания

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

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

[1] Кевин Янг и др., Анализ полученных молекулярных представлений для прогнозирования свойств (2019), J. Chem. Инф. Модель. 2019, 59, 8, 3370–3388

[2] Джонатан М. Стоукс и др., Подход с углубленным изучением к открытию антибиотиков (2020), Cell, 180, 4, P688–702.E13