見出し画像

化学で使えるLLMエージェント:CACTUSを解説&動かしてみた

はじめに

CRSチームでソフトウェアエンジニアをやっている山口です!
今日は化学で使えるLLMエージェントであるCACTUSについて解説して、最後には実際に動かしていこうと思います!


CACTUSとは?

CACTUSは大規模言語モデル(LLM)と化学情報学ツールを組み合わせたLLMエージェントです。ChemCrowのようなLLM支援型化学合成プランナーから着想を得て、新薬設計および分子発見支援用に作成されたLLMエージェントなようです。
Gemma7Bとかの軽量モデルで化学系のベンチマークで高い精度出しているところがこのエージェントの売りなようですね。
もっというとローカルなLLMでそこそこの精度出せると機密性とかも考えなくていいのでめっちゃいいかもしれないです。

論文はこちら
https://arxiv.org/pdf/2405.00972

CACTUSの動作イメージ

具体的な動作イメージは以下の図ですね。シンプルなLLMエージェントのようです。Agentに関してはこちらで解説しているので読んでみてください。

CACTUS workflow 図

具体的にCACTUSがどんなことができるかを表にしました。実際にLLMAgentが使っているツールをわかりやすく説明しただけです。

$$

\begin{array}{|l|c|c|} \hline
ツール名 & ツールの用途 & 簡単な説明 \\ \hline
calculate_molwt & 分子量を計算する & 物質の重さを求める \\ \hline
calculate_logp & 分配係数を計算する & 物質の油水溶解度を調べる \\ \hline
calculate_tpsa & トポロジカル極性表面積を計算する & 分子の極性を評価する \\ \hline
calculate_qed & 薬物様性の定性的推定値を計算する & 薬らしさを数値化する \\ \hline
calculate_sa & 合成アクセシビリティを計算する & 合成のしやすさを評価する \\ \hline
calculate_bbb_permeant & 血液脳関門透過性を計算する & 脳への到達しやすさを調べる \\ \hline
calculate_gi_absorption & 消化管吸収を計算する & 腸からの吸収しやすさを予測する \\ \hline
calculate_druglikeness & 薬物様性を計算する & 薬として適切か判断する \\ \hline
brenk_filter & Brenkフィルター通過を計算 & 問題のある構造を検出する \\ \hline
pains_filter & PAINSフィルター通過を計算 & 偽陽性構造を確認する \\ \hline
\end{array}

$$


CACTUSの評価

ベンチーマークは以下のような質問を定性的質問、定量的質問各500問ずつさせて評価させたみたいです。定性的な質問はYes/Noで、定量的質問は数値で評価みたいですね。

定性的質問

$$
\begin{array}{|l|c|c|} \hline
質問 & ステップ & 回答\\ \hline
CCON=O は血液脳関門 (BBB) を通過しますか?& BBB ツール w/ SMILES & はい\\ \hline
C#C のGI吸収率は? & GI ツール w/ SMILES & 低い\\ \hline
\end{array}
$$


定量的質問

$$
\begin{array}{|l|c|c|} \hline
質問& ステップ& 回答\\ \hline
CCCC=O のQED値はいくつですか? &QED ツール w/ SMILES& 0.44\\ \hline
C(CS)O のTPSA値はいくつですか?& TPSA ツール w/ SMILES &20.23\\ \hline
\end{array}
$$

質問のタイプは主に、Druglikeness、PAINS Filter、Brenk Filter、BB Barrier、GI Absorption、MCIWR、QED、SA、TPSA、LogPみたいですね。具体的にはこんな感じです。

  • Druglikeness: 化合物の薬物様性に関する質問

  • PAINS Filter: 偽陽性の可能性がある構造の識別に関する質問

  • Brenk Filter: 毒性や反応性の高い構造の識別に関する質問

  • BB Barrier: 血液脳関門透過性の予測に関する質問

  • GI Absorption: 消化管吸収の予測に関する質問

  • MolWt: 分子量の計算に関する質問

  • QED: 薬物様性の定量的推定値の計算に関する質問

  • SA: 合成アクセシビリティの評価に関する質問

  • TPSA: トポロジカル極性表面積の計算に関する質問

  • LogP: 分配係数の計算に関する質問

化学系のものをひろくというよりは、新薬設計および分子発見支援用側のベンチマーキング用のテストセットみたいですね!実際の評価はというと以下のようになっています。

最低限のプロンプトとドメイン特化プロンプトの精度の違い

上記の図の表記のMinPromptとPromnptの違いですが、MinPromptは最低限のプロンプトを使用しているみたいで、Promptはドメインに特化させたプロンプトを使用しているみたいです。
上記グラフのGemma-7b Prompt(青色)やMistral-7b Prompt(薄ピンク色)をみてるとどちらもほとんどのデータセットで90%以上の精度を出していて、高い精度を達成していますね。

ただエージェントなしのLLMとの比較グラフがなくてそこが気になりますね。

全部の評価ファイルはこちらにありますね。


CACTUSを動かしてみよう!


動かす

では実際にCACTUSを動かしていきましょう。
GitHubは以下です。

GoogleColabを使用します。

  1. まずはリポジトリをクローンします。

!pip install git+https://github.com/pnnl/cactus.git

2.次にGoogleGeminiのAPIキーを設定します。以下から無料で取得できますので取得して設定してください。

import os
from google.colab import userdata
os.environ["GOOGLE_API_KEY"] = userdata.get('GOOGLE_API_KEY')

3.Cactusをimportして質問する。


質問1 分子量

まずは分子量を聞いてみましょう。
質問:What is the molecular weight of the smiles: OCC1OC(O)C(C(C1O)O)O

from cactus.agent import Cactus
model_answer = {}
Model = Cactus(model_name="gemini-pro", model_type="api")
model_answer[0] = Model.run("What is the molecular weight of the smiles: OCC1OC(O)C(C(C1O)O)O")
回答:The molecular weight of OCC1OC(O)C(C(C1O)O)O is 180.063388104

質問2 blood brain barrier(血液脳関門)

では次に、blood brain barrier(血液脳関門)を通過するかどうかを質問してみましょう。
質問:Does smiles: OCC1OC(O)C(C(C1O)O)O pass the blood brain barrier?

model_answer = {}
model_answer[0] = Model.run("Does smiles: OCC1OC(O)C(C(C1O)O)O pass the blood brain barrier?")

回答:Final Answer: OCC1OC(O)C(C(C1O)O)O does not pass the blood brain barrier

OCC1OC(O)C(C(C1O)O)Oは血液脳関門を通過しないとの回答みたいです!

合成のしやすさ(synthetic accessibility)

最後に合成のしやすさ(synthetic accessibility)について聞いてみましょう。
質問:What is the synthetic accessibility of the smiles:

SMILES = {0: 'CC(=O)OC1=CC=CC=C1C(=O)O',
       1:'CC(C)CC1=CC=C(C=C1)C(C)C(=O)O',
       2:'CC(=O)NC1=CC=C(O)C=C1',
       3:'C1=CC=C2C(=C1)C3=CC=CC=C3OC4=C2C=CC(=C4)C(=O)O',
       4:'C1=CC=C2C(=C1)C=C(C(=C2)C3=CC4=C(C=C3)N(C=C4)C)C(=O)O',
       5:'CN(C)C1=NC2=C(SC=C2)C=C1C3=CC=CC=C3.Cl'}

Model.run("What is the synthetic accessibility of the smiles: "+ SMILES[0])
回答:The synthetic accessibility of CC(=O)OC1=CC=CC=C1C(=O)O is 1.580039750008826

このスコアは0から10の範囲で表され、低いスコアほど合成が容易になります。この例では、比較的低いスコアが出ており、この化合物は比較的合成しやすいと評価されていますね。

最後に

CACTUSがあれば分子構造に対する各種評価などを簡単にでき、これをベースにした新たな分子設計のワークフローも構築できるのではないでしょうか?
LLM✖︎化学領域でお困りのことがある方がいましたらお気軽に下記までお問い合わせください!