Google Summer of Code 2019 参加記 (1)

今年もGoogle Summer of Codeに採択されました。

既にプロジェクト期間の1/3が終わってしまいましたが、1st evaluationをpassして区切りがいい日なので簡単に今年のプロジェクト紹介をしておきます。

去年のプロジェクトではOpen Babelの3次元構造予測手法の改善を行いました。

去年のプロジェクトの成果をまとめた論文を現在投稿中です。プレプリントをChemRxivで公開しています。Fast, Efficient Fragment-Based Coordinate Generation for Open Babel

今年のプロジェクトでは去年のプロジェクトを発展させ、より精度の高い3次元構造予測を目指します。 去年のプロジェクトで実装した手法では実験データから得た分子の部分構造をデータベースとして事前に持っておき、予測対象の分子の部分構造がデータベースに含まれていたらデータベースと同じ構造をそのまま用います。 部分構造同士をつなぎあわせることで全体の構造を予測するのですが、全体構造を考慮せずにつなぎあわせるため間違った立体異性体を予測してしまう場合がありました。 今年は原子同士が距離制約を満たすように原子を配置することで分子構造を予測するdistance geometryという手法をOpen Babelに実装し、立体異性体の正解率を向上させることを目指します。 ここで部分構造に関してはデータベースにある構造を用いることで計算を省略し、より高速・高精度な予測を目指すのがメインのアイデアです。 Distance geometryはRDKitの3次元構造予測で用いられている手法なので、Open Babelの開発者のほかにRDKitの開発者にもメンターとして協力してもらうことにしました。

今年のProposalを貼っておきます。 GSoC2019_proposal.pdf - Google ドライブ

現時点では各原子を別々に扱う通常のdistance geometryの実装が完了しました。残りの期間で部分構造を用いたより精度の高い手法を実装していきます。

Google Summer of Code 2018 参加記 (2) プロジェクト終了編

Google Summer of Code 2018 参加記 (1) 応募編 - n-yoshikawa’s blogの続きです。

先日、GSoCのプロジェクトが無事終了したことを認定するメールが来ました。

というわけで参加記の続きを書きます。

プロジェクトの内容

私が参加したのは Open Chemistry という団体の Open Babel というソフトのプロジェクトです。 Open Babel は分子情報のフォーマットを変換する際に使われるソフトです。分子情報のフォーマットにはSMILESのように文字列で原子間の結合のみを表すもののほかに、MOLやSDFのように結合情報に加えて各原子の3次元座標の情報を含むものがあります。SMILESには3次元座標情報が含まれていないので、SMILESをSDFに変換するためには結合情報から3次元構造を予測する必要があります。

Open Babel には原子を1つずつつないで3次元構造を予測する機能が実装されていましたが、このプロジェクトでは複数の原子を一気につなぐ仕組みに変更することで3次元構造の予測を高速化しました。A.Andronico, et al. の論文の方針に従って入力分子を rotatable bond で切断し、回転する結合を含まない分子の断片を fragment としました。事前に Crystallography Open Database などに含まれる分子から fragment の3次元構造データベースを作成しておき、入力分子の fragment がデータベースに含まれているものと一致した場合は fragment 中の原子の座標をデータベースに基づいて設定します。既知の fragment に含まれる原子は fragment 内で相対位置が保たれるようにしながら同時につなぎ、既知の fragment に含まれない原子は以前のように1つずつつなぐことで以前よりも高速な3次元構造予測を実現しました。この方法で求めた構造は MMFF94 で最適化を行った後で出力されます。

なお、この方法ではシス-トランスが間違っている構造が出力される場合があります。間違っている場合は Distance Geometry という RDKit に実装されているのと同じ手法を使って3次元構造を予測するのですが、Open Babel では実装できていません。現在できている部分のデバッグを手伝ったのですがまだ完全ではないので、GSoC終了後もこの部分について実装を手伝おうと思っています。

その他の詳細については Final Evaluationの資料を見てください。

期間中の出来事

Community Bonding (4/14〜5/15)

最初の1ヶ月はコミュニティと交流する期間ということで、開発者MLにプロジェクト紹介のメールを投げたりSlackに入れてもらったりしました。 コードを眺めたりもしましたが全く進捗はありませんでした。

First Evaluation (6/15) まで

コーディング期間が始まったらメンターから連絡が来て、メンターが昔書いたがまだうまく動いていないコードを渡されました。MLに質問を投げるなどしているうちに動くようになりましたが、一部の分子でNaNが出るバグがありつらくなっていたらFirst Evaluationになりました。Evaluationでは How often do you interact with your mentor(s)? とか What is your favorite part of participating in GSoC? とかの軽い質問を聞かれるだけでした。メンターがこの人はpassだと答えたらpassする仕組みのようです。

Second Evaluation (7/14) まで

1週間くらいかけてNaNの原因を探していましたが、1つの分子の中に同じ fragment があるときの扱いが間違っていたことが判明し解決しました。 その後は精度向上の測定、フラグメントデータベース作成方法の変更、検索の高速化、torsion angle を使うことで精度が向上するかの調査、メモリリークの調査などをしました。Second Evaluation は First Evaluation と同じような感じでした。

Final Evaluation (8/15) まで

幾何異性体をうまく扱えないと3次元構造予測が失敗してしまうので、最後の期間はDistance Geometry のデバッグを行いました。メンターに渡された動かないコードを論文に従って書きなおすなどしてバグの要因を探しました。結局シス-トランスが正しくなっているかを判定する関数が間違っていたことが分かり、その部分を書き直したらなんか動くっぽい感じになりました。ただ現在の実装はあまりにも雑なので一から書き直すことになるかもしれません。

Final Evaluation では GSoC 期間中にやったことをまとめた文章を提出する必要があるのでGoogle Docsに書いてコメントをもらい、コメントに従って修正し……を繰り返してOKが出た文章を提出しました。

8/23にFinal Evaluationの結果が出て、冒頭に書いたように無事合格しました。

全体を通して

週40時間コードを書くという設定でしたが、実際のところはちょっと書く→詰まる→メンターに相談する→半日後に返事が来る→またちょっと書く→詰まる……という感じだったので実際に40時間は書いていないと思います……。研究室の教授にこっちを優先していいと言われたこともあって、授業期間でしたがGSoCとの両立は全く問題ありませんでした。参加資格のある人は来年応募するといいと思います。

得られたもの

  • $6000
  • OSSの開発経験
  • ケモインフォマティクス研究者の知り合い
  • GSoC Tシャツ(そのうち届くらしい)
  • Googleインターンかフルタイムのポジションに1回紹介してもらう権利
  • サンフランシスコに行ったときにGoogleのオフィスを見学する権利

Google Summer of Code 2018 参加記 (1) 応募編

Google Summer of Code 2018 に提出した Proposal が採択されました。 他の人の参加記に助けられたので自分も書き残しておきます。

Google Summer of Codeとは

Google Summer of Code (GSoC) は、Googleが認定したオープンソースのプロジェクトに参加するとGoogleから報酬をもらえる、学生向けのイベントです。 2018年の報酬額は日本の学生の場合6000ドルです。

2018年の応募締め切りは3月28日、コーディング期間は5月15日〜8月7日です。 Summer という名前がついていますがそれはアメリカの大学基準の話であって、日本の夏休みとは期間が異なります。

応募資格は以下の通りです。

  • 18歳以上であること
  • Acceptance Date の時点で大学・大学院などの教育機関に属していること
  • 住んでいる国での就労が禁止されていないこと
  • アメリカと通商が禁止されていない国に住んでいること

イベントの流れはだいたい次のような感じです。

  1. 自分のプロジェクトの Proposal を書いて Organization に送る
  2. Organization 内での選考の結果、Proposal が選ばれる(←いまここ)
  3. メンターの監督の下でプロジェクトを進める
  4. メンターからの Evaluation で落とされなければ報酬がもらえる(2018年は1st, 2nd, Finalの3回の評価があり、それぞれ1800, 1800, 2400ドルもらえる)

詳しくは公式サイトを見てください。 今年とURLが同じなら Get StartedHow it works が参考になると思います。

メンター候補とコンタクトを取る (3/12)

ここからは採択までの流れを書きます。

ある日、今年の募集はいつだろうと思ってGoogle Summer of Code のページを見てみたらちょうど募集期間開始の前日だったので慌てて情報を集めました。 ここで参考にしたのは以下のサイトです。先人の方々ありがとうございました。

まずGSoC のサイトの Organization 一覧から興味を持った Open Chemistry を選び、 GSoC Ideas を眺めて一番面白そうだった "Fast, Efficient Fragment-Based Coordinate Generation" というプロジェクトに応募することに決めました。

とりあえずコンタクトを取れというのが先人の共通見解だったので、そのプロジェクトのメンター欄にあったアドレスに次のメールを送りました。

Subject: GSoC 2018

Hi,
I'd like to participate in Google Summer of Code 2018 at Open Chemistry.
In particular, I'm interested in "Fast, Efficient Fragment-Based Coordinate Generation" on the ideas page.
I use Open Babel in my research and generating 3D coordinates is important for me.
Could you tell me more about the project?

Proposal を書く(〜3/18)

3/15に返信が来て、プロジェクトの詳細(論文情報など)と、何か issue を立てるか小さな pull request を送ると良いというアドバイスをもらいました。 自分が関わりそうな部分の issue を眺めていたら自明な改善点があったのでしょぼいプルリクを投げてマージしてもらいました

並行してProposalを書きました。Applying to GSoC というページが用意されていたのでその指示に従ってテンプレートを埋める形でGoogle Document で書いていきました。

また、Acceptance Date の時点で学生であることを証明する書類を提出するよう要求されました。 有効期間に4月を含む学生証があるならそれでいいのですが、ちょうど学部から大学院に上がるところで学部の学生証は有効期限が3月までで、大学院の学生証はまだ受け取っていないという状態だったので困りました。 ダメだったら再提出を要求されるということだったので、ダメ元で大学院の合格通知をスキャンした画像と自分で内容を英訳した文章を送ったところ受理されました。 「平成30年 4月」と書いてあるところを「April, 2018」と訳す超訳だったのですが問題ありませんでした。

Proposal を書き直す (〜3/27)

GSoC のDashboard からProposal の草稿を書いた Google Document のリンクを Organization に送り、同時にメンター候補に「Proposal 書いたから見てくれ」というメールを送りました。 また GSoC 経験者の yamaguchi さんや研究室の留学生にもリンクを送ってコメントをもらいました。

コメントをもとに書き直し作業をしばらく行いました。 実際に作業していたページへのリンクを貼っておきます。 docs.google.com

Proposal は複数団体に送れるのですが、他に参加したい団体がなかったので一つに時間をかけることにしました。

Proposalの最終版はPDFで送ることになるため「TeXで書くと印象がいい」という噂に従って LaTeX で PDF を作って送りました。 実際に送ったProposalは以下のリンクから見ることができます。

GSoC_proposal.pdf - Google ドライブ

特に頑張ったところは以下の通りです。

  • 論文をいっぱい引用するなどして十分な調査をしていることを示す
  • 過去の経験を引っ張りだしてプロジェクトの完遂に十分な能力があることをアピールする
  • スケジュールを頑張って週単位で書く(どうせスケジュールなんて破られるのだが、応募者がちゃんとタスクの分解ができるかを見たいらしい)

日本の大学の場合は GSoC の期間中に講義があると思うのでその旨はちゃんと書いて応募時点でメンターの理解を得ておくとよいと思います。

採択される (4/24)

朝起きたらGoogleからメールが届いていました。 f:id:n-yoshikawa:20180426015201p:plain

メンターからは "Congrats - your application was excellent and highly rated by a wide range of mentors!" と言われました。 Open Chemistryには52件の応募があり7つ採択されたので倍率は7倍ちょっとでした。

というわけで採択されたので Evaluation で落とされないよう頑張ってコードを書こうと思います。 質問がある人はコメント・Proposal にあるメールアドレス・Twitter などで聞いてくれたら答えます。

続きはこちら→Google Summer of Code 2018 参加記 (2) プロジェクト終了編 - n-yoshikawa’s blog