Self-assessment of this year

今年を振り返ると書いたエントリ数は100弱だった。昔は1エントリ/day以上は書いていたので最近はブログに対する意欲は薄れているが、後から振り返るためにもう少し書くようにしたい。

仕事関連

今の会社に入って2年ちょいだけど、今年は成果が沢山でてよかったと思う。チームで社外発表を全部で10以上できたし、来年講演に呼ばれているの確定なの4,5はあるしね。来年も社外発表を通して議論、フィードバックをもらいながら成長していきたい。

または overwhelming growth ってやつ?w

一方で去年の振り返りに埋め込んだTEDの動画にあるように、去年はタイミングが良かったというのもあると思うんですよね。「半歩先の仕事の発表だったからウケた」みたいな。サービスとしてはありなんだろうけど、サイエンスとしてはどうなのかなーと思わなくもない。マジョリティが理解できる程度にしか先に進んでないってことだから、すぐに追いつかれる強みにしかならんのかなーとも思うので、そのあたりも考えていかねばいけませんね。と、そういうことを考えられるようになったのも進捗した結果なのでそれはそれで嬉しいことですが。

来年は 「単純なAI based XX」っていうネタも落ち着いて、ドメイン知識が必要ななにか新しいことをプラスしないと評価されなくなってくるっていうようになるんじゃないかなぁーって思います。特にケミストリーはAIっていう焼畑農業である程度焼き尽くしちゃった感があるしね。そのあたり、少し進めていければいいなと思っています。

あと来年はちょっとBioinformaticsのお手伝いもしないといけないのでそっちもきちんと成果を出せるようにしたいけど。まずは環境を整えないといけないなって感じですね。あとバイオインフォの情報も追いかけないといけないので大変になりそう。

ProductName ビジョナリー・カンパニー2 飛躍の法則
ジム コリンズ
日経BP社 / ?円 ( 2014-08-29 )


あと英語力をもっとあげていきたい。僕もエントリ英語にしようかな。

仕事以外のこと

手術というものを初めて経験した、盲腸だけど。それからPokemon GoのトレーナーレベルがMax(40)に到達したら、あまり運動をしなくなってしまった。良くないのでなにかしないとなーと思っている。

Augmented Medicinal Chemistry

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

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

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

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

螺旋階段を登り続ける

私のブログのタイトルは好きなドラムンベースのさらに細かいジャンルからとっているわけですが、最近聴いてる新譜が妙に昔懐かしのJungle感を感じさせる曲が混じってるなと思い、

ProductName Waystone
Whiney
Imports / ?円 ( 2018-12-06 )


とtweetしたらありがたいreplyを頂き、よく考えたら確かに分子設計もぐるぐる回っておなじ歴史を繰り返しているようでいて、実は色々と前進しているんだよなーと、一つ思い出したので書いておきます。FMOのことですがw

私とFMOの出会いはかなり古くて、1999だか2000だったか覚えていませんが、CBIの年会に北浦先生がポスター出されていたのを目ざとく見つけて、あれこれというかネホリンハホリンした挙げ句、激ヤバマスト!!!と大興奮したのを忘れていません。

ま、もちろんその当時の同僚や上司のレスポンスは冷笑そのものであったことは言うまでもないことでしたけど、実際のところそもそも計算資源がなかったし、まぁそんなもんかなって感じでしたね。どうしても蛋白-リガンド複合体の計算したかったら切り出してモデル化するのがその当時の王道だったしね(そして製薬企業でやってるのはほとんど見なかったけど)。

その後、数年くらいで基盤の整備が行われてCBI主体の講習会などが開かれて、FMOは誰でも使えるようになったんですが、それでもコンピューター資源の制約は大きくて、このあたりで$40000くらい投資して導入したクラスター(AMDのCPUだったと思う)で計算しても6-31Gくらいの基底関数だと1weekくらいかかっていた(はず)

で、まぁ今だと、ちょっとした投資でクラスター組めば同じくらいの計算5,6時間で終わるし、AWS使えばもっともっと早く計算できるっていう状況になってるっていうのがよくよく考えてみると感慨深いわけです。

というわけで、計算機資源の速度向上や、結晶化の技術がFMOでやれることの可能性を広げているので、なにか新しい貢献ができるといいなーと思いました。

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にやります

真鯛で忘年会

沼津にある真鯛というお店で忘年会をしてきました。

1544163327

突き出しがカマ。右が鯛のサラダ

1544163329 1544163332

カルパッチョと揚げ物

1544163335 1544163338

鯛のしゃぶしゃぶ。これは美味しかった。

1544163341 1544163343

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

創薬アドベントカレンダー 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ないとキツイのかをチェックしてから やるかどうか決めようと思ってます。

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