Mishima.syk #13やりました

今回バイオインフォマティクス寄りの発表がいくつかあったので、非常に勉強になった。テンソル分解ちゃんと勉強しないとなと思いました。

ハンズオンのほうは、condaはあまり万能じゃないなと。油断してた。Windowsだとunzipのcondaバイナリないとか、SMILESを""で囲うとだめだとかよくわからないエラーに悩まされた。まぁでもWindowsでもREINVENTが動いたので良かったとしよう。

お昼は王味で小エビラーメン

1549758352

懇親会の刺し身

1549758350

二次会のリパブリューのラムチョップ

1549758354

そしてアルコール度数17.5%のビール

1549758357

次回もまた楽しくやりましょう

来週末はMishima.sykです

参加はこちらから。

今回の会の趣旨とか狙いみたいなものはこちらを御覧ください

私はSitagliptinのアナログを出すようなジェネレータを動かすハンズオンをやろうかなと考えています。デモのために訓練300回させたモデルでとりあえずjupyter notebook作ってみましたが、出来がイマイチなので週末にでも3000 iterationくらい回したモデルを作り直して更新する予定です。

Mishima.syk #13でGenerator mini hands-onをやります

あけましておめでとうございます、今年もよろしくおねがいします。

昨日まで日本酒飲みまくってグダグダしていたので、今日からそろそろ始動しようかなと思います。@iwatobipenがアクティブにGitHubにプッシュしまくっているみたいなので、Mishima.sykのタイムスケジュールも更新しましたが、あと40分くらい空いているのでLT入れたい人は早めに時間を確保してください。

今回はGenerator mini hands-onをやることにしました。理由は、第404回CBI学会講演会ではThierry KogejさんにMolecular de novo design through deep learningと似たような公演をしてもらう予定にしているからです。

スライド3でDe novo molecular generation with deep learning has developed very rapidlyってあるんだけど、今大体どのくらいの化合物生成してくるのかを知らないと、公演楽しめないと思うんですよね。この手の話って知らないで聞くと期待感あふれるストーリーなのか、現実味を帯びているのかいまいち掴めないという。

というわけで彼らの提案しているREINVENTを実際に動かして、化合物提案がどんなもんなのかを見てみようというハンズオンになります。予めChEMBLでトレーニング済みのモデルはこちらで用意しましたのでjupyterでちょっとコード打てば動くようにする予定です。

本当は参加者に、それぞれ上市された薬剤のもとの特許を渡して、生成モデルがどのくらい生成したら実施例をカバーすんのかな?っていうのをやってもらうハンズオンにしたかったんだけど、それはGPU必須っぽいので今回は断念しました。

参加はこちらから。

ハンズオンをやってから改めて読むと味わい深いエントリはこちらです。

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ないとキツイのかをチェックしてから やるかどうか決めようと思ってます。

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