Je réimprime ce que j'ai écrit dans le passé. Il peut être proche de notes diverses. Je ne sais pas.
Créez une nouvelle molécule. En particulier, qu'avez-vous fait jusqu'à présent concernant la conception de «nouvelles molécules utiles avec les propriétés physiques souhaitées»? Par exemple, dans le domaine de la découverte de médicaments, je pense qu'elle est créée en utilisant non seulement la théorie de base de la chimie, mais aussi des règles empiriques, le coefficient de Tanimoto, le calcul de la chimie quantique etc .... (je pense qu'il y en a d'autres). Je vais (vérifier moi-même).
Récemment, il semble y avoir un grand pas en avant pour que l'apprentissage automatique fasse ce qui précède.
Parmi eux, celui auquel nous avons prêté attention cette fois était le groupe Aspuru-Guzik de l'Université de Harvard, qui avait un grand nombre de citations de 213. 「Automatic Chemical Design Using a Data-Driven Continuous Representation of Molecules」(1) Et un programme créé sur cette base Il s'agit du «VAE chimique» (2).
Il s'agit d'une technologie qui utilise word2vec (Seq2Seq) appelée SMILES2vec. Pour en savoir plus à ce sujet, veuillez consulter le précédent Mon article.
Ce qui suit est le flux de la nouvelle génération de molécules auquel j'ai pensé après avoir lu l'article.
Tout d'abord, la chaîne de caractères représentée par le composé est vectorisée par un encodeur pour générer un espace latent (espace vectoriel). Chaque position dans cet espace vectoriel est une chaîne de caractères de SMILES, et il semble que plus la position (exprimée plus tard par z) est proche, plus la structure existe. Utilisez le décodeur pour le reconvertir en une chaîne similaire autant que possible. Nous formerons également les encodeurs et les décorateurs afin qu'ils puissent être encodés et décodés avec succès.
Après cela (on peut dire "en même temps"), f (z) est généré comme le montre la figure ci-dessous en apprenant les valeurs de propriétés physiques des molécules correspondant à l'espace vectoriel avec un réseau neuronal.
Cela n'a pas de sens de dire que c'est une nouvelle molécule si elle n'a pas les propriétés physiques que vous souhaitez, non? Bien que la technologie introduite cette fois-ci soit une nouvelle génération de molécules, Règle empirique pharmaceutique selon laquelle "une molécule avec une structure proche d'une molécule connue avec de bonnes propriétés physiques peut également avoir de bonnes propriétés physiques (beaucoup?)"? Il semble y avoir une idée comme celle-ci. En d'autres termes, cela semble prendre le processus de codage d'une molécule connue avec de bonnes propriétés physiques dans cet espace latent appris, la recherche autour de la position de cette molécule dans l'espace latent et la recherche d'une nouvelle molécule. Après cela, le décodeur entraîné génère des SMILES de la molécule. Lorsqu'il est finalement généré, RDkit est utilisé pour déterminer s'il tient en tant que molécule.
La figure ci-dessous semble être le résultat. La molécule centrale est entourée d'un carré. A partir de là, la relation positionnelle de l'espace latent s'exprime.
Le flux jusqu'à ce point est dans ma compréhension.
Lorsque vous faites un exemple, entrez Chemical_vae avec conda ou pip.
Tout d'abord, la partie import
intro_to_chemvae.ipynb
# tensorflow backend
from os import environ
environ['KERAS_BACKEND'] = 'tensorflow'
# vae stuff
from chemvae.vae_utils import VAEUtils
from chemvae import mol_utils as mu
# import scientific py
import numpy as np
import pandas as pd
# rdkit stuff
from rdkit.Chem import AllChem as Chem
from rdkit.Chem import PandasTools
# plotting stuff
import matplotlib.pyplot as plt
import matplotlib as mpl
from IPython.display import SVG, display
%config InlineBackend.figure_format = 'retina'
%matplotlib inline
L'ensemble de données utilise l'ensemble de données zinc. Cet ensemble de données contient des SMILES et des propriétés physiques (QED (évaluation de la ressemblance avec le médicament), SAS (score d'accessibilité synthétique), logP (coefficient d'octanol)).
Aussi, ・ Smiles_1 spécifie la molécule centrale. ・ Le bruit est la distance (z) de la molécule centrale dans l'espace latent. -L'échantillonnage aléatoire est effectué dans la plage z, et il peut ne pas être possible d'en trouver un pour lequel SMILES tient avec un seul essai, j'ai donc essayé d'utiliser l'instruction for 500 fois. -La reconstruction est vectorisée par le codeur qui a appris la molécule centrale et sortie par le décodeur appris. (Les résultats ci-dessous ne semblent pas fonctionner, mais vous devez modifier la méthode d'apprentissage et les paramètres.)
vae = VAEUtils(directory='../models/zinc_properties')
smiles_1 = mu.canon_smiles('CSCC(=O)NNC(=O)c1c(C)oc(C)c1C')
for i in range(500):
X_1 = vae.smiles_to_hot(smiles_1,canonize_smiles=True)
z_1 = vae.encode(X_1)
X_r= vae.decode(z_1)
print('{:20s} : {}'.format('Input',smiles_1))
print('{:20s} : {}'.format('Reconstruction',vae.hot_to_smiles(X_r,strip=True)[0]))
print('{:20s} : {} with norm {:.3f}'.format('Z representation',z_1.shape, np.linalg.norm(z_1)))
print('Properties (qed,SAS,logP):')
y_1 = vae.predict_prop_Z(z_1)[0]
print(y_1)
noise=3.0
print('Searching molecules randomly sampled from {:.2f} std (z-distance) from the point'.format(noise))
・ Résultat de sortie
Using TensorFlow backend.
Standarization: estimating mu and std values ...done!
Input : CSCC(=O)NNC(=O)c1c(C)oc(C)c1C
Reconstruction : CH1nCNc1Cs)Nccccc(CCc1)c3
Z representation : (1, 196) with norm 9.901
Properties (qed,SAS,logP):
[0.72396696 2.1183593 2.1463375 ]
Searching molecules randomly sampled from 3.00 std (z-distance) from the point
À la fin, nous obtiendrons ce que nous avons trouvé, qui est unique et déterminé par RDkit.
df = vae.z_to_smiles( z_1,decode_attempts=100,noise_norm=noise)
print('Found {:d} unique mols, out of {:d}'.format(len(set(df['smiles'])),sum(df['count'])))
print('SMILES\n',df.smiles)
if sum(df['count']) !=0:
df1=pd.DataFrame(df.smiles)
df1.to_csv("result1.csv",mode='a',index=False,header=False)
Résultat de sortie ci-dessous
result1.csv
ON cCO=COCC(O)ccN2cs2c
CCCCCCNc-1cO-SCOCCcccc1
CC1CCcC(-nOcc1ccccCCC1)c1 O
OC (C)C(=Occc3cccccccc)CB
CCC1oNCc2cCcccccc2cccc1 1 1
CO CC(1c(O=O1O(1cO)nC))1
C=C1nn(=O)SnNccccccocc1C
CC C@Cs(=CN=11cccc2cc1Cc)2c1
C OcCCc(CO)c1nccc=Occccc1C
O1Cc(c1CCO)CNCC=BBOCCCN
CC ON(FCNN(C)ccc(Ocn1)1)l
C1ccnccnccccccccncccscc1
CC(CScc(c1cOn1nc1CCl)C)1
CCCCc(-ncccc21nc1c1c2)1CCC
C cnc(Cnncncc(C())Cl)Cl1 1
Il y en a qui ne deviennent probablement pas des molécules même si elles sont passées par RDkit. .. .. Cependant, il semble éviter de nombreuses erreurs de syntaxe. RDkit compétent. ..
c'est tout
1)Automatic Chemical Design Using a Data-Driven Continuous Representation of Molecules https://pubs.acs.org/doi/abs/10.1021/acscentsci.7b00572 2)chemical_vae https://github.com/aspuru-guzik-group/chemical_vae 3) Formation de composés par Deep Learning (médicaments, molécules organiques luminescentes) https://ritsuan.com/blog/8480/
Recommended Posts