人気ブログランキング | 話題のタグを見る
ブログトップ

EARLの医学ノート

drmagician.exblog.jp

敗血症をメインとした集中治療,感染症,呼吸器のノート.医療におけるAIについても

【AI】GPT「PubMed Searcher」のアップデートVer.1.1

【AI】GPT「PubMed Searcher」のアップデートVer.1.1_e0255123_14514794.png
PubMed Searcher Ver.1.1バージョンアップ内容
・回答精度をあげるための指示の修正
・論文リストから目的に合った論文に緩く絞り込むスクリーニングプロンプト追加
・Elinkエンドポイントの追加による指示・アクションスキーマの変更(関連論文,引用論文,被引用論文の取得)
■2024年5月18日にPubMedの網羅的検索をChatGPTのユーザーインターフェース上で行えるGPTの作成方法を考案し,公開した.今回はそのアップデートである.
【AI】ChatGPTとAPIを使って網羅的なPubMed検索できるGPT「PubMed Searcher」
EARLの医学ノート
https://drmagician.exblog.jp/31031028/
■私が行ったのはGPTの提供ではなく,雛型の提供であり,各自でGPTを作成するぶん,自分で指示やアクションをカスタマイズできる.今回はその私なりのカスタマイズであるマイナーアップデート(Ver.1.1)で,あくまでも「網羅的検索」を想定しているもので,検索結果をむしろ絞りたい方は絞る指示に変えるとよい.

今回のアップデートの変更点

■実際に使用してみた方は分かるかもしれないが,GPTは確率的な動作を行う仕様の関係上,どうしても指示通りの回答出力にならないこともある.例えば,検索式が網羅的ではない,検索式に日本語が混じってしまう,ANDとORの使い方を間違う,検索結果が4件以上なら全論文をExcelファイルにまとめる指示なのに最初の20件しかまとめない,ESummeryを使う指示の場面でEfetchを使う,Excelにまとめるべきところで論文リストを回答に羅列する,などが挙げられる.これらの適切でない回答出力を減らすため,GPTの指示を改訂した.

(1)temperatureの指示
■全体を通して回答出力のtemperatureを低めにするよう指示している.これは,GPT自体にtemperatureというパラメーターがあり,このパラメーター値が低いほどブレのない回答になり,高いほど独創性が高い回答となる.ChatGPTやGPTsではこのパラメーターの設定はできない仕様であるが,ChatGPTにパラメーター指示を与えると,そのパラメーター値を模倣する性質をもっている.PubMed Searcherでは独創性は不要で,指示への忠実さが必要となるため,低くするよう指示した.

(2)検索式作成
■検索式を作成する際に日本語が混じることがあったため,日本語を含まないよう指示した.また,薬剤名に関しては,同クラスの一般名,薬理学名や化学名等をすべて含めることとした(例えば,Clinical Questionにステロイドがあっても,グルココルチコイドやプレドニゾロンといった名称が検索式に含まれないことがあった).また,AND,OR,()を適切に使用できていないことがよくあったため,明記した.

(3)検索結果の表示方法選択提示
■GPTが検索(ESearch)を行い,「〇件がヒットしました.」という回答の後に,これまではそのままESummaryでの詳細情報取得に移っていたが,この際に,「4件以上ある場合は表示せずExcelファイルにまとめる」が守られずに表示されていったり,「ヒットした論文をすべてExcelファイルにまとめる」が守られず10件または20件しかファイル化されない,ということも起こっているため,段階を踏んで指示遵守率を上げるため,一旦ESearchによる検索結果でのヒット数を提示し,その後の論文リスト提示方法(ChatGPT上で表示するか,Excelファイル化するか)をユーザーが選択できるようにした.

(4)関連論文,引用論文,被引用論文の取得
■新たにアクションのスキーマにおいて,ELinkのエンドポイントを追加し,特定の論文の関連論文,引用論文,被引用論文の情報も入手できるようにした(同時に指示も追加).ただし,PubMed掲載がかなり新しいものについてはこれらの情報は入手できないことに注意が必要である.

(5)目的に応じた論文リストのスクリーニングプロンプト
■試作段階のものであるが,論文リスト(Excelファイル)を,PICOなどに合致する論文に絞り込むスクリーニングを行うためのコードをプロンプトに追加した.論文リストを提示した上で,タイトルスクリーニングまたはアブストラクトスクリーニングを指示すれば動く.もともとGPTは「選択」というタスクが苦手なため,スクリーニングによる絞り込みはあまり得意ではないが,目的の論文がはじかれないようなプロンプトにしているため,絞り込みとしてはだいぶ緩めである.

■改訂したGPT指示(Instructions)は以下の通りである.GPTの指示の部分にコピペでOK.
This GPT will assist the user in retrieving literature information from PubMed.
It should be able to search PubMed using a specific query provided by the user and return relevant article information GPT should leverage NCBI account details and API keys to access PubMed data.

temperature:
 Keep the temperature parameter low when outputting responses.

response_to_clinical_question:
 steps:
  - Extract as many all relevant terms (synonym or quasi-synonym) as possible from the Clinical Question provided by the user according to the following rules.
    - Terms to be included in the search formula should not be in Japanese.
    - When the pharmacological or chemical class name of a drug is specified, include the pharmacological, chemical, or generic name of the drug.
  - Create your search query according to the following rules.
    - Enclose terms in double quotation marks.
    - Use "AND", "OR", "()" operators for tech theory.
      For example, in a search formula to find studies of drug X for septic DIC in adults, for the part corresponding to Participants, instead of (“adults” OR “sepsis” OR “DIC”), use ((“term 1 for adults” OR “term 2 for adults” OR...) AND (“term 1 for sepsis” OR “term 2 for sepsis” OR...) AND (“term 1 for DIC” OR “term 2 for DIC” OR...) (OR...) AND (“term 1 for DIC” OR “term 2 for DIC” OR...))
  - Ensure the search query is highly sensitive but not highly specific.
  - Ask the user for confirmation before performing the search.

search_results:
 - Indicate the number of search results and ask the user if he/she would like to compile the list of papers into an Excel file or output them in a table in the GPT response before proceeding to the next ESummary step.
 - At this point you should not output detailed paper information without permission.

esummary_step:
 - Obtain article information with ESummary.
 - If the user wishes to view the results on ChatGPT, a table with the PMID, article title of all results will be presented.
 - If the user wishes to compile all results into an Excel file, do not display article details in the response.

excel_file:
 - Include all articles in the Excel file without setting a limit on the number of articles.
 columns:
 - PMID
 - URL: Create a hyperlink to the article's PubMed page in the format https://pubmed.ncbi.nlm.nih.gov/PMID/
 - Title

upload:
 steps:
  - Verify that the number of articles in the file matches the number of search results.
  - Ensure each article includes all required information.
  - Redo the process if any information is missing.

efetch:
 usage: Use EFetch only when you need information on abstracts, authors or doi.

elink:
 usage: Use ELink and ESummery when you need information of similar papers, referenced papers or cited reference papers.

title_or_abstract_screening:
 If you are instructed to screen a list of papers, the following algorithm is used.
 import pandas as pd
 # Read the input file
 input_file = "path_to_input_excel_file.xlsx"
 df = pd.read_excel(input_file)
 # Extraction criteria (example with specified P, I, S)
 P = "specified Population"
 I = "specified Intervention"
 S = "RCT" # Change if a different Study Design is specified
 # Exclusion criteria (if S is RCT)
 exclude_terms = ["retrospective", "cohort study", "review", "meta analysis", "cross sectional", "observational study"]
 # Paper extraction function
 def extract_relevant_papers(df, P, I, S=None):
   extracted_df = df[df['Paper Title'].str.contains(P, case=False) & df['Paper Title'].str.contains(I, case=False)]
  if S:
   if S == "RCT":
    for term in exclude_terms:
      extracted_df = extracted_df[~extracted_df['Paper Title'].str.contains(term, case=False)]
   else:
     extracted_df = extracted_df[extracted_df['Paper Title'].str.contains(S, case=False)]
  return extracted_df
 extracted_df = extract_relevant_papers(df, P, I, S)
 # Save the output file
 output_file = "path_to_output_excel_file.xlsx"
 extracted_df.to_excel(output_file, index=False)
 print(f"The extracted list of papers has been saved to {output_file}.")
■追加改訂したアクションのスキーマは以下の通りである.「新しいアクション」ではなく,作成済みの「eutils.ncbi.nlm.nih.gov」を選択し,既に入力済みのスキーマの下に以下をコピペでOK.なお,「Your NCBI API key」と赤字で書かれた部分はAPIキーに置き換える.
/elink.fcgi/similar:
 get:
  operationId: fetchSimilarArticles
  summary: Fetches similar articles for a specified UID.
  parameters:
    - name: dbfrom
      in: query
      required: true
      schema:
        type: string
        example: pubmed
      description: The originating database (e.g., pubmed).
    - name: db
      in: query
      required: true
      schema:
        type: string
        example: pubmed
      description: The database to link to (e.g., pubmed).
    - name: id
      in: query
      required: true
      schema:
        type: string
      description: A comma-separated list of UIDs of the articles.
    - name: cmd
      in: query
      required: true
      schema:
        type: string
        example: neighbor
      description: Command to run (e.g., neighbor).
    - name: api_key
      in: query
      required: true
      schema:
        type: string
      description: Your NCBI API key.
  responses:
    '200':
      description: Similar articles information
      content:
        application/json:
          schema:
            type: object
            properties:
              linksets:
                type: array
                items:
                  type: object
                  properties:
                    dbfrom:
                      type: string
                    linksetdbs:
                      type: array
                      items:
                        type: object
                        properties:
                          dbto:
                            type: string
                          linkname:
                            type: string
                          links:
                            type: array
                            items:
                              type: string
/elink.fcgi/references:
 get:
  operationId: fetchReferences
  summary: Fetches references for a specified UID.
  parameters:
    - name: dbfrom
      in: query
      required: true
      schema:
        type: string
        example: pubmed
      description: The originating database (e.g., pubmed).
    - name: linkname
      in: query
      required: true
      schema:
        type: string
        example: pubmed_pubmed_refs
      description: The name of the link (e.g., pubmed_pubmed_refs).
    - name: id
      in: query
      required: true
      schema:
        type: string
      description: A comma-separated list of UIDs of the articles.
    - name: api_key
      in: query
      required: true
      schema:
        type: string
      description: Your NCBI API key.
  responses:
    '200':
      description: References information
      content:
        application/json:
          schema:
            type: object
            properties:
              linksets:
                type: array
                items:
                  type: object
                  properties:
                    dbfrom:
                      type: string
                    linksetdbs:
                      type: array
                      items:
                        type: object
                        properties:
                          dbto:
                            type: string
                          linkname:
                            type: string
                          links:
                            type: array
                            items:
                              type: string
/elink.fcgi/citedby:
 get:
  operationId: fetchCitedBy
  summary: Fetches cited references for a specified UID.
  parameters:
    - name: dbfrom
      in: query
      required: true
      schema:
        type: string
        example: pubmed
      description: The originating database (e.g., pubmed).
    - name: linkname
      in: query
      required: true
      schema:
        type: string
        example: pubmed_pubmed_citedin
      description: The name of the link (e.g., pubmed_pubmed_citedin).
    - name: id
      in: query
      required: true
      schema:
        type: string
      description: A comma-separated list of UIDs of the articles.
    - name: api_key
      in: query
      required: true
      schema:
        type: string
      description: Your NCBI API key.
  responses:
    '200':
      description: Cited references information
      content:
        application/json:
          schema:
            type: object
            properties:
              linksets:
                type: array
                items:
                  type: object
                  properties:
                    dbfrom:
                      type: string
                    linksetdbs:
                      type: array
                      items:
                        type: object
                        properties:
                          dbto:
                            type: string
                          linkname:
                            type: string
                          links:
                            type: array
                            items:
                              type: string

by DrMagicianEARL | 2024-05-22 14:32 | 医学・医療とAI

by DrMagicianEARL