ランク学習でバーチャルスクリーニングする

この記事は創薬 (dry) Advent Calendar 2019の20日目の記事です。

adventar.org

ランク学習という機械学習手法でバーチャルスクリーニングする話をします。

ランク学習とは?

ランク学習とは、順序関係を学習する機械学習です。
機械学習では、0か1を学習する「分類」と、目標変数の値を学習する「回帰」が有名ですが、その中間のような存在です。

f:id:tonets:20191223102447p:plain

ランク学習は順序=ランキングを出力するので、0か1の分類よりは詳しい情報が得られます。一方で、具体的に「IC50が◯nM」といった値までは予測できません。そういう意味で、分類と回帰の中間のような存在なわけです。
ランク学習の詳細については、こちらを見るとだいたいわかります。sz_dr先生によるつよいAdvent Calendarです。

f:id:tonets:20191223103104p:plain

adventar.org

 

バーチャルスクリーニングで何ができればよいのか?

f:id:tonets:20191223103501p:plain

バーチャルスクリーニングは、化合物の活性や物性などが良さそうなものを、膨大な化合物ライブラリの中から選抜する作業です。数千万化合物とかの中から、実際に実験する価値がありそうな数百とか数千とかの化合物を、計算機(と職人芸)で選びます。

実際に実験に回せる化合物の数には限度があります。実験の種類や予算にもよりますが、とりあえず1000個検討するみたいなことが多いです。ライブラリが1000万化合物だとすると、1000化合物は0.01%。「It's like looking for a needle in a haystack. (まるで干し草の山の中から縫い針を探すようだ)」と言われる所以でもあります。

一方で、似たような状況が、情報検索と呼ばれる分野で一足先に研究されていました。膨大なウェブページの山から、検索窓の単語にマッチするウェブページを検索するGoogleYahoo!などの検索エンジンです。ユーザーが期待するウェブページを瞬時に上位に示す検索エンジンの技術は、化合物のバーチャルスクリーニングにも応用できる、できそう、な気がしませんか?

つまり、こういうことです。

f:id:tonets:20191223125350p:plain

どうやってランク学習するのか?

szdr.hatenablog.com

ランク学習にもいろんな手法があります。ここでは2値分類でよく使われるSVMのランク学習版であるRankSVMというのを紹介します。詳細はsz_dr先生の記事で充分なのですが、簡単に説明しておきます。

 

f:id:tonets:20191223130023p:plain

SVMでは、判別平面からのサンプルの距離である「マージン」を最大化する最適化をしています。
RankSVMでも、似たような距離の最大化をしています。ランク学習ではサンプル間の順序関係がわかっているので、その順序を満たすように1列に並べるようなベクトル \mathbf{w}を探します。
図では、 x_1 \succ x_2 \succ x_3 \succ x_4 という順序関係があるので、この順番に1列に並べられるベクトルを探します。(  \succ は順序関係を表す記号です。数値であれば不等号  >、集合の包含関係であれば \supset に相当するような関係を表す記号です。) 1列に並べるベクトルはいくつもできますが、「できるだけサンプル間の距離が離れるように」並べます。正確には、一番近いサンプル間の距離ができるだけ大きくなるように並べ方を最適化します。
図では、\mathbf{w}_1の並べ方ではx_3x_4の間が一番近くなっており、\mathbf{w}_2 の並べ方ではx_1x_2の間が一番近くなっています。この2つを比べると、 \mathbf{w}_1の並べ方でのx_3x_4の間の距離の方が大きいので、\mathbf{w}_2よりも\mathbf{w}_1の方が良い、というように学習します。 f:id:tonets:20191223132116p:plain これでランク学習を使って、化合物のスクリーニングをすることができるようになりました。ばんざい。

無意味っぽい順序関係を無視する

ところで、化合物のスクリーニングでは、順序関係をそのまま使わない方が良いことがあります。 具体的には、こういう状況を想定しています。(パーセンテージの数値はたとえば10 uMでの阻害活性測定実験とかを想像してください) f:id:tonets:20191223132720p:plain この、「活性が無い2化合物の順序関係」と「活性値がめっちゃ似てる2化合物の順序関係」は、学習するときに使わないでおこうという作戦です。
実装は、確率的勾配降下法を使って\mathbf{w}の最適化を逐次更新しながらやる方法で実装できます。

f:id:tonets:20191223133341p:plain

具体的なコードは以下にあります。 szdr.hatenablog.com

どのくらい性能があがるのか?

PubChemのInhibition assayのセットを5つ持ってきて、普通にRankSVMするのと、無意味っぽい順序関係を無視してRankSVMするのを比べてみました。データセットはこちらです。
f:id:tonets:20191224083335p:plain
評価指標はNDCG1@100、評価方法は5-fold Cross Validationです。NDCG1@100の定義は以下にあります。 szdr.hatenablog.com

結果は以下のようになりました。 f:id:tonets:20191223133326p:plain 表の見方は、cutoffのon/offが似た活性値の化合物間の順序を無視する(on)かしない(off)か、ignore negativeのon/offが活性無し化合物間の順序を無視する(on)かしない(off)かに対応します。 どのデータセットでも、2つの無意味っぽい順序関係を無視して学習したほうが良い予測ができるという結果になりました。

おわりに

ランク学習は、情報検索分野を超えて、バイオインフォマティクス分野やケモインフォマティクス分野での応用が進んできています。個人的には、ランク学習と相性の良い問題がバイオ・ケモ分野にゴロゴロ転がっていると思っているので、興味を持ってもらえると嬉しいです。 f:id:tonets:20191224083102p:plain

おまけ

本記事は、以下の論文の内容の紹介でした。もう少し詳しい内容が以下に書かれています。 www.sciencedirect.com

Masahito Ohue, Shogo D. Suzuki, Yutaka Akiyama: Learning-to-rank technique based on ignoring meaningless ranking orders between compounds, Journal of Molecular Graphics and Modelling, 92:192-200, 2019. doi: 10.1016/j.jmgm.2019.07.009

おまけ2

szdr先生のブログ便利すぎワロタ

更新履歴

2019/12/14 目線が不適切だったので消しました