【AI for Science試行録】第2回 特殊な要件を満たす文献セットの取得

Science Aidの鈴木です。AI for Science試行録の第2回は、ユーザーの特殊な要求に対してBiomniとFuturehouseがどのように処理を行うかを観察してみました。

AI for Scienceタスク

  • 特殊な要件を満たす文献セットの取得

下記がエージェントに入力したクエリとなっています。

あなたのタスクは、PubTatorおよびPubMedを用いた文献選定とフィルタリング処理です。以下の手順を順に実行してください 。

目的:PubTatorから2024-2025年の論文をランダム抽出し、特定の条件でフィルタリングしてPubMedIDリストを出力する。

処理手順、

Step 1: 論文データの取得

  • PubTator APIまたはデータベースから2024-2025年に発行された論文を取得
  • ランダムサンプリングで2000件を抽出
  • 各論文のメタデータ(タイトル、アブストラクト、生物種情報、遺伝子情報、PubMedID)を保持

Step 2: 生物種フィルタリング

以下のモデル生物を除外し、これらに該当しない生物種を対象とした論文のみを残す:

除外対象モデル生物リスト:

  • Escherichia coli
  • Saccharomyces cerevisiae
  • Schizosaccharomyces pombe
  • Bacillus subtilis
  • Dictyostelium discoideum
  • Caenorhabditis elegans
  • Drosophila melanogaster
  • Mus musculus
  • Rattus norvegicus
  • Bombyx mori
  • Schmidtea mediterranea
  • Ciona intestinalis
  • Danio rerio
  • Strongylocentrotus purpuratus
  • Oryzias latipes
  • Coturnix japonica
  • Xenopus laevis
  • Arabidopsis thaliana
  • Oryza sativa
  • Solanum lycopersicum
  • Lotus japonicus

フィルタリング条件:

  • 論文のタイトル、アブストラクト、キーワード、生物種タグに上記生物種が含まれる場合は除外
  • 学名の部分一致も考慮(例:E. coliS. cerevisiae等の省略形も除外)

Step 3: 遺伝子名記述論文の抽出

タイトルとアブストラクトに具体的な遺伝子名の記述がある論文のみを抽出:

遺伝子名の識別パターン:

  • 大文字で始まる3-8文字程度の遺伝子名(例:CsE74A, GAPDH, P53, ATP1A1)
  • イタリック体で表記された遺伝子名
  • 遺伝子名の後に数字や文字が続くパターン(例:CsE74A1, beta-actin)
  • 一般的な遺伝子命名規則に従うパターン

具体的な検索条件:

  • 正規表現パターン: [A-Z][A-Za-z0-9]{2,7}[A-Z0-9]*
  • ハイフンやアンダースコアを含む遺伝子名も考慮
  • 生物種略称の後に、遺伝子名が記載されている場合も含む(例:CsE74A)
  • PubTatorの遺伝子アノテーションがある場合はそれも利用

除外すべき一般用語:

以下のような一般的な略語は遺伝子名から除外:

  • DNA, RNA, ATP, GTP, GDP, ADP, etc.
  • PCR, qPCR, RT-PCR等の実験手法
  • ELISA, SDS-PAGE等の分析手法
  • 単位や化学式(mg, ml, CO2, H2O等)

Step 4: 結果出力

フィルタリング完了後、以下の形式で結果を出力:

`=== フィルタリング結果サマリー ===

初期抽出論文数: 2000件

生物種フィルタリング後: [X]件

遺伝子名記述フィルタリング後: [Y]件

=== PubMedIDリスト ===

[PubMedID1]

[PubMedID2]

[PubMedID3]

...`

重要な注意事項

  1. データ精度: PubTatorの生物種アノテーションが不完全な場合があるため、テキストベースの検索も併用する
  2. API制限: PubTator APIのレート制限を遵守し、必要に応じて処理を分割する
  3. エラーハンドリング: ネットワークエラーや不正なデータに対する適切な例外処理を実装
  4. 進捗報告: 処理の進捗を定期的に報告する
  5. データ保存: 中間結果を保存し、処理が中断された場合の復旧を可能にする

処理完了の確認

  • 全ステップが正常に完了したことを確認
  • 最終的な論文数が妥当な範囲内であることを検証
  • PubMedIDの形式が正しいことを確認

この処理を開始してください。

つまりやりたいこととしては、下記3点のサブタスクになります。

  1. 2024-2025年のPubMed論文から2000件をランダムに取得
  2. 非モデル生物を対象とした研究論文に絞り込む
  3. 遺伝子名がタイトルもしくはアブストラクトに記述されている論文に絞り込む

使ったAIエージェント

今回のタスクでエージェントに求める能力

  • ユーザーの求めるタスクを把握する能力
  • 特殊な要件を満たす文献セットを取得する能力
    • 任意に指定した範囲のPubMed文献から、任意の数の文献をランダムにサンプリングする能力
    • 論文内で対象とされている生物種を判断する能力
    • 論文のタイトルとアブストラクトから遺伝子名があるかを判断する能力

Biomni

タスク把握能力

  • 私の入力を元に、Biomniがプランしたタスクは下記8点でした。
  • タスクの把握について問題はなさそうです。
  1. Set up necessary imports and helper functions
  2. Research PubTator API endpoints and access methods
  3. Implement function to retrieve 2024-2025 papers from PubTator
  4. Randomly sample 2000 papers from the retrieved data
  5. Create model organism filtering function to exclude specified species
  6. Implement gene name detection and filtering function
  7. Apply filtering pipeline and generate final results
  8. Save results to output directory with proper formatting

2024年のPubMed文献の中から2000件をサンプリングするタスク

  • 失敗
  • biomniがやろうとしていることは正しいのですが、下記のPubMedAPIエンドポイントへ問い合わせるためのURLが間違っています。

      URL: https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=2024%5Bpdat%5D&retmax=3000&retmode=xml
      Found 1734669 total papers for 2024
    
    • 上記のURLだと2024という文字列が含まれる文献がヒットしてしまうので、1734669件という非常に多くの論文がヒットしてしまっています。
    • 実際には、https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi?db=pubmed&term=filter[all] AND “journal article”[pt]&retmax=10000&retmode=xml%mindate=2024/01/01&maxdate=2024/12/30というURLである必要があります。
    • さらに、これではPubMed APIの限度である9999件を超えてしまうので、2024年1月から6月、7月から12月、など2回に分けて問い合わせる必要があります。
    • 現在のエージェントシステムでは、上記のような少し込み入った作業は未対応のようです。
    • [20250811追記] Pymedというシンプルなパッケージを使っているので、クエリパラメータの理解をLLMの内部知識に依存していることが原因の一つと考えられます(参照:https://zenn.dev/roy29fuku/scraps/4fc0ddf94c8176#comment-3e5175aff1a0c6)。

モデル生物を対象とした論文をリストから除外するタスク

  • 失敗
  • biomniが事前に作成したモデル生物の文字列リスト(eg: "Oryza sativa", "O. sativa", "O.sativa", "rice", "Mus musculus", "M. musculus", "M.musculus", "mouse", "mice", など)を論文のタイトルとアブストラクトと比較し、文字列マッチした論文を除外するという処理を行なっていました。
  • 足りなかったこととしては、下記となります。
    • PubTatorのSpeciesタグが未確認
    • biomniが作成したリストは網羅的ではない(eg: patientsなどがアブストラクトに入っているとヒトを対象とした研究のことが多いが、patientsが取り除くリストに入っていない)

遺伝子名を認識するタスク

  • 失敗
  • 理想としてはLLMを使って判別をして欲しかったですが、biomniは愚直に正規表現等を使って遺伝子名の有無を判断するPythonスクリプトを生成しました。
  • 試みとしてはいいのですが、正規表現ではノイズを大量に拾ってしまい、余計な文献を選抜してしまっています。
    • 例えば、Detected genes: ['pre-term', 'full-term', 'no-triptan', 'US-based'] のような単語たちを遺伝子名と認識して処理してしまっています。

全体の感想

  • タスク把握能力は有能
  • 他のタスクは惜しい部分もあるが、失敗
  • 本件のような複雑なタスクにおいて、後述するfalconと比較すると、非常に優秀
  • CodeActアプローチなので、基本的に失敗の原因はbiomniが書くPythonコードに存在します。失敗の原因が明確となり、修正検討をしやすい点が良いと思いました。
  • そもそもバイオメディカルを目的としたエージェントなので、非モデル生物に関するタスクの処理は困難であることが予想されます。

Falcon (futurehouse)

タスク把握能力

  • 失敗
  • biomniのようにプランしたタスク一覧が表示されないので不明ですが、明らかに私の意図とは違う作業を行なっているようです。
  • Paper Searchと呼ばれる処理を行われていました。
    • 2024[dp] OR 2025[dp], min_year: 2024, max_year: 2025というクエリで得られる合計166の文献の中身を読み、それをまとめる処理を実行。

2024年のPubMed文献の中から2000件をサンプリングするタスク

  • 失敗
  • タスクを把握した形跡もなければ、実行した形跡もない。

遺伝子名を認識するタスク

  • 失敗
  • タスクを把握した形跡もなければ、実行した形跡もない。

全体の感想

  • 特殊なタスクには不向き
  • futurehouseについては、規定されている用途(例えばfalconであれば、produces a long report with many sources, good for literature reviews and evaluating hypotheses) に合致するタスクのみに対応していそう

できたこと

  • Biomniは、ユーザーの要求を理解する能力が非常に優秀。
  • Biomniは、CodeActアプローチが採用されており、分割されたサブタスクごとにPythonコードを生成するため、もしタスクが失敗してもその原因を特定しやすいという利点があります。また、生成されたコードをローカル環境で少し修正して使うという用途もあるかと思いました。

まとめ

  • 今回の特殊な要求については、現状ではbiomniとfuturehouseのどちらで処理するのも難しいという結論に至りました。
  • biomniは惜しい部分もありましたが、必要な3つのタスクのほとんど全てで失敗という結果でした。しかし、タスク実行のために生成されたPythonコードの一部には有用なものがありました。
  • 一方、Futurehouseは、今回のタスクのような特殊な要求の実行には不向きだと考えられます。

20250810追記

  • 先日の私の入力に、致命的な私のミスを発見
    • 除外する生物種リストにヒトが入っていなかった。
  • 上記のミスを修正、および前回のタスク失敗の原因を入力に加え、サブタスクごとに再実行

タスク1:2024年のPubMed文献の中から2000件をサンプリングするタスク

  • 結果:
    • 成功
  • 参考情報:
    • 適切なAPIリクエストを実行。
    • 依頼内容に追加で、生物種や遺伝子MeSHが付いている文献の割合まで出してくれた。

タスク2: モデル生物を対象とした論文をリストから除外するタスク

  • 結果:
    • 失敗
  • 参考情報:
    • 引き続きPubTatorのSpeciesタグが未確認。
    • Taxonomy IDを与えたが、使用していない。

タスク3: 遺伝子名を認識するタスク

  • 結果:
    • 失敗
    • 2000件の文献のうち、13件に絞り込まれた。
    • 目視確認すると、そのうち4件は目的対象と判断できる論文だったが、残りの9件はモデル生物を対象、もしくは生物を対象としていない研究だった。
  • 参考情報:
    • 偽陽性の削除のためにbiomniは何度もコード生成と実行を再試行しているが、結局多くのノイズを拾っている。
    • そもそもタスク2が失敗しているので、必要な文献が抜けている。

※ 余談: AI for ScienceとAI for Research

ここからは本記事とは関係のない、まったくの余談です。

下記論文(https://arxiv.org/pdf/2507.01903)にて、AI for ScienceとAI for Researchの言葉の使い分けが書かれていました。彼らによるとAI for Researchの方が、AI for Scienceより幅広い認識らしいです。この試行録はAI for Research的な内容も含むかもしれないですが、AI for Scienceではじめたので、そのままの名前で続けていきます。