Chem-Ant 紹介

MCTS SolverとGenetic Programmingにより、目標分子に似た分子を出力する為の材料候補を選ぶ。

similarity_ant.pydeap/examples/gp/ant.py のコードを改変しています。

準備

Ubuntuで:

sudo -H -s
apt install python3-pip
pip3 install -r requirements.txt
exit

或いは:

pip3 install deap
pip3 install mcts
pip3 install rdkit
pip3 install global_chem_extensions
pip3 install mcts-solver

或いは:

pip3 install chem-ant

chem-antchem-classification と共に使いたければ:

pip3 install simpletransformers

或いは:

pip3 install chem-classification

使用法

初期値では、 smiles.csv から分子のリストを得る。ターゲットはNirmatrelvirだ。 そのリストからフラグメントの材料として最適なものが選ばれる。 出力されるcsvファイルには、mcts実行途中で出来た分子も含まれる。 csvファイルを smiles list として再利用したければ、 --select オプションを追加する。 インストールせずに直接実行したければ、 python3 similarity_mcts.py --help とする。

similarity-mcts --help
similarity-mcts -i -l1 -e3 -r10 -b500 -p train_smiles
similarity-mcts -i -l1 -e3 -r10 -b500 -p eval_smiles

ターゲットを指定して実行したければ:

similarity-mcts -i -l1 -e3 -r10 -b500 -p train_smiles -t "CC(C)(C)C(NC(=O)C(F)(F)F)C(=O)N1CC2C(C1C1CCNC1=O)C2(C)C"
similarity-mcts -i -l1 -e3 -r10 -b500 -p eval_smiles -t "CC(C)(C)C(NC(=O)C(F)(F)F)C(=O)N1CC2C(C1C1CCNC1=O)C2(C)C"

similarity-mcts は、smilesのリストからフラグメントの材料と成り得る候補を選び出力する。mctsを実行せず、単にその smiles list からターゲットに似た分子を出力したければ:

similarity-genMols --help
similarity-genMols -t "CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C" -m "CC1=CC=CC=C1C(C)C" "Cc1ccccc1CC(C#N)NC1CCNC1=O" -f "gen2.csv"

Chem-Classification

chem-classification 用に json format のデータセットを出力する:

importSmiles -t "CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C" -p "train_smiles"
importSmiles -t "CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C" -p "eval_smiles"

regression model 用のデータセットを出力したければ:

importSmiles -t "CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C" -p "train_smiles" -r
importSmiles -t "CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C" -p "eval_smiles" -r

classification model を訓練し、Nirmatrelvir と YH-53 の類似性を予測する:

from chem_classification.similarity_classification import SimilarityClassification
s = SimilarityClassification()
s.train_and_eval("train_smiles/smiles.json", "eval_smiles/smiles.json")
s.predict_smiles_pair(["CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C", "CC(C)CC(C(=O)NC(CC1CCNC1=O)C(=O)C2=NC3=CC=CC=C3S2)NC(=O)C4=CC5=C(N4)C=CC=C5OC"])

保存したモデルの読み込み:

s = SimilarityClassification("local-path/your-outputs")

regression model を訓練し、 Nirmatrelvir と YH-53 の類似性を予測する:

from chem_classification.similarity_classification import SimilarityRegression
s = SimilarityRegression()
s.train_and_eval("train_smiles/smiles.json", "eval_smiles/smiles.json")
s.predict_smiles_pair(["CC1(C2C1C(N(C2)C(=O)C(C(C)(C)C)NC(=O)C(F)(F)F)C(=O)NC(CC3CCNC3=O)C#N)C", "CC(C)CC(C(=O)NC(CC1CCNC1=O)C(=O)C2=NC3=CC=CC=C3S2)NC(=O)C4=CC5=C(N4)C=CC=C5OC"])

similarity-mcts により出力された json files により訓練された、もう一つの regression model は、材料候補からターゲット分子との類似性を予測する。そして、 similarity-ant と連携できる:

similarity-mcts -i -l2 -e3 -r10 -b100 -p "train_smiles" -f "smiles.json" -j
similarity-mcts -i -l2 -e3 -r10 -b100 -p "eval_smiles" -f "smiles.json" -j

注釈

chem-ant 0.0.7 から、分子のフラグメントをトークンとしてデータセットを作成するように変更したので、2つの regression models の差は無くなった。

chem-classificationsimilarity-ant の連携(現状では機能せず):

similarity-ant -n20 -g5 -b 1 -p gen_smiles -d -o "local-path/your-outputs"

Regression model の chem-classificationsimilarity-ant の連携:

similarity-ant -n20 -g5 -b 1 -p gen_smiles -r -o "local-path/your-outputs"