A CHEMBL-OG Publier, Réseau neuronal multitâche sur ChEMBL avec PyTorch 1.0 et RDKit, par Eloy, depuis 2019 a montré comment utiliser les données de ChEMBL pour former un réseau neuronal multitâche pour la prédiction de la bioactivité – spécifiquement pour prédire les cibles où une molécule donnée pourrait être bioactive . Eloy a des liens vers plus d’informations dans son article de blog, mais les réseaux de neurones multitâches sont assez intéressants car la façon dont les informations sont transférées entre les différentes tâches pendant la formation peut entraîner des prédictions pour les tâches individuelles qui sont plus précises que ce que vous obtiendriez si vous vient de construire un modèle pour cette tâche seule.
C’est un grand contraste avec la plupart des humains : nos performances ont tendance à baisser dès que nous commençons à faire du multitâche. Dans tous les cas, je trouve que c’est un problème intéressant et Eloy a fourni tout le code nécessaire pour récupérer les données de ChEMBL et reproduire son travail, j’ai donc décidé de reprendre cela et de construire un flux de travail KNIME pour utiliser le modèle multitâche. Pour une fois, je n’ai pas eu à passer beaucoup de temps avec la préparation des données (merci, Eloy !), donc j’ai pu utiliser directement les notebooks Jupyter d’Eloy pour former et valider un modèle. Après avoir laissé mon poste de travail tourner pendant un certain temps, j’avais un modèle formé prêt à l’emploi; maintenant, j’avais juste besoin de créer un flux de travail de prédiction.
Charger le réseau et générer des prédictions
Les ordinateurs portables d’Eloy construisent le réseau neuronal multitâche à l’aide de PyTorch, que la plate-forme de mon entreprise ne prend pas directement en charge, mais heureusement, les deux plates-formes prennent en charge le ONNX (Open Neural Network Exchange) pour échanger des réseaux formés entre des boîtes à outils de réseaux neuronaux. J’ai donc pu exporter mon modèle PyTorch formé pour la prédiction de la bioactivité dans ONNX, le lire dans la plate-forme de mon entreprise avec le Lecteur réseau ONNX nœud, convertissez-le en réseau TensorFlow avec le Convertisseur réseau ONNX vers TensorFlow nœud et générer des prédictions à l’aide du Exécuteur de réseau TensorFlow nœud.
Maintenant que le réseau formé est chargé dans la plate-forme, je dois créer l’entrée appropriée. Étant donné que le modèle a été entraîné à l’aide de Kit RDKc’est assez facile en utilisant le Intégration RDKit KNIME.
Je sais que le modèle a été formé à l’aide de l’empreinte Morgan du RDKit avec un rayon de 2 et une longueur de 1024 bits et je peux générer les mêmes empreintes avec le Empreinte digitale RDKit nœud. Comme je ne peux pas transmettre directement les empreintes digitales au réseau de neurones, j’ajoute également un Développer le vecteur de bits noeud pour convertir les bits individuels des empreintes digitales en colonnes dans la table d’entrée. Les composés pour lesquels nous allons générer des empreintes digitales sont lus à partir d’un fichier texte contenant SMILES et une colonne avec des ID de composés que nous utiliserons comme noms. L’échantillon de données utilisé dans ce billet de blog (et pour l’exemple de flux de travail) est composé d’un ensemble de molécules exportées de ChEMBL et de quelques composés inventés que j’ai créés en modifiant manuellement les molécules de ChEMBL.
La sortie du Exécuteur de réseau TensorFlow node est un tableau avec une ligne pour chaque molécule pour laquelle nous avons généré une prédiction et une colonne pour chacune des 560 cibles sur lesquelles le modèle a été formé. Les cellules contiennent les scores des composés par rapport aux cibles correspondantes, figure 2.
À ce stade, nous avons un flux de travail de prédiction assez minimal : nous pouvons utiliser le réseau neuronal multitâche pour générer des scores pour de nouveaux composés. Dans le reste de cet article, je montrerai quelques façons de présenter les résultats afin qu’il soit un peu plus facile pour les gens de travailler de manière interactive avec eux.
Affichage des prédictions dans une carte thermique interactive
La première vue interactive que nous utiliserons pour afficher les prédictions du réseau neuronal multitâche comprend une carte thermique avec les prédictions elles-mêmes et une vue en mosaïque montrant les molécules pour lesquelles les prédictions ont été générées. La carte thermique a les composés en lignes et les cibles en colonnes avec la coloration de la cellule déterminée par les scores calculés. La vue en mosaïque est configurée pour n’afficher que les lignes sélectionnées.
Le composant “afficher les prédictions sous forme de carte thermique” qui expose cette vue interactive est configuré de manière à ce que seules les lignes sélectionnées soient transmises à son port de sortie. Ainsi, dans l’exemple illustré à la figure 3, il n’y aurait que deux lignes dans la sortie du composant “afficher les prédictions sous forme de carte thermique”.
Le flux de travail effectue une quantité importante de traitement de données afin de construire la carte thermique. Je n’entrerai pas dans les détails ici, mais le travail principal se produit dans le métanoeud « reformater avec bisorting », qui réorganise les composés et les cibles en fonction de leurs scores médians. Cela amène les cibles qui ont plus de composés à score élevé à gauche de la carte thermique et les composés avec des scores élevés contre plus de cibles en haut de la carte thermique. Qualitativement, la carte thermique devrait devenir plus rouge lorsque vous vous déplacez vers le haut et vers la gauche et plus bleue lorsque vous vous déplacez vers le bas et vers la droite. Il n’y a pas de meilleure réponse quant aux meilleurs critères de tri à cet effet, alors n’hésitez pas à jouer avec les paramètres des nœuds de tri dans le métanoeud “reformater avec bisorting” si vous souhaitez essayer autre chose que la médiane.
Comparer les prédictions aux valeurs mesurées
Un excellent moyen d’avoir confiance dans les prédictions d’un modèle consiste à les comparer aux données mesurées. En règle générale, nous ne pouvons pas le faire, mais parfois, des données mesurées pertinentes seront disponibles pour les composés pour lesquels nous générons des prédictions. Dans ces cas, il serait formidable d’afficher ces données mesurées avec les prévisions. Le reste du flux de travail est là pour nous permettre de faire exactement cela, Figure 5.
Cela commence par générer des clés InChI pour les molécules de l’ensemble de prédiction, en les recherchant à l’aide de l’API ChEMBL REST, puis en utilisant à nouveau l’API pour trouver les données d’activité pertinentes qui ont été mesurées pour ces composés. Daria Goldman a écrit un article de blog, intitulé Une méthode RESTful pour rechercher et récupérer des données il y a quelques années, montrant comment faire cela. J’ai peaufiné les composants qu’elle a introduits dans ce billet de blog pour ce cas d’utilisation et j’ai tout combiné dans le métanode “récupérer les données ChEMBL lorsqu’elles sont présentes”.
Le tableau de sortie du métanoeud comporte une ligne pour chaque composé, un ID ChEMBL pour chaque composé trouvé dans ChEMBL et une colonne pour chaque cible où il y avait une valeur expérimentale dans ChEMBL pour l’un des composés de l’ensemble de prédiction. Ces données peuvent être visualisées, ainsi que les prédictions à l’aide du composant “Afficher les prédictions et les mesures”, Figure 6.
Cette vue interactive est principalement basée sur le nuage de points en haut. Chaque point du graphique correspond à un composé avec des données mesurées par rapport à une cible. Les CHEMBLID des cibles sont sur l’axe X et les valeurs pCHEMBL mesurées (telles que fournies par les services Web ChEMBL) sont sur l’axe Y. La taille des points dans le tracé est déterminée par le score calculé de ce composé pour cette cible. Le nuage de points est interactif : la sélection de points affiche les composés pertinents dans le tableau en bas à gauche de la vue et les scores correspondants et les données mesurées dans le tableau en bas à droite.
Si le modèle fonctionne très bien, je m’attendrais à ce que le nuage de points de la figure 6 ait de grands scores (gros points) pour les composés qui ont une activité élevée (grandes valeurs de pCHEMBL), c’est-à-dire des points plus grands vers le haut de la parcelle et plus petits pointe vers le bas. C’est plus ou moins ce qu’on observe. Il y a clairement des valeurs aberrantes, mais il est probablement toujours acceptable de prêter au moins une certaine attention aux prédictions du modèle pour les autres composés/cibles. (Remarque : il ne s’agit pas d’une évaluation entièrement valide, car la plupart des points de données que j’utilise dans cet exemple se trouvaient en fait dans l’ensemble d’apprentissage du modèle. L’exemple est présenté ici afin de démontrer la vue et son interactivité.)
Emballer
Dans cet article de blog, j’ai montré comment importer un réseau neuronal multitâche pour la prédiction de la bioactivité construit avec PyTorch dans un flux de travail, puis l’utiliser pour générer des prédictions pour de nouveaux composés. J’ai également montré quelques vues interactives pour travailler avec et gagner en confiance dans les prédictions du modèle. Le flux de travail, le modèle formé et les exemples de données sont disponibles sur le hub pour que vous puissiez les télécharger, en tirer des enseignements et les utiliser dans votre propre travail.
Téléchargez le flux de travail “générer des prédictions avec ONNX” depuis le hub ici.
Tel que publié pour la première fois sur le blog KNIME.