Augmented Medicinal Chemistry

将棋を指される方はご存知だと思いますが、将棋ウォーズっていうアプリがあって、それには棋神というコンピューターが3手くらい指してくれるシステムが存在します。

ま、どういうことかと言うと、自分の能力を超えてブーストしてくれるわけですね(実際あれを使うと万能感に浸れますw)。

で、化学構造の生成モデルも似たような立ち位置として使えるんじゃないかなーと話していて、最近、実際にそういう事例の話を聞かされて、やっぱブーストするのか!と感激したわけです。

なにもないところからアイデアを出すのは人間には苦痛を伴う作業だけど、幾つかの選択肢が与えられた場合、妙手を選びやすいのは人間の特性なのかなーと思った次第。

Visualizing important fragments with RDKit

Interpretaion of the QSAR model with fingerprints is difficult because its features don't show substructures but position of bits. The latest version of RDKIt has implemented the new fingerprint bit rendering code, so we are easily able to understand the meaning of the bit as a substructure (fragment)

Now, I wrote some code to visualize important fragments of the compounds and uploaded it to GitHub.

If you are familiar with Kinase inhibitors, I am sure that you will notice its usefulness.

Fingerprint visualization

AI創薬のためのケモインフォマティクス入門のレポジトリ作った

Githubでasciidocでやればいいと思ったので用意した。

サイトのaboutのところにも

Mishima.sykは主に三島を中心に活動するライフサイエンス系の勉強会で、 特にオープンソース・ソフトウェアの活用や普及を促進するためにハンズオンや 啓蒙活動を行っています

って書いてあるしね。

python for chemoinformatics

clojure cookbookとかpro git2を参考にしたい

「AI創薬のためのケモインフォマティクス入門」の目次を考えてみた

創薬 Advent Calendar 2018の11日目の記事です。

もし「AI創薬のためのケモインフォマティクス入門」ってのがあったら目次はこんなになるんやないやろか?ってものを @iwatobipenと一緒に考えてみた。

対象読者は

  • 医学薬学系の大学院生及び薬学系のデータ解析を行いたいポスドク
  • 製薬企業の薬理研究者で自分のデータを自分で解析したい人
  • または創薬化学者でケモインフォマティクスの必要性を感じている方
  • 既に企業でケモインフォマティクスに従事しているがプログラミングスキルに乏しい方
  • AI創薬に興味があるがなにからはじめたらいいかわからない人

あたりを想定してみたのだけどもし、「こういう章追加したほうがええんやないか?」とか「これは不要だろ」っていうのがあれば教えてもらえると嬉しいです。RTしてからコメント入れると見逃すのでそこは是非コメント付きRTでよろしくお願いします。

目次

ちょっと追加した(2018.12.12)。web interfaceは入門の範囲を超えそうなのでどうするかは考える。

イントロダクション

  • ケモインフォマティクスとは?

ケモインフォマティクスのための環境を整えよう

  • Anaconda(Python, Jupyter, scikit-learn)
  • RDKit

Pythonプログラミングの基礎

  • Pythonの基礎(必要だったら)
  • Jupyter notebookで便利に使おう

ケモインフォマティクスのための公開データベース

  • ChEMBL
  • PubChem

RDKitで構造情報を取り扱う

  • SMILESとは?
  • 構造を描画してみよう
  • 複数の化合物を一度に取り扱うには?

化合物の類似性を評価してみる

  • 記述子、フィンガープリント
  • 類似度を計算する

沢山の化合物を一度にみたい

  • Chemical Spaceとは
  • tSNEをつかったマッピング
  • 主要な骨格による分類(MCS)
  • Matched Molecular Pairによる化合物ネットワーク

構造活性相関(QSAR)の基礎

  • 効果ありなしの原因を考えてみる(分類問題)
  • 薬の効き目を予測しよう(回帰問題)
  • R分解とFree wilson analysis
  • モデルの適用範囲(applicability domain)

ディープラーニング入門

  • TensorFlowとKerasについて
  • Google colab(ずっとフリーかわからないので要検討)
  • インストールしてみよう

ディープラーニングを利用した構造活性相関

  • 記述子を工夫してみる(neural fingerprint)
  • DNNを利用した予測モデル構築

コンピューターに化学構造を考えさせる

  • Recurrent Neural Networkを利用した構造生成

我々も、「ケモインフォマティクスとかマテリアルズインフォマティクスやりたいんだけど、何から勉強すればいいんですかね?」みたいな質問されることが多いけど、「この本読んどけばいいよ」って言えなくて辛いので、なんか欲しいなとは思っているのですけどねー。

ピューっと吹くAI創薬

創薬 Advent Calendar 2018の9日目の記事です.

タイトルは適当ですが、内容はまともです。

タンパク質とリガンドの相互作用をきちんと理解する

Fragment Molecular Orbital Method(FMO)という方法があります。詳細はリンクか本を買って読んでもらえればと思いますが、要するにタンパク質とリガンドの相互作用を高精度に計算する手法です。

さて、このFMOをつかってA Medicinal Chemist’s Guide to Molecular Interactionsの再解釈をやるとどういうことがわかるかというと、読書感想文? としか言えないものが意外と(予想通り?)多いということですね。特に目視の解釈難しいそうだよなーってものは想像だけで解釈した純度100%のロマン結合ばっかりだった。結局きちんとFMO計算してPIEDAから相互作用を解釈するのがドラッグデザインには重要ということですね。もう一つ重要なことはリガンドの結合乖離過程というのは構造変化を伴わない、つまり生成物と反応物が変わらない化学反応(触媒反応)であるということですね E + L -> [EL] -> E + L 化学反応であるということはフロンティア軌道論で考える必要もあるのではないかということにつながり、LUMOもまた重要なファクターである可能性が高いという結論が導かれます。

ここまで簡単にまとめると

  • タンパク質とリガンドとの相互作用を解釈するには量子化学計算が必要
  • 相互作用を化学反応の一種として解釈するならLUMOも重要そう

ケモインフォマティクスによる活性予測

さて、ケモインフォマティクスでは上であげた相互作用をリガンドのみの情報から予測することになりますが、リガンドの性質を表す特徴ベクトルとして色々なフィンガープリントが提唱されています。

しかしながら、これらの手法はそもそも原子間の化学結合や相互作用については教えてくれないため予測精度の向上に関しては限界があることがわかりきっています、もしくは既に限界付近まできてる可能性も低くはないのではないかと考えています。

つまり何らかの形で分子軌道を取り込まないと、ケモインフォマティクスはスクリーニングレベルの大雑把な方法としてしか使えなくて創薬のリード最適化には役に立たないざっくりとした手法にとどまるんじゃないでしょうかね?

フロンティア軌道の情報を取り込むようなイケてる方法論があればいいなーと思いますが、なかなか難しいですね。

結論

  • 活性予測の精度向上には、リガンドの記述方法に量子力学に基づいたアプローチが必要なのでは?

おまけ

こういうディープな議論がしたければMishima.sykにGO。次回は2/9にやります

エモいケモインフォマティクス

創薬アドベントカレンダー 2018

6日目の記事 #souyakuAC2018 となります

それはつまり、 Python+RDKitはエモくないから、もっとエモい言語でケモインフォマティクスをやりたいということですな?

よし、やろう!

ところで、今どきのケモインフォマティクスといえばRDKit+Pythonが一般的だろうけど、その前はどうだったのかということを、自分の記憶とかブログのメモを頼りに歴史を振り返ってみようかと思う。ここ15,6年くらいの話になると思う。

LLでケモインフォ

LLをつかってケモインフォマティクスをやりたいという話が出始めたのが2000年過ぎくらいからだったと思う。バイオインフォマティクス分野ではオープンソースのツールをつかって研究をするのが一般的だったので、その流れでケモインフォマティクスにもオープンソースでやりたいというニーズが高まったように記憶している。その当時はケモインフォっていうかQSARのほうがポピュラーだったので統計解析パッケージのRとかでなんとかしようとしてたような。

ケモインフォマティックスが出たのが2005年だからそれより前は洋書しかなかった気がする(でも少なかった)

Rでケモインフォ (2003-2007)

前の会社に入った頃はSBDDとバイオインフォ、ケモインフォを並行してやっていて、その当時はbioinformaticsといえばBioPerl一択でperlばっかり書いてた。ただQSARはRを使っていて、SVMとかMLRとかしていた気がする。大体2003-6年くらいですね。

この当時は構造描画したり、記述子を発生する唯一のオープンソースライブラリがCDKだった気がするのでみなさん他言語からCDKを呼び出そうしてた気がする。RCDKもこの当時にはあった。

結論: Rエモくない

Perlでケモインフォ (2006-2008)

Perlは学生の時から書いていてい、もちろんその当時もperlユーザーであった私はもちろんperlからCDKを呼び出すためにInline::Javaをつかうということを思いつき実践していた。

一方でPerlMolっていうPerlで構造のマニピュレーションするためのモジュールが出てきて自分の中で高まりをみせた感があって気がする。日本人で他に使っていた人がいたかは知らんけど、RECAP書いたり、人工無能作れたりとなかなかよかった気がした。

結論: perlは若干エモかったがいまさら書きたいとはあまり思わない

Ruby でケモインフォ (2006)

エモいLLといえばRuby,そしてBioRubyの流れからのChemRubyというのがあって、描画がイケていたので使おうとしたけど、メンテナであった金久研の方が忙しくなって更新されなくなってしまったので、そういうものがありましたということで残しておく

ちなみにRuby関連で読んでおく本は「メタプログラミングRuby」と「Rubyで作る奇妙なプログラミング言語」ですね。

ProductName メタプログラミングRuby 第2版
Paolo Perrotta
オライリージャパン / 3240円 ( 2015-10-10 )


ProductName Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~
原 悠
毎日コミュニケーションズ / ?円 ( 2008-12-20 )


結論: Rubyのエモさがchemoinformaticsには注入されなかった

Jython + CDKでケモインフォ (2008)

私がPythonを真面目に書くようになったのが2006年ごろだったと思う。当時GAMESS FMO inputの生成スクリプトにbioperlのpdb parserをつかっていたのだけどやたら遅くて、ふとbiopythonのparserつかったらすごく速いことに感動してそのまま宗旨変えした。openbabelのbindingはperlもpythonもどっちもあったので両方つかっていた記憶がある。

Jythonだとpythonとjavaがうまく連携できるのでCDKとの相性が非常によろしかった。

けどJavaで書くのが面倒くさかったのとJavaのコード書いてもあまりテンションが上がらなかったのに加え、具体的なプロダクトにまで進みそうな仕事がなかったので、楽しんで終わっただけだった。

その他Javaで書かれたやつ(Scala, Clojure) (2009-)

ScalaやClojureを使う人が増えたり書籍も色々と出た結果、Javaで作られたchemoinformaticsのtoolkit(ChemAxonね)をScalaやClojureで取り扱う系のblogの記事とかはちょいちょいあって、「ほー、なるほどー」とか言って参考にしていたと思う。そのあたりのブログを探してみたけど今はなくなっているようだった。

結論: Scala面白いですよね、マルチパラダイム言語ってのがエモい。ChemAxonの製品つかっていたら今頃Scalarになってたかも

ProductName Scalaスケーラブルプログラミング第3版
Martin Odersky
インプレス / 4968円 ( 2016-09-20 )


関数型言語でChemoinformatics (2010-?)

2006年頃から関数型言語に傾倒しだして、趣味のプログラミングとしてHaskellを触りはじめlisp,schemeに傾倒していて関数型言語でchemoinformaticsやりたくなった。

Pythonしか書かんよ?っていう人でも、とりあえずプログラミングHaskellは読んでおくとよいでしょう。モナドは出てこないので、 関数型言語おもしろい! 感は味わえます。あとこれを読むとPythonのプログラミングがちょっと変わります。リスト内包表記とかzip系を多用する病気にかかります、あとラムダ式ね。

ProductName プログラミングHaskell
Graham Hutton
オーム社 / 2940円 ( 2009-11-11 )


次にすごいHaskell読めばいいと思います。読もう、読むべき

ProductName すごいHaskellたのしく学ぼう!
Miran Lipovača
オーム社 / 2940円 ( 2012-05-23 )


で、このあたりが分かりだすと色々やりたくなるわけですね。以下の論文読むと色々書いてあるけど、型安全とか参照透過性とか遅延評価バンザイとか実際コード書いていると欲しくなる。

で、Ouchなどを追いかけていたけどなかなか仕事で使う感じにはならなかったので結局python + openbabel(仕事ではOE toolkit)でコードを書いてた。

結論: Haskellはエモいけど、使えるライブラリがなかった ;-)

Pythonでケモインフォマティクス (2008-)

そんなわけで2008頃からPythonでケモインフォマティクスのコードを書くようになったんだけど、その当時はPythonistaも今ほど多くはなかったですね。暇だったのでこのブログとは別にケモインフォクックブック書いてた。ちょうどこの時期にopenbabelのpythonラッパーであるpybelが構造描画に対応したのでオープンソースでも使えるようになってきたと記憶している。でもscikit-learnはなかったのでpythonからRにアクセスできるRpyつかっていた。その当時は論文の実装Rだったし、PythonからR呼び出すのが都合が良かったと思う。scikit-learnは割と最近なんじゃないですかね。

それからRDKitがどのくらいから盛り上がってきたのかを調べるには日本のパイオニアとして作者にも認識されているpen先生のブログを追えばいいのですが、それによると大体2012年くらいですね。ただこの頃はopenbabel派が多かったのでRDKitが主流になるのはもう少し後のはずです。

一応openbabelとRDKitの違いを述べておくと、openbabel(OpenEyeも含む)はケミストリー寄りで、RDKitはケモインフォマティクス寄りです。なにが違うのと言われると、「違うよ、ぜんぜん違うよ!!!!」くらい違うんですが、openbabelは量子化学計算の結果を格納することを前提とした作りになっているのに対し、RDKitはそこは考慮されてないんですよね。

結論: Pythonエモくない、固い、カッチカチ

エモいケモインフォマティクス

ここから本題、前置き長かったわ。

エモいプログラミング言語といえば関数型でhaskellとかlispですが実はpythonによるlisp実装の一つにhyというものがあります。

インストールも簡単、みんな大好きpipで

pip install git+https://github.com/hylang/hy.git

と叩くだけでOK

入門用の参考リンクを3つほどあげておきます。

Pythonで書かれた活性予測のコードも

from rdkit import Chem
from rdkit.Chem import AllChem
from rdkit import DataStructs
import numpy as np
from sklearn.metrics import r2_score
from math import sqrt
from sklearn.svm import SVR
from sklearn.model_selection import train_test_split

def svm(x_train, x_test, y_train, y_test):
    clf = SVR(kernel='linear').fit(x_train, y_train)
    y_pred = clf.predict(x_test)
    r2 = r2_score(y_test, y_pred)
    print('SVM: R2: {0:f}, RMSE:{1:f}'.format(r2, rmse))

def sdf_to_desc(sdf_file):
    fps = []
    targets = []
    nfps = []

    for mol in Chem.SDMolSupplier(sdf_file):
        fps.append(AllChem.GetMorganFingerprintAsBitVect(mol, 2))  # fingerprint
        targets.append(float(mol.GetProp("ACTIVITY")))  # activity

    for fp in fps:
        nfp = np.zeros((1,))
        DataStructs.ConvertToNumpyArray(fp, nfp)
        nfps.append(nfp)

    return (np.array(nfps), np.array(targets))

if __name__ == '__main__':
    descs, targets = sdf_to_desc("CHEMBL1827733_5HT2A.sdf")
    x_train, x_test, y_train, y_test = cross_validation.train_test_split(
        fps,
        acts,
        test_size=0.1)
    svm(x_train, x_test, y_train, y_test)

hyで書きなおすとあら不思議、括弧の多さがエモさの証、こんなにエモくなりました!

(import [rdkit [Chem]])
(import [rdkit.Chem [AllChem]])
(import [rdkit.Chem [DataStructs]])
(import [math [log10]])
(import [math [sqrt]])
(import [numpy :as np])
(import [sklearn.model_selection [train_test_split]])
(import [sklearn.svm [SVR]])
(import [sklearn.metrics [r2_score]])

(setv sdf_file "CHEMBL1827733_5HT2A.sdf")
(setv acts (map (fn [mol] (- 9 (log10 (float (mol.GetProp "ACTIVITY")))))
    (Chem.SDMolSupplier sdf_file)))
(setv fps (map (fn [mol] (AllChem.GetMorganFingerprintAsBitVect mol 2))
    (Chem.SDMolSupplier sdf_file)))
(setv nfps [])
(for [fp fps] (setv nfp (np.zeros '(1, )))
    (DataStructs.ConvertToNumpyArray fp nfp)
    (nfps.append nfp))
(setv Y (np.array (list acts)))
(setv X (np.array nfps))
(setv D (train_test_split X Y :test_size 0.1)) ;D:x_train, x_test, y_train, y_test
(setv svr (SVR))
(setv clf (svr.fit (get D 0) (get D 2)))
(setv y_pred (clf.predict (get D 1)))
(print "r2:" (r2_score (get D 3) y_pred))

マクロも使えるみたいだし、積んであったOn Lisp読むモチベーションが高まったわ。

ProductName On Lisp
ポール グレアム
オーム社 / 3990円 ( 2007-03 )


結論:AI創薬をうたうならば括弧を恐れず本物の人工知能言語であるlispをつかってエモいケモインフォをやるべき。

Mishima.syk #13をやります

ちょっと間が空きましたがMishima.syk #13をやります。

テーマはまだ決まってませんが、構造生成モデルのミニハンズオンなどできればいいなーという話はしております。 やってみたいことはあるんだけど、強化学習のところでCPUでいけるのかGPUないとキツイのかをチェックしてから やるかどうか決めようと思ってます。

尚、今回使用した写真は昨日の飲み会で食べた真鯛のしゃぶしゃぶとなります。

良い科学は差を生む(2)

良い科学は差を生むので我々は良い科学を行わなければならないわけです。

ここに、N先生のありがたいお言葉をあげておきますが、

つまり、「化合物のグラフ表現ではきちんと化合物を記述することができない」ということを意味しているわけです(自明だけどね)。

なので、機械学習を利用してQM9の値を予測するってのはとても違和感がある。ただ、マテリアルインフォ系の方々と話していると「ab initioだと計算時間がかかるからコンベンショナルな計算方法があると嬉しい」っていう理由でこういう方法が望まれているようなので、そういう目的ではありかな?と思う。(適用範囲(aplicability domain)の問題とかもある半経験的な手法とどっちが良いんかな?と思わないでもないが)

でも、創薬系の活性予測とか物性予測という場面においては、量子化学計算の結果から出てくる値(energyとか双極子モーメント)とかを現状のグラフ由来のデータをつかって深層学習にかけると、なんか特徴量でてくるかもみたいな神頼みみたいな仕事はどうかと思う。そもそも潜在的に記述できてないデータをinputに突っ込んで記述できるようになったら錬金術じゃないのか?

むしろ、量子化学計算の結果として出てきたパラメータを機械学習のinputとして利用するように色々工夫したほうが良いのではないかと考えている。リガンドとタンパク質の相互作用が化学反応の一種であるならば非占有軌道を考慮できないと正確な予測はできないと思うしね。

ProductName 基礎量子化学―軌道概念で化学を考える
友田 修司
東京大学出版会 / 4536円 ( 2007-02-01 )


Hansch-FujitaのLogPはdesolvation energyでPIEDAのDI termはエンタルピックな項

週末は京都でkumainfoの座長の方々とお会いする機会があったので、予稿集を眺めて気になったところを質問してきました。

特に2B03の回帰式にdesolvation termが入っていたのでその意味を聞いたところHansch-Fujita equationのLogPではないかとのことでほう!となりました。ちなみに調べてみたら1984年くらいに同じこと書いてあった(p. 709)。

となるとPIEDAで出てくるDIはLogPとは関係がなく? スタッキングとかCH-πみたいな純粋なエンタルピックな量になってLLEとよい相関を示すことになるのかな?

一方でLLEは見かけの活性を排除しているわけではなくエントロピックな寄与を排除しているということになるが、これはエントロピックな寄与が一定という割と狭い条件でしか通用しないってことかもしれないですね。

konをいじるデザインも併せて考えると興味深いと思う。

このあたりの整理が出来たので良かった。

konをmodifyするような分子設計の可能性について

一通りの大きな発表とかが終わって、今週はゆっくり出来たので積んであった論文などを捌いていたら面白いものを見つけました。

Ligand Desolvation Steers On-Rate and Impacts Drug Residence Time of Heat Shock Protein 90 (Hsp90) Inhibitors

konがどういう因子に支配されているかを調べているのですが、konを変化させるようなdrug designは望まれているけど難しいのでこういうメカニズム解明系の論文は夢があるし、読んでてワクワクしますね。素晴らしい。

ただ、結合過程を化学反応のアナロジーに例えるのはしっくりこなかった。TSって鞍点でしょ?デソルベーション過程って鞍点とみなしていいのかな?イメージできない。それから、apolarな部分のdeslolvationが律速過程みたいな図もちょっと納得できなかった。polarなほうが剥がしにくいし、論文中でもそうなってたしなぁ。

なんかもっと正しいアナロジーまたは解釈の余地は残っている気がする。

それからK4DDって面白そうな活動していますねっていうのと、論文のリンクを探すためにタイトルでググったら被引用論文のリンクがくっついていてグーグル凄いなと思いました。