Разработайте генеративную модель глубокого обучения LSTM для дизайна и скрининга молекул COVID-19 с помощью Python, Google Colab и AutoDock Vina.

Иголка в стоге сена

В среднем требуется десять лет и 2,6 миллиарда долларов, чтобы принять лекарство с точки зрения понимания первопричины заболевания до его доступности на рынке. Большая часть этого времени и усилий / затрат связана с тем, что мы буквально ищем иголку в стоге сена. Мы ищем одну молекулу, которая может остановить болезнь на молекулярном уровне в пространстве раствора от 10 ³ до синтетически возможных молекул Google (да, 10). Пространство химического раствора слишком велико, чтобы его можно было эффективно проверить на наличие конкретной интересующей молекулы. Хранилища фармацевтических соединений содержат только часть синтетически возможных молекул для исследования в влажной лаборатории.

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

Цель

Большинство изображений в СМИ о COVID-19 были связаны с коронавирусом с его выступающими шипами. Эти шипы представляют собой S-белки, которые связываются с клетками человека и позволяют вирусу их инфицировать.

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

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

Обзор решения

Подход заключается в создании нейронной сети с глубоким обучением искусственного интеллекта, которая научится создавать молекулы лигандов. Затем на основе обученной нейронной сети строится генеративная модель для создания новых синтетических молекул. AutoDock Vina используется для виртуального скрининга новых молекул с целью оценки их эффективности в отношении связывания с основной протеазой COVID-19.

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

Рабочий процесс высокого уровня:

  • Получите и подготовьте данные для обучения молекулы
  • Создайте модель нейронной сети и обучите ее делать молекулы.
  • Разработайте генеративную модель ИИ и создайте новые молекулы
  • Виртуальный скрининг новых молекул против основной протеазы COVID-19
  • Используйте трансферное обучение для обучения нейронной сети более конкретной задаче.
  • Создавайте новые молекулы ИИ, используя генеративную модель
  • Виртуальный скрининг новых молекул против основной протеазы COVID-19

Данные о молекулах

Данные о молекулах, используемые для обучения нашей нейронной сети, будут в упрощенной системе ввода строки молекулярного ввода или в формате «SMILES». Это спецификация для описания структуры химических объектов с использованием комбинации символов, цифр и специальных символов. Все дело в УЛЫБКАХ :)

439 098 молекул были получены из комбинации наборов данных Moses и ChEMBL. Данные SMILES были очищены от любых солей, зарядов и стереохимической информации с помощью RDKIT - программного пакета Cheminformatics с открытым исходным кодом и Python API. Весь код и данные для этой статьи можно найти в моем репозитории GitHub.

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

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

AI нейронная сеть

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

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

Модели нейронных сетей были созданы с использованием Python 3.7, TensorFlow 2.2 и высокоуровневой среды программирования Keras. Модели были обучены с помощью Google Colab с графическим процессором Tesla P100. Хотя существует бесплатная версия Google Colab, платная версия обеспечивает более длительное время работы и доступ к значительно более быстрым графическим процессорам; стоит своих денег.

Ключевым первым шагом в Google Colab является настройка параметров ноутбука Jupyter: установите аппаратное ускорение на GPU, а форму времени выполнения на High-RAM. Вы можете использовать приведенный ниже код, чтобы включить графический процессор и смонтировать Google Диск.

# mount Google Drive
from google.colab import drive
drive.mount('/drive')

Входные данные SMILES необходимо преобразовать в формат, подходящий для обучения с учителем. Функция используется для добавления начального (!) И конечного символа (E) маркеров, добавления заполнения для постоянной длины последовательности и преобразования каждой последовательности SMILES в последовательность векторов с горячим кодированием.

Нейронные сети LSTM ожидают, что ваши входные данные будут трехмерным тензором формы (количество выборок, количество временных шагов, количество функций). Здесь мы выбрали значение временного шага 100. Это означает, что:

  • Максимальная входная и выходная длина наших молекулярных последовательностей составляет 100 символов.
  • Во время обучения все входные данные будут иметь длину 100 символов с символом «E», действующим как отступ от конца молекулы SMILES до 100.

Количество функций равно длине нашего набора символов, 45.

Теперь мы определяем нашу модель нейронной сети.

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

Модель декодера извлекает скрытые LSTM и состояния ячеек из сжатых данных. Эти состояния затем используются в качестве входных параметров для уровня обработки LSTM. Наконец, мы используем плотный слой softmax для генерации вывода модели.

Краткое описание архитектуры модели нейронной сети приведено ниже.

Модель была скомпилирована с использованием оптимизатора Адама и категориальной кроссентропии для нашей функции потерь. Из-за количества обучающих данных генераторы Python использовались для пакетной подачи обучающих данных в модель.

Модель была обучена в течение 225 эпох, что дало точность обучения 99,86% и точность проверки 99,63%. Модель достигла точности 99,66% на тестовом наборе данных.

Разложение модели AI

Базовая модель теперь разбита на составные части, которые будут использоваться для построения генеративной модели. Если вы помните, первоначальная архитектура модели состояла из двух связанных моделей нейронных сетей - кодировщика и декодера. Теперь, когда двухчастная модель обучена скоординированным образом, мы разбиваем соответствующие модели на части и добавляем третью, промежуточную модель.

Сначала мы создаем автономную модель кодировщика из нашей базовой модели.

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

Теперь создайте автономную модель декодера. Хотя базовая модель была обучена в пакетном режиме без сохранения состояния, здесь мы установили модель декодера с отслеживанием состояния, чтобы предсказывать один символ SMILES за раз. Слои модели нейронной сети определены точно так же, как и раньше, за исключением нового входного batch_shape (который требуется для модели LSTM с отслеживанием состояния). Затем мы переносим обученные веса из нашей базовой модели в автономную модель декодера.

Поскольку эта модель будет предсказывать один символ улыбки за раз, мы используем входной слой формы: образцы = 1, временные шаги = 1, функции = 45.

De Novo Molecule Generation

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

Для создания новых молекул мы создаем настраиваемую функцию, которая позволяет нам играть с температурой функции активации Softmax во время создания молекулы. Уменьшение температуры с 1 до некоторого меньшего числа (например, 0,5) делает модель более консервативной с ее образцами. И наоборот, более высокая температура (›1) обеспечит большее разнообразие в наших образцах, но также увеличит количество образованных уродливых / недействительных молекул. Концептуально это можно представить как введение различных уровней мутации.

Для получения дополнительной информации об этой функции, пожалуйста, посетите блог Андрея Карпати (да, Tesla AI).

Чтобы сгенерировать новые молекулы из скрытого пространства, созданного кодировщиком, нам необходимо вычислить скрытые LSTM и состояния ячеек, используя latent_to_states_model, а затем использовать их в качестве входных состояний для генеративной модели. В режиме вывода в генеративную модель будет подаваться по одному входному символу за раз и итеративно отбираться следующий символ, пока не будет встречен конечный символ.

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

Струны SMILES совпадают при обеих температурах отбора проб. Затем мы оцениваем процент недействительных молекул SMILES, созданных нашей генеративной моделью.

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

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

Наконец, мы создаем цикл «FOR» для генерации партии молекул SMILES с использованием векторов-затравок в нашем скрытом пространстве.

Это выбирает случайную температуру активации Softmax от 0,75 до 1,25 и пытается сгенерировать до 50 допустимых молекул в векторном пространстве вокруг каждого затравки.

Создайте лиганды COVID-19

Набор данных, используемый для создания наших латентных векторов космических семян, представляет собой набор из 500 молекул, которые, как известно, являются эффективными ингибиторами РНК-зависимой РНК-полимеразы (RdRp) вируса SARS-CoV. Белок RdRp присутствует во всех РНК-вирусах, у которых отсутствует стадия ДНК; это включает вирус Зика, вирус Эбола и коронавирусы. Набор данных также включал несколько лигандов-ингибиторов ВИЧ.

Цикл генерации молекул был выполнен три раза, сгенерировав 4 927 новых молекул SMILES, которые были сохранены для виртуального скрининга.

Анализ стыковки

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

AutoDock Vina от Научно-исследовательского института Скриппса используется для выполнения виртуального стыковочного анализа между целевым белком (основная протеаза COVID-19) и нашими лигандами (молекулы, генерируемые ИИ). Набор скриптов Python, разработанный Сари Саббан (AutoDock.py) и несколько созданных мной, помогут в процессе виртуального просмотра.

Подготовить цель

Первым шагом виртуального скрининга является загрузка и подготовка целевого белка для стыковочного анализа. Основную протеазу COVID-19 можно скачать из RCSB Protein Data Bank. Найдите 6LU7 и загрузите его в формате PDB (Protein Data Bank).

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

grep ATOM 6lu7.pdb > temp.pdb 

Файл необходимо преобразовать в формат .pdbqt для использования с AutoDock Vina; Файлы .pdbqt - это файлы банка данных белков, в которых к каждому атому в структуре применяется заряд. Используйте команду ниже, чтобы выполнить преобразование.

python AutoDock.py -r temp.pdb

В результате будет выведен файл с именем рецептор.pdbqt; это целевой белок для нашего стыковочного анализа.

Следующим шагом является определение области поиска для анализа стыковки. Это область поиска, в которой AutoDock Vina будет оценивать способность лиганда связываться с целевым белком. Выполните следующую команду в окне терминала.

pymol AutoDock.py -b receptor.pdbqt

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

Box("sele", x, y, z)

Где x, y и z - величины пространства поиска в одном направлении от центра вдоль соответствующей оси. Размеры указаны в ангстремах.

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

Подготовьте лиганды

Наша генеративная модель AI выводит выбранные молекулы в формате SMILES. Их необходимо преобразовать в формат файла .pdbqt для нашего анализа стыковки.

Сначала преобразуйте ваши SMILES в файлы .sdf с помощью smi_sdf_ligands.py. Эта программа Python позволяет пользователю указать имя семейства лигандов, увеличивает имя (например, имя-1, имя-2) и присваивает его каждому выходному файлу .sdf. Программа также создает электронную таблицу сопоставления имени и улыбки, чтобы вы могли сопоставить результаты анализа стыковки с их исходной молекулой SMILES.

Теперь преобразуйте файлы .sdf в файлы .pdbqt с помощью vina_ligands.py. Этот пакет программ преобразует файлы .sdf в файлы .pdbqt и добавляет полярные атомы водорода к каждой молекуле для стыковки.

Базовый анализ стыковки

Был проведен виртуальный стыковочный анализ между Ремдесивиром и основной протеазой COVID-19, чтобы определить базовую аффинность связывания с нашими молекулами, генерируемыми ИИ.

Наибольшее отрицательное число указывает на самую прочную связь между лигандом и рецептором. Лучшая оценка связывания Ремдесивира составила -11,8. Обратите внимание на режимы; AutoDock Vina использует моделирование методом Монте-Карло для циклического перебора различных конфигураций (режима) лигандных связей для потенциальной стыковки с целью.

Чтобы выполнить пакетный виртуальный скрининг против всех лигандов, сгенерированных ИИ, поместите лиганды (файлы .pdbqt) в каталог под названием «Лиганды». Затем поместите этот каталог, рецептор.pdbqt и исполняемый файл AutoDock Vina в общую папку. Запустите следующий код.

for file in ./Ligands/*/*; do tmp=${file%.pdbqt}; name="${tmp##*/}"; ./vina --receptor receptor.pdbqt --ligand "$file" --out $name.out --log $name.log --exhaustiveness 10 --center_x 0 --center_y 0 --center_z 10 --size_x 15 --size_y 15 --size_z 15; awk '/^[-+]+$/{getline;print FILENAME,$0}' $name.log >> temp; done; sort temp -nk 3 > Results; rm temp; mkdir logs; mv *.log *.out logs

Этот сценарий берет каждый файл лиганда .pdbqt и выполняет анализ стыковки AutoDock Vina с файлом рецептора .pdbqt. После каждого анализа стыковки он будет выводить файл журнала с результатами привязки для каждого режима и файл .pdbqt (но с расширением .out). Когда виртуальный скрининг будет завершен, сценарий соберет результаты из каждого файла журнала анализа, отсортирует их и поместит в один файл результатов.

Вам необходимо ввести свой собственный центр рецептора (x, y, z) и значения ограничивающей рамки поиска (размер x, размер y, размер z); вышеупомянутое - просто заполнители. Вам также необходимо установить значение «полноты» AutoDock Vina, которое определяет, сколько симуляций Монте-Карло будет выполнено во время анализа стыковки. Здесь значение полноты 32 было использовано для первого прохода скрининга кандидатов-лигандов. После первоначального скрининга молекулы с лучшими показателями связывания (наша группа финалистов) снова подвергались скринингу с настройкой полноты 256.

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

Наилучшие показатели связывания по результатам виртуального стыковочного анализа между лигандами, генерируемыми AI, и основной протеазой COVID-19 представлены ниже. В то время как лиганд AM-724 приблизился к оценке связывания Ремдесивира -11,8; остальные заметно ниже базового уровня.

Трансферное обучение

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

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

  • Обновите автономные модели, чтобы использовать недавно обученные веса.
  • Создавайте новые молекулы лигандов, используя эти модели
  • Подготовьте новые лиганды для стыковочного анализа; ничего не нужно делать с целевым белком (основная протеаза COVID-19)
  • Выполните начальный и окончательный виртуальный скрининг новых молекул.

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

Модель трансферного обучения сгенерировала 43 лиганда с показателями сродства связывания лучше, чем у Ремдесивира; 10 лучших указаны ниже.

Мы видим, что использование трансферного обучения улучшило способность модели нейронной сети генерировать более желательные ингибиторы лигандов основной протеазы COVID-19.

На изображениях ниже показаны различные виды лиганда ALM-217, пристыкованного к основной протеазе COVID-19.

Выводы

Вычислительная разработка лекарств de novo может быть полезна либо для ускорения прямого создания ингибитора, либо для обеспечения понимания существующих решений. Искусственный интеллект с глубоким обучением может использоваться для исследования пространства растворов синтетических молекул и создания новых молекул для связывания с мишенью.

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

Следующие шаги

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

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

Благодарности

Поскольку ни один человек не является островом, некоторые благодарности:

  • Доктору Эндрю Нг (@AndrewYNg) за отличное образование в области ИИ
  • Доктору Эсбену Яннику Бьерруму за вдохновение в моделях глубокого обучения.
  • Доктору Сари Саббану за столь необходимую помощь AutoDock Vina