12122018 chemoinformatics
Githubでasciidocでやればいいと思ったので用意した。
サイトのaboutのところにも
Mishima.sykは主に三島を中心に活動するライフサイエンス系の勉強会で、 特にオープンソース・ソフトウェアの活用や普及を促進するためにハンズオンや 啓蒙活動を行っています
って書いてあるしね。
clojure cookbookとかpro git2を参考にしたい
12122018 chemoinformatics
Githubでasciidocでやればいいと思ったので用意した。
サイトのaboutのところにも
Mishima.sykは主に三島を中心に活動するライフサイエンス系の勉強会で、 特にオープンソース・ソフトウェアの活用や普及を促進するためにハンズオンや 啓蒙活動を行っています
って書いてあるしね。
clojure cookbookとかpro git2を参考にしたい
12122018 chemoinformatics
創薬 Advent Calendar 2018の11日目の記事です。
もし「AI創薬のためのケモインフォマティクス入門」ってのがあったら目次はこんなになるんやないやろか?ってものを @iwatobipenと一緒に考えてみた。
対象読者は
あたりを想定してみたのだけどもし、「こういう章追加したほうがええんやないか?」とか「これは不要だろ」っていうのがあれば教えてもらえると嬉しいです。RTしてからコメント入れると見逃すのでそこは是非コメント付きRTでよろしくお願いします。
ケモインフォの入門書もあれば絶対に売れると思うのですが。
— ノブ@化学者/研究者の生き方を考える (@chemordie) 2018年12月9日
出版業界の皆さま、絶対に売れる本を作るチャンスですよ。 https://t.co/IesQJ1Jms1
ちょっと追加した(2018.12.12)。web interfaceは入門の範囲を超えそうなのでどうするかは考える。
我々も、「ケモインフォマティクスとかマテリアルズインフォマティクスやりたいんだけど、何から勉強すればいいんですかね?」みたいな質問されることが多いけど、「この本読んどけばいいよ」って言えなくて辛いので、なんか欲しいなとは思っているのですけどねー。
09122018 chemoinformatics FMO
創薬 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もまた重要なファクターである可能性が高いという結論が導かれます。
ここまで簡単にまとめると
さて、ケモインフォマティクスでは上であげた相互作用をリガンドのみの情報から予測することになりますが、リガンドの性質を表す特徴ベクトルとして色々なフィンガープリントが提唱されています。
しかしながら、これらの手法はそもそも原子間の化学結合や相互作用については教えてくれないため予測精度の向上に関しては限界があることがわかりきっています、もしくは既に限界付近まできてる可能性も低くはないのではないかと考えています。
つまり何らかの形で分子軌道を取り込まないと、ケモインフォマティクスはスクリーニングレベルの大雑把な方法としてしか使えなくて創薬のリード最適化には役に立たないざっくりとした手法にとどまるんじゃないでしょうかね?
フロンティア軌道の情報を取り込むようなイケてる方法論があればいいなーと思いますが、なかなか難しいですね。
結論
こういうディープな議論がしたければMishima.sykにGO。次回は2/9にやります。
06122018 chemoinformatics
創薬アドベントカレンダー 2018
6日目の記事 #souyakuAC2018 となります
エモい+ケモインフォ=ケモい
— ホタペン (@hinaichigo) 2018年11月20日
それはつまり、 Python+RDKitはエモくないから、もっとエモい言語でケモインフォマティクスをやりたいということですな?
よし、やろう!
ところで、今どきのケモインフォマティクスといえばRDKit+Pythonが一般的だろうけど、その前はどうだったのかということを、自分の記憶とかブログのメモを頼りに歴史を振り返ってみようかと思う。ここ15,6年くらいの話になると思う。
LLをつかってケモインフォマティクスをやりたいという話が出始めたのが2000年過ぎくらいからだったと思う。バイオインフォマティクス分野ではオープンソースのツールをつかって研究をするのが一般的だったので、その流れでケモインフォマティクスにもオープンソースでやりたいというニーズが高まったように記憶している。その当時はケモインフォっていうかQSARのほうがポピュラーだったので統計解析パッケージのRとかでなんとかしようとしてたような。
ケモインフォマティックスが出たのが2005年だからそれより前は洋書しかなかった気がする(でも少なかった)
前の会社に入った頃はSBDDとバイオインフォ、ケモインフォを並行してやっていて、その当時はbioinformaticsといえばBioPerl一択でperlばっかり書いてた。ただQSARはRを使っていて、SVMとかMLRとかしていた気がする。大体2003-6年くらいですね。
この当時は構造描画したり、記述子を発生する唯一のオープンソースライブラリがCDKだった気がするのでみなさん他言語からCDKを呼び出そうしてた気がする。RCDKもこの当時にはあった。
結論: Rエモくない
Perlは学生の時から書いていてい、もちろんその当時もperlユーザーであった私はもちろんperlからCDKを呼び出すためにInline::Javaをつかうということを思いつき実践していた。
一方でPerlMolっていうPerlで構造のマニピュレーションするためのモジュールが出てきて自分の中で高まりをみせた感があって気がする。日本人で他に使っていた人がいたかは知らんけど、RECAP書いたり、人工無能作れたりとなかなかよかった気がした。
結論: perlは若干エモかったがいまさら書きたいとはあまり思わない
エモいLLといえばRuby,そしてBioRubyの流れからのChemRubyというのがあって、描画がイケていたので使おうとしたけど、メンテナであった金久研の方が忙しくなって更新されなくなってしまったので、そういうものがありましたということで残しておく
ちなみにRuby関連で読んでおく本は「メタプログラミングRuby」と「Rubyで作る奇妙なプログラミング言語」ですね。
結論: Rubyのエモさがchemoinformaticsには注入されなかった
私がPythonを真面目に書くようになったのが2006年ごろだったと思う。当時GAMESS FMO inputの生成スクリプトにbioperlのpdb parserをつかっていたのだけどやたら遅くて、ふとbiopythonのparserつかったらすごく速いことに感動してそのまま宗旨変えした。openbabelのbindingはperlもpythonもどっちもあったので両方つかっていた記憶がある。
Jythonだとpythonとjavaがうまく連携できるのでCDKとの相性が非常によろしかった。
けどJavaで書くのが面倒くさかったのとJavaのコード書いてもあまりテンションが上がらなかったのに加え、具体的なプロダクトにまで進みそうな仕事がなかったので、楽しんで終わっただけだった。
ScalaやClojureを使う人が増えたり書籍も色々と出た結果、Javaで作られたchemoinformaticsのtoolkit(ChemAxonね)をScalaやClojureで取り扱う系のblogの記事とかはちょいちょいあって、「ほー、なるほどー」とか言って参考にしていたと思う。そのあたりのブログを探してみたけど今はなくなっているようだった。
結論: Scala面白いですよね、マルチパラダイム言語ってのがエモい。ChemAxonの製品つかっていたら今頃Scalarになってたかも
2006年頃から関数型言語に傾倒しだして、趣味のプログラミングとしてHaskellを触りはじめlisp,schemeに傾倒していて関数型言語でchemoinformaticsやりたくなった。
Pythonしか書かんよ?っていう人でも、とりあえずプログラミングHaskellは読んでおくとよいでしょう。モナドは出てこないので、 関数型言語おもしろい! 感は味わえます。あとこれを読むとPythonのプログラミングがちょっと変わります。リスト内包表記とかzip系を多用する病気にかかります、あとラムダ式ね。
次にすごいHaskell読めばいいと思います。読もう、読むべき
で、このあたりが分かりだすと色々やりたくなるわけですね。以下の論文読むと色々書いてあるけど、型安全とか参照透過性とか遅延評価バンザイとか実際コード書いていると欲しくなる。
で、Ouchなどを追いかけていたけどなかなか仕事で使う感じにはならなかったので結局python + openbabel(仕事ではOE toolkit)でコードを書いてた。
結論: Haskellはエモいけど、使えるライブラリがなかった ;-)
そんなわけで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エモくない、固い、カッチカチ
ここから本題、前置き長かったわ。
lispでケモインフォやれば完璧 https://t.co/NFBKDKEImS RT @hinaichigo: エモい+ケモインフォ=ケモい
— kzfm (@fmkz___) 2018年11月20日
エモいプログラミング言語といえば関数型で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読むモチベーションが高まったわ。
結論:AI創薬をうたうならば括弧を恐れず本物の人工知能言語であるlispをつかってエモいケモインフォをやるべき。
04122018 chemoinformatics
ちょっと間が空きましたがMishima.syk #13をやります。
テーマはまだ決まってませんが、構造生成モデルのミニハンズオンなどできればいいなーという話はしております。 やってみたいことはあるんだけど、強化学習のところでCPUでいけるのかGPUないとキツイのかをチェックしてから やるかどうか決めようと思ってます。
尚、今回使用した写真は昨日の飲み会で食べた真鯛のしゃぶしゃぶとなります。
02122018 bioinformatics 横浜
10年以上ご無沙汰していた分生に行ってきました。昔と比べてバイオインフォのセクション減ったよなーというような話をしたら、「バイオインフォなんて技術だから実際の研究の一部として使ってるからポスター散らばってるんだよ!」と言われて、一応全ポスターチェックしたら、確かに散らばっていたので、ポスターチェック大変だなぁと思った。ただ分生のアプリ便利だったので他の学会でも取り入れてほしい。
あとはバイオインフォやってた頃の元同僚とか知り合いとかに会えたので良かった。
一日目は昼くらいに横浜着になってしまったので、何も考えたくないときの定番のポルタの地下の麻婆豆腐のとこにいき、山椒の効いた麻婆豆腐麺を食べた。うまし。
夜は豚の味珍
やかん(焼酎ストレート)と足
頭と舌。舌は後から頼んだけどちょっと多かった。二皿が限界かな。
2日目はシェークシャックに。ハンバーガーは確かにうまいがポテトは重かった。 ハンバーガーだけでよかった。
夜景はきれい
ベアードでスモーク肉でも食べて帰るかと寄ってみたのだけど、まったく肉の気分ではなく ビールを一杯頂いて、ホテルに帰って仕事をしただけであった。夜は近所の揚州商人で軽めの ラーメン。
最終日は夕方までに帰らないといけなかったので、乗り継ぎ駅で家系ラーメン を食べた。菊名乗り換えだったらここもありかなと思うけど、家系ラーメン結構もたれますね。 右側は三島の乗り継ぎで30分くらい空いて暇だったので、果南ちゃんにサイン本をもたせてみた。
夕方いいことがあったので、リパブリューで軽く飲んだ。ポスター賞って学会の中で楽しむものなんかなと考えていて あまり重要視してなかったのだけど、細かいところまでわからない経営層にとってはものすごくわかりやすい指標らしく (社外からの評価ということになるので当然か、、)社内でも成果の一つとして評価されるみたいなので、社外発表する場合には積極的に狙っていくと良いと思います。本人のモチベーションにもなるしね。
02122018 chemoinformatics work life
良い科学は差を生むので我々は良い科学を行わなければならないわけです。
ここに、N先生のありがたいお言葉をあげておきますが、
一般的な構造式は原子間の化学結合や相互作用については教えてくれないー>量子力学によってしか記述できない
— kzfm (@fmkz___) 2018年11月17日
つまり、「化合物のグラフ表現ではきちんと化合物を記述することができない」ということを意味しているわけです(自明だけどね)。
なので、機械学習を利用してQM9の値を予測するってのはとても違和感がある。ただ、マテリアルインフォ系の方々と話していると「ab initioだと計算時間がかかるからコンベンショナルな計算方法があると嬉しい」っていう理由でこういう方法が望まれているようなので、そういう目的ではありかな?と思う。(適用範囲(aplicability domain)の問題とかもある半経験的な手法とどっちが良いんかな?と思わないでもないが)
でも、創薬系の活性予測とか物性予測という場面においては、量子化学計算の結果から出てくる値(energyとか双極子モーメント)とかを現状のグラフ由来のデータをつかって深層学習にかけると、なんか特徴量でてくるかもみたいな神頼みみたいな仕事はどうかと思う。そもそも潜在的に記述できてないデータをinputに突っ込んで記述できるようになったら錬金術じゃないのか?
むしろ、量子化学計算の結果として出てきたパラメータを機械学習のinputとして利用するように色々工夫したほうが良いのではないかと考えている。リガンドとタンパク質の相互作用が化学反応の一種であるならば非占有軌道を考慮できないと正確な予測はできないと思うしね。
先週は久しぶりにチキンカレーを作った。
チキンをぶった切ってヨーグルトに漬け込む。クミンとかスパイスを炒めてから玉ねぎを炒めて、トマトを入れたら、ターメリックとか入れて水をちょっと入れてグレービーソースを作る。
その後ヨーグルトに漬けておいたチキンを入れて弱火で煮て、赤っぽい油がいい感じに浮いてきたら終了。大抵1時間弱放っておく。昔はカツ代のレシピで作っていたのだけど、トマト缶一缶入れると酸っぱすぎてカレー感が薄れるので、今は半分から1/3入れてる。フレッシュトマトを一個入れるのが一番美味しい。トマト缶は酸っぱすぎなので使いづらい。
こっちは東京に行ったときに寄ったバンゲラズキッチン。南インドのカレーだそうです、魚主体。
これは本当に美味しかったので次回も行きたい。
22112018 work
今日はちょっとAIに関する発表をしつつパネルディスカッションに行ってきましたが、色々面白かったので書いておく。
要するにAIっぽい仕事をしている人間を集めてショートトークさせた後、パネルディスカッションするっていう構成だったんだけど、パネラーの中で手を動かせて深層学習、機械学習をわかるのはわたし一人で、残りはネットか本かで知識吸収っていう人たちばかりだったのでパネルディスカッション正直めんどくさいなーとしか思っていなかった。あとは事前打ち合わせなしのガチンコパネルディスカッションだったのでドキドキ感はあった。
最初の質問がいきなり「AI人材を育成するには?」という直球の質問で、私が最初の回答者に指名されたので、うっかりナイーブに「機械学習とか深層学習を学んで後はドメイン知識があればいいんじゃないですかね?」というアホな回答をしてしまった。残りのパネラーもわかってない感じの返答していたけど最後のパネラーが「マインドチェンジする必要があるんじゃないかな」みたいなことを言っていて、「ほう!」となった。これはあーなるほど面白いなと。
で、次の質問が私的にはキタのだけど、それは「AIは結局のところ差別化できない方向にすすむので当社の強みにならないと思うのだけど?」という質問でこれは非常に考えさせられた(5秒位w)。で、私が答えたのは「AIは確かに普遍化して差別化ポイントにはならないでしょう、それは技術でツールだから。でもその技術を以て何を為したいのかにオリジナリティがでるのでは?」という返しが出来て、私は実は賢いんじゃないかと思いました。ついでにすかさず先の「AI人材育成質問」を引き合いに出して「うちのチームは1年半前までは深層学習とかできなかったけど、何を為したいかがはっきりしていたから短期間で成果をだして、今は全員当たり前のように毎日ディープラーニングして課題解決しています」というようなアピール出来たので良かった。でもちょっと持ち上げすぎたので、成果よろしくお願いしたい。
あと全然関係ないけど、いい研究しても伝わらないと意味がないので、伝える努力もしたほうがいいかなと思います。よっぽど発表慣れしている人でなければ資料とかポスターのver. 5までは下書きです。査読者のコメントに熟慮を重ねないといけません。学会ポスターなんて多面最適化と一緒であっちの文言帰るとこっちの文言の整合性が取れなくなるし、図をいじると他のデザインとの整合性がとれなくなるので、納得いくまでいじるもんじゃないかなーと思っていたのだけど、こっちの会社に来てみなさんサクッとドラフトっぽいものを印刷出すのでそういう文化なのかなーということで納得しようとしていたら、帰りに一緒に飲んだ同僚(今日の発表資料をさんざん直された)に「そんな文化ないっすよ!」って言われたので書いておきます。
ver. 3で諦めて印刷にまわすのはスラムダンクの三井以下やぞw
今日思いついた一番の名言やと思いましたw
それから前の会社でみんなで心がけてた標語を思い出したのでこれも書いておきます。
「理解されてアドバイスもらえるのがベスト、わかってもらうのがベター、わかった気にさせるのがマスト」
まぁそんな感じです