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

EARLの医学ノート

drmagician.exblog.jp

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

【AI/無料で使用可能】論文/学会の抄録作成自動化・書き方学習GPT(Abstract Creator and Teacher GPT)_e0255123_14444418.png
■論文や学会のタイトル・抄録(Abstract)は,その研究の顔ともいえる重要な部分であるが,これをうまくまとめるには,基本ルールの習得と慣れが必要である.今回,NEJM(the New England Journal of Medicine)風の抄録を作成できる,もしくは抄録の作成方法を学べるGPTs「Abstract Creator and Teacher GPT」を筆者が作成したので公開する.このGPTsは,URLベースで公開しているため,ChatGPT無料ユーザーでも使用可能である
Abstract Creator and Teacher GPT
https://chatgpt.com/g/g-Gu7NbTqjw-abstract-creator-and-teacher-gpt

1.NEJM誌の抄録はなぜ評価されるのか?

■このGPTではベースの抄録の書き方をNEJM風にしている.論文・研究内容を抄録にまとめる上で非常に参考になるのはNEJMである.余計なことは書かない簡潔性と,必要な情報はしっかりと盛り込む情報量のバランスが非常によくとれており,読みやすいことでも有名である.

(1)明確さと簡潔さ
■NEJMの抄録は非常に明確で簡潔である.研究の目的,方法,結果,結論が明瞭に述べられており,読者が短時間で重要な情報を把握できるようになっている.また,NEJMは医学において特定の領域の雑誌ではないため,幅広い領域の査読者・読者が閲覧するため,誰でも分かりやすい書き方となっている.

(2)厳密な標準化
■NEJMの抄録は厳密に標準化されており,各セクションで含めるべき情報が明確に定義している.これにより,抄録の質と一貫性が保たれている.

(3)統計的詳細の提供
■NEJMの抄録は,主要な結果に対する具体的な統計的な指標(例:相対リスク,信頼区間,P値)を必ず明示的に示すしている.これにより,読者は結果の信頼性や重要性をすぐに評価できる.

(4)クリアな結論
■NEJMの抄録は,結論部分が明確で強調されており,副次評価項目がどうだった,研究者の思いなど余計なことは書かれていない.これにより,読者は研究の主要な貢献や意義をすぐに把握できる.

(5)エディトリアルサポート
■NEJMは執筆者に対して強力なエディトリアルサポートを提供しており,抄録の内容や表現を洗練するための支援を行っていて,これにより論文全体の質が高まっている.

2.Abstract Creator and Teacher GPTの機能

■本GPTsは,研究・論文内容をアップロードもしくはプロンプトに入力し,タイトル・抄録作成を指示するとタイトルと抄録が作成される他,タイトルと抄録の作成方法のレクチャーを受けることもできる.

(1)タイトル作成
■本GPTでは,過去のガイドライン等をふまえて,論文・研究内容から,論文内の重要ポイントを前面にだしたタイトル構成になるように指示している.

(2)抄録作成
■本GPTはNEJMの抄録の特性と抄録作成の基本ルールに則った抄録作成をベースとするが,勿論,研究デザイン,構成,文字数をプロンプトで指示することでカスタマイズすることも可能である.文字数制限に関してはCode Interpreter(Advanced Data Analysis)で確認するよう指示しているため,単なるプロンプト指示よりも正確である.

(3)タイトル・抄録の書き方のレクチャー
■いくらGPTsが抄録を作成してくれると言っても,自分の研究であり,その重要ポイントがどこなのか,何を伝えたいのか,などは本人でなければ分かりにくい.もっとも,ChatGPT自体は内容圧縮が得意でも,重要ポイントを選定するタスクはそこまで得意ではない(Claude-3の方が得意).やはりAIが作成するものは参考程度にすべきで,最終的には自分でタイトルと抄録を書くべきである

■タイトル・抄録の書き方・考え方については,ChatGPT自体がレクチャーもできるが,本GPTでは,学会・論文でのタイトル・抄録作成のためのガイドラインや抄録作成を効果的に学生にレクチャーする方法の論文などを3本アップロードしており,それらもChatGPTが参照した上でのレクチャーを受けることができる.

3.本GPT作成の特徴

■このGPTsの精度も知ってもらう上で,作成方法についても言及しておく.このGPTsでは,指示(Intsructions)と知識(Knowledge)を作成する上で,以下のような精度を高めるための工夫を施している.

(1)指示(Instructions)の工夫
■本GPTsの特徴は,単に指示(Instructions)に文章を入れただけというわけではない.GPTsを作成する上で,「より指示を理解して正確に回答を出力する」ための工夫を施している.具体的には,2024年5月25日にOpenAIから公開された「カスタムGPTの指示書を作成するための重要なガイドライン」を遵守し,また,GPTが理解しやすいようにYAML形式でInstructionsを構成している
カスタムGPTの指示書を作成するための重要なガイドライン
2024年5月25日 OpenAI
https://help.openai.com/en/articles/9358033-key-guidelines-for-writing-instructions-for-custom-gpts
(2)知識(Knowledge)の工夫
■知識(Knowledge)には,学会・論文でのタイトル/抄録作成のためのガイドライン等を3つアップロードしており,ChatGPTがそれらを参照して回答できるようになっている.ただし,ガイドラインをそのままpdfファイルでアップロードした場合,テキスト抽出過程が入るため,情報の解析に時間がかかってしまう.このため,pdfファイルから重要な部分をClaude-3でまとめ,それらをテキストファイルでYAML形式にしてアップロードしている.このやり方の方が階層構造をもつガイドラインを整理しやすく,プログラムやスクリプトによる解析が容易で,GPTsが読み取りやすい.また,内容がまとめられているため,ガイドライン原本よりも情報量が圧縮されているぶんより早く情報を取得できる.
# by DrMagicianEARL | 2024-05-27 14:46 | 医学・医療とAI
【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
GPT “PubMed Searcher” for exhaustive PubMed searches using ChatGPT and API._e0255123_16055578.png
Although there are some useful AI programs such as Consensus, Elicit, and Perplexity, they are not perfect and manual PubMed search is still the most exhaustive and accurate. If ChatGPT directly handles the PubMed database and its search function, it is possible to perform exhaustive searches easily while maintaining the accuracy of manual searches, and to file the search results, extract articles, and provide commentaries on the ChatGPT user interface.

ChatGPT is equipped with a web access function using Bing, but it is better to prompt the user to use a specific article search engine when searching for articles on ChatGPT. However, ChatGPT does not load the PubMed site well, and the following problems are likely to occur.
Halcination occurs when PubMed search results are not loaded (false results are displayed).
The abstract page of an article does not load properly.
Only one page of the article search results can be read.
This happens because of the following

(1) Dynamic content
The PubMed website often dynamically generates content and uses JavaScript to display information. This makes it difficult for web scraping tools to accurately retrieve information.

(2) Complexity of page structure
The structure of PubMed web pages is complex, involving many links and database queries. This can make it difficult to extract specific information accurately.

(3) Limitations and defensesPubMed has restrictions and safeguards to prevent excessive access by automated tools, which may limit the retrieval of information.

Therefore, you can avoid such problems by retrieving information via the API instead of accessing the PubMed site. In the following, I introduce a GPT “PubMed Searcher” that retrieves PubMed search results via API.

1. How GPT "PubMed Searcher" works

Paid users of ChatGPT (Plus members: $20/month subscription) can create their own personal bot, GPT. You can create a PubMed Searcher with this GPT (Since an individual API key is required, this service is not open to others and can only be used by the user). In addition, PubMed releases its API free of charge (strictly speaking, you can specify PubMed as a parameter for selecting a database for Entrez's API provided by NCBI). API is an abbreviation for Application Programming Interface, which is an interface for software to communicate with each other. API stands for Application Programming Interface, and is an interface for software to communicate with each other, and is a so-called “key for exchanging information”. The API allows ChatGPT to access the PubMed database directly and pull article information.

The PubMed API requires an account with NCBI and your own API key. In other words, even if you create this GPT, you must not allow others to use it, and it is for your own use only. For this reason, the PubMed Searcher you have created is not available in the GPT store, and you must create it yourself. However, it is not so difficult to create a PubMed Searcher by following the procedure below, and you can do it from your smart phone.

2. Procedure for creating GPT "PubMed Searcher"

(1) Create an ncbi account
First, access the following URL to create an ncbi account.
https://www.ncbi.nlm.nih.gov/account/
(2) Obtain an API key
After obtaining an account, access the following account setup page and obtain an API key from the API Key Management section at the bottom of the page. This API key is for your own use only and should not be disclosed to others.
https://www.ncbi.nlm.nih.gov/account/settings
(3) Creating a GPT
Access the web version of ChatGPT, click “Explore GPTs” on the left bar, and then click "+ Create" on the upper right to open the GPT builder. Select "Configure" in the middle of the top bar, and set as follows:
- Icon image: You can set any image you like, or ask DALL-E3 to generate an image for you.
- Name: Set any name you like (e.g., PubMed Searcher).
- Description: A short description that is displayed when GPT is opened. Put any description you like (e.g., "This GPT is intended for exhaustive searches in PubMed").
- Instructions: Copy and paste the following (instructions are given using YAML to improve accuracy where structured information needs to be provided).
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.

Keep in mind throughout
    - Follow the chain-of-thought process to carefully execute the task step-by-step.
    - Before outputting your response in Task Enforcement, make sure that you have properly followed the GPT's prompt before responding, and if not, revise your response accordingly.

Clinical Questionへの対応:
```yaml
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.
    - Ensure the search query is highly sensitive but not highly specific.
    - Ask the user for confirmation before performing the search.

search_results:
  steps:
    - Indicate the number of results found.
    - If ESearch results exceed 3, do not display article details in the response.
    - Use ESummary to compile all results into an Excel file.
    - Include all articles in the Excel file without setting a limit on the number of articles.

excel_file:
  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 when you need information of similar papers, referenced papers or cited referenced papers.
- Conversation starters: No special setting required.
- Knowledge: No special settings required.
- Capabilities: Check "Web Reference" and "Code Interpreter".
- Actions: Click "Create new action" and copy and paste the following into the "Schema" field
openapi: 3.0.0
info:
  title: PubMed API
  description: API to search and retrieve literature from PubMed using esearch, esummary, and efetch endpoints.
  version: 1.0.0
servers:
  - url: https://eutils.ncbi.nlm.nih.gov/entrez/eutils
    description: NCBI E-utilities server
paths:
  /esearch.fcgi:
    get:
      operationId: searchLiterature
      summary: Searches for literature in PubMed.
      parameters:
        - name: db
          in: query
          required: true
          schema:
            type: string
          description: The database to search (e.g., pubmed).
        - name: term
          in: query
          required: true
          schema:
            type: string
          description: The search term(s).
        - name: retmax
          in: query
          required: false
          schema:
            type: integer
          description: The maximum number of results to return.
        - name: retmode
          in: query
          required: false
          schema:
            type: string
          description: The return mode (e.g., xml, json).
        - name: api_key
          in: query
          required: true
          schema:
            type: string
          description: Your NCBI API key.
    responses:
      '200':
        description: Search results
        content:
          application/json:
            schema:
              type: object
              properties:
                count:
                  type: integer
                retmax:
                  type: integer
                retstart:
                  type: integer
                ids:
                  type: array
                  items:
                    type: string
  /esummary.fcgi:
    get:
      operationId: getSummary
      summary: Retrieves the summary of literature based on search results.
      parameters:
        - name: db
          in: query
          required: true
          schema:
            type: string
          description: The database to search (e.g., pubmed).
        - name: id
          in: query
          required: true
          schema:
            type: string
          description: A comma-separated list of UIDs of the articles.
        - name: retmode
          in: query
          required: false
          schema:
            type: string
          description: The return mode (e.g., xml, json).
        - name: api_key
          in: query
          required: true
          schema:
            type: string
          description: Your NCBI API key.
    responses:
      '200':
        description: Summary details of the search results
        content:
          application/json:
            schema:
              type: object
              properties:
                uid:
                  type: string
                title:
                  type: string
                source:
                  type: string
                pubdate:
                  type: string
                authors:
                  type: array
                  items:
                    type: string
                volume:
                  type: string
                issue:
                  type: string
                pages:
                  type: string
                doi:
                  type: string
  /efetch.fcgi:
    get:
      operationId: fetchDetails
      summary: Fetches the details including abstracts for specified UIDs.
      parameters:
        - name: db
          in: query
          required: true
          schema:
            type: string
          description: The database to search (e.g., pubmed).
        - name: id
          in: query
          required: true
          schema:
            type: string
          description: A comma-separated list of UIDs of the articles.
        - name: rettype
          in: query
          required: false
          schema:
            type: string
          description: The return type (e.g., abstract).
        - name: retmode
          in: query
          required: false
          schema:
            type: string
          description: The return mode (e.g., xml, text).
        - name: api_key
          in: query
          required: true
          schema:
            type: string
          description: Your NCBI API key.
    responses:
      '200':
        description: Detailed information including abstracts
        content:
          text/plain:
            schema:
              type: string
  /elink.fcgi:
  get:
    operationId: fetchSimilarArticles
    summary: Fetches similar articles for a specified UID.
    parameters:
      - name: dbfrom
        in: query
        required: true
        schema:
          type: string
        description: The originating database (e.g., pubmed).
      - name: db
        in: query
        required: true
        schema:
          type: string
        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
        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:
          text/plain:
            schema:
              type: string

  /elink.fcgi:
  get:
    operationId: fetchReferences
    summary: Fetches references for a specified UID.
    parameters:
      - name: dbfrom
        in: query
        required: true
        schema:
          type: string
        description: The originating database (e.g., pubmed).
      - name: linkname
        in: query
        required: true
        schema:
          type: string
        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:
          text/plain:
            schema:
              type: string

  /elink.fcgi:
  get:
    operationId: fetchCitedBy
    summary: Fetches cited references for a specified UID.
    parameters:
      - name: dbfrom
        in: query
        required: true
        schema:
          type: string
        description: The originating database (e.g., pubmed).
      - name: linkname
        in: query
        required: true
        schema:
          type: string
        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:
          text/plain:
            schema:
              type: string
- In the copied and pasted schema, there are three places where "Your NCBI API Key." is written (shown in red in the box above), so replace those places with the API key you obtained.
- Click "Create" in the upper right corner. Set the disclosure range to "only me".

3. What you can do with GPT “PubMed Researcher

This GPT allows you to do the following by the above instructions.

(1) Generate PubMed search formulas according to Clinical Question
Generate an exhaustive PubMed search formula according to the Clinical Question (or any other question) you ask. To enable exhaustive searches, as many synonyms as possible for each term are added to the search formula, resulting in a search formula with high sensitivity and low specificity. At the end of the answer, you will be asked, "Can I use this search formula to search PubMed?" If you need to modify the formula, you can tell the modifications there.
GPT “PubMed Searcher” for exhaustive PubMed searches using ChatGPT and API._e0255123_16070099.png
(2) Search using ESearch
When a PubMed search is ordered, GPT first uses an API key to obtain the PMIDs of articles that have been hit as search results in ESearch. This obtains the number of hits and PMIDs of the articles. In this case, the response is "X papers hit". Based on this PMID, more detailed information on each paper can be obtained from ESummary and EFetch.

(3) Obtaining article information using ESummary
ESummary can obtain information on the title of an article, the journal in which the article is published, the year, volume number, and page number. Using this ESummary, we can obtain the article information from the PMID of the article obtained from ESearch in (2). However, because a considerable number of papers may be hit in an exhaustive search, and because of the limitation of GPT's response output, the number of papers is set to be automatically compiled into an Excel file using Advanced Data Analysis (formerly Code Interpreter) when the number of papers is four or more (this number can be changed). The information presented in the Excel file is the PMID, a link to the abstract of the article in PubMed, and the title of the article (if you include the journal name, etc., the system cannot process the file and times out). Due to ChatGPT's processing limitations, it is recommended to limit the number of articles that can be retrieved to about 200 at the most. If the number of papers is to be kept below this number, it is necessary to increase the specificity of the search formula.
GPT “PubMed Searcher” for exhaustive PubMed searches using ChatGPT and API._e0255123_16542303.png
As an application, you can instruct GPT to extract from this Excel file only the papers with titles that suit your purpose and re-file them (however, ChatGPT is not good at the task of “selection” and its extraction accuracy is high in sensitivity and low in specificity).

(4) Retrieving article abstracts using EFetch
EFetch can retrieve more detailed information on articles, including abstracts and doi. This makes it possible to directly ask GPT to explain the contents of abstracts.
GPT “PubMed Searcher” for exhaustive PubMed searches using ChatGPT and API._e0255123_16531339.png
(5) Obtaining similar articles, referenced articles, and cited reference articles
ELink can also be used to obtain information on similar articles, referenced articles, and cited reference articles for a particular paper. Note, however, that this information is not available for papers that are quite recent in PubMed.

# by DrMagicianEARL | 2024-05-20 16:12
■論文検索が可能なAIには,Consensus,Elicit,Perplexityなどがあり便利ではあるが,当然ながら完璧ではなく(漏れがでる),手動でのPubMed検索が一番網羅的で精度が高いことは変わらない.そこでPubMedというデータベースとその検索機能をChatGPTがダイレクトに操作してくれれば手動の精度を維持したまま網羅的検索を簡便に行える上に,その検索結果のファイル化,論文抽出,解説までChatGPTのユーザーインターフェース上で行うことができる

■ChatGPTにはBingを用いたウェブアクセス機能が備わっているが,ChatGPTで論文検索を行う上では特定の論文検索エンジンを使用することをプロンプトで指示した方がよい.しかしながら,ChatGPTはPubMedのサイトをうまく読み込めず,以下のようなトラブルが発生しやすい.
・PubMed検索結果を読み込めずハルシネーションを起こす(偽の結果を表示する)
・論文Abstractのページをうまく読み込めない
・論文検索結果で表示された1ページ分しか読み込めない
■このようなことが起こるのは以下のことが原因である.

(1)動的コンテンツ
■PubMedのウェブサイトは動的にコンテンツを生成することが多く,JavaScriptを使用して情報を表示する.これにより,ウェブスクレイピングツールが正確に情報を取得するのが難しくなる.

(2)ページ構造の複雑さ
■PubMedのウェブページの構造が複雑であり,多くのリンクやデータベースクエリが絡み合っている.このため,特定の情報を正確に抽出するのが難しい場合がある.

(3)制限や防御策
■PubMedは自動化されたツールによる過度なアクセスを防ぐための制限や防御策を持っているため,情報取得が制限されることがある.

■そこで,PubMedのサイトにアクセスするのではなく,API経由で情報を取得するようにすればこのようなトラブルを回避することができる.以下では,API経由でPubMed検索結果を取得するGPT「PubMed Searcher」を筆者が作ったので紹介する

1.GPT「PubMed Searcher」の仕組み

■ChatGPTの有料ユーザー(Plus会員:月$20のサブスクリプション)は,自分専用のbotであるGPTを作成することができる.このGPTでPubMed Searcherを作成する(個別にAPIキーが必要となるため,他者には公開せず自分のみの使用となる).また,PubMedはAPIを無料公開している(厳密にはNCBIが提供するEntrezのAPIのデータベースを選択するパラメータとしてPubMedを指定できる).APIはApplication Programming Interfaceの略で,ソフトウェア同士が通信するためのインターフェースであり,いわゆる「情報をやりとりするための鍵」である.このAPIを用いてPubMedのデータベースにChatGPTが直接アクセスして論文情報を引っ張ってくることができる.

■PubMedのAPIはNCBIにアカウントを作成した上で,自分だけのAPIキーを入手する必要がある.つまり,このGPTを作成しても他人が使用することは避けなければならず,自分だけが使用するものである.このため,作成したPubMed SearcherがGPT storeに置かれているわけではなく,各自で作成しなければならない.といっても,筆者が作成した以下の手順通りやれば作成できるので,さほど難しくはなく,スマホからも作成可能である.

2.GPT「PubMed Searcher」を作成する手順

(1)ncbiのアカウントを作成する
■まず,以下のURLにアクセスし,ncbiのアカウントを作成する.
https://www.ncbi.nlm.nih.gov/account/
(2)APIキーを取得する
■アカウントを取得したら,以下のアカウント設定ページにアクセスし,一番下にあるAPI Key ManagementにあるAPIキーを取得する.このAPIキーは自分だけのものなので他人に公開しないこと.
https://www.ncbi.nlm.nih.gov/account/settings/
(3)GPTを作成する
■ウェブ版のChatGPTにアクセスし,左側のバーから「GPTを探す(GPT explore)」をクリックし,右上の「+作成する」をクリックするとGPT builderが立ち上がる.一番上のバーで真ん中の「構成」を選択し,以下のように設定する.

アイコン画像:好きな画像を設定できる.DALL-E3に頼んで画像生成してもらうことも可能
名前:好きな名前に設定する(例:PubMed Researcher)
説明:GPTを開いた時に表示される短い説明文.好きな説明文を入れる(例:PubMedでの網羅的検索を目的としたGPTです)
指示:以下をコピペする(構造化された情報を提供する必要がある部分について,精度を高めるためにYAMLを使用した指示となっている).
このGPTはPubMedから文献情報を検索することでユーザーを支援します。ユーザーが提供する特定のクエリを使ってPubMedを検索し、関連する論文情報を返すことができなければなりません。GPTはPubMedデータへのアクセスにNCBIのアカウント詳細とAPIキーを活用してください。

Clinical Questionへの対応:
```yaml
clinical_question:
  steps:
    - Extract as many all relevant terms (synonym or quasi-synonym) as possible from the Clinical Question provided by the user.
    - Create a PubMed search query using these terms, enclosed in double quotes.
    - Ensure the search query is highly sensitive but not highly specific.
    - Ask the user for confirmation before performing the search.

search_results:
  steps:
    - Indicate the number of results found.
    - If ESearch results exceed 3, do not display article details in the response.
    - Use ESummary to compile all results into an Excel file.
    - Include all articles in the Excel file without setting a limit on the number of articles.

excel_file:
  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 abstract information is needed.
・会話の開始者:特に設定は不要
・知識:特に設定は不要
・機能:「ウェブ参照」と「コードインタープリター」にチェックを入れる
・アクション:「新しいアクションを作成する」をクリックし,「スキーマ」に以下をコピペする
openapi: 3.0.0
info:
  title: PubMed API
  description: API to search and retrieve literature from PubMed using esearch, esummary, and efetch endpoints.
  version: 1.0.0
servers:
  - url: https://eutils.ncbi.nlm.nih.gov/entrez/eutils
    description: NCBI E-utilities server
paths:
  /esearch.fcgi:
    get:
      operationId: searchLiterature
      summary: Searches for literature in PubMed.
      parameters:
        - name: db
          in: query
          required: true
          schema:
            type: string
          description: The database to search (e.g., pubmed).
        - name: term
          in: query
          required: true
          schema:
            type: string
          description: The search term(s).
        - name: retmax
          in: query
          required: false
          schema:
            type: integer
          description: The maximum number of results to return.
        - name: retmode
          in: query
          required: false
          schema:
            type: string
          description: The return mode (e.g., xml, json).
        - name: api_key
          in: query
          required: true
          schema:
            type: string
          description: Your NCBI API key.
    responses:
      '200':
        description: Search results
        content:
          application/json:
            schema:
              type: object
              properties:
                count:
                  type: integer
                retmax:
                  type: integer
                retstart:
                  type: integer
                ids:
                  type: array
                  items:
                    type: string
  /esummary.fcgi:
    get:
      operationId: getSummary
      summary: Retrieves the summary of literature based on search results.
      parameters:
        - name: db
          in: query
          required: true
          schema:
            type: string
          description: The database to search (e.g., pubmed).
        - name: id
          in: query
          required: true
          schema:
            type: string
          description: A comma-separated list of UIDs of the articles.
        - name: retmode
          in: query
          required: false
          schema:
            type: string
          description: The return mode (e.g., xml, json).
        - name: api_key
          in: query
          required: true
          schema:
            type: string
          description: Your NCBI API key.
    responses:
      '200':
        description: Summary details of the search results
        content:
          application/json:
            schema:
              type: object
              properties:
                uid:
                  type: string
                title:
                  type: string
                source:
                  type: string
                pubdate:
                  type: string
                authors:
                  type: array
                  items:
                    type: string
                volume:
                  type: string
                issue:
                  type: string
                pages:
                  type: string
                doi:
                  type: string
  /efetch.fcgi:
    get:
      operationId: fetchDetails
      summary: Fetches the details including abstracts for specified UIDs.
      parameters:
        - name: db
          in: query
          required: true
          schema:
            type: string
          description: The database to search (e.g., pubmed).
        - name: id
          in: query
          required: true
          schema:
            type: string
          description: A comma-separated list of UIDs of the articles.
        - name: rettype
          in: query
          required: false
          schema:
            type: string
          description: The return type (e.g., abstract).
        - name: retmode
          in: query
          required: false
          schema:
            type: string
          description: The return mode (e.g., xml, text).
        - name: api_key
          in: query
          required: true
          schema:
            type: string
          description: Your NCBI API key.
    responses:
      '200':
        description: Detailed information including abstracts
        content:
          text/plain:
            schema:
              type: string
・コピペしたスキーマには「Your NCBI API Key.」と書かれている部分(上のボックス内で赤字で示している部分)が3か所あるので,その部分を取得したAPIキーに置き換える
追加設定:設定は不要
・右上の「更新する」を押す.公開範囲は「自分のみ」とする.

3.GPT「PubMed Researcher」でできること

■このGPTでは上記のベースの指示により以下のことが可能である.

(1)Clinical Questionに応じたPubMed検索式の生成
Clinical Question(その他の質問でもよいが)を質問すると,その質問に応じて網羅的なPubMed検索式を生成する.網羅的検索ができるように設定しているため,各用語についてできるだけ多くの同義語を検索式に加えるようにしており,感度が高く,特異度が低い検索式となっている.回答の最後に「この検索式でPubMed検索していいか?」と聞かれるので,修正が必要であればそこで修正内容を伝える.
【AI】ChatGPTとAPIを使って網羅的なPubMed検索できるGPT「PubMed Searcher」_e0255123_12375758.png
(2)ESearchを用いた検索
■PubMed検索を指示すると,GPTはまずAPIキーを使ってESearchで検索結果としてヒットした論文のPMIDを取得する.これにより論文のヒット数とPMIDが入手される.この際,「〇件の論文がヒットした」と回答される.このPMIDをもとに,各論文のより詳しい内容をESummaryやEFetchで取得することができる.
【AI】ChatGPTとAPIを使って網羅的なPubMed検索できるGPT「PubMed Searcher」_e0255123_12382730.png
(3)ESummaryを用いた論文情報取得
■ESummaryは論文タイトル,論文が掲載されているジャーナル・年・巻号・頁の情報を取得できる.このESummaryを使って,(2)でESearchから得た論文のPMIDから論文情報を取得する.ただし,網羅的検索ではかなりの論文数がヒットされる可能性があるため,GPTの回答出力の限界もあることから,論文数が4件以上の場合はAdvanced Data Analysis(旧Code Interpreter)を使って自動的にExcelファイルにまとめるよう設定されている(この件数を変更したい場合は,GPT編集で指示を変更する).Excelファイルに提示される情報は,PMID,PubMedでのその論文Abstractへのリンク,論文タイトルの3つである(ジャーナル名等まで入れると処理しきれずタイムアウトしてしまう).また,ChatGPTの処理の限界から,取得できる論文情報は多くとも200件程度までと考えた方がよい.これ以下に論文数をおさえるなら検索式の特異度を高める必要がある.
【AI】ChatGPTとAPIを使って網羅的なPubMed検索できるGPT「PubMed Searcher」_e0255123_12385102.png
■応用として,GPTに指示して,このExcelファイルから自分の目的にあった論文タイトルの論文だけを抽出して再度ファイル化してもらうことも可能である(ただし,ChatGPTは「選択」というタスクが苦手であり,その抽出精度は感度が高く特異度が低めである).

(4)EFetchを用いた論文Abstractの取得
■EFetchは論文Abstractやdoiも含めたより詳細な論文の情報を取得することができる.これにより,ダイレクトにAbstractの内容をGPTに解説してもらったりすることも可能である.
【AI】ChatGPTとAPIを使って網羅的なPubMed検索できるGPT「PubMed Searcher」_e0255123_12430125.png

# by DrMagicianEARL | 2024-05-18 12:44 | 医学・医療とAI
【AI】GoogleのAIであるGemini Advancedに高性能のGemini-1.5Proが搭載_e0255123_17073861.png
■2024年2月8日にリリースされた,Google最強のAIであるGeminiがBardと入れ替わる形で利用可能となったが,機能が不完全で,他のGoogleアプリとの連携も未完成であったこと,その後3月4日にClaude-3がリリースされたことから,Geminiを使用する人は大幅に減ったと思われる.だが,今回,Googleは大規模なアップデートを5月15日にGoogle I/O 2024で発表した.OpenAIが意図的に狙ったのかは不明だが,GPT-4oのリリースを同じ日にかぶせてきたため,Googleの発表は霞んでしまったものの,アップデート内容は必見である.何より,Googleは多数のアプリケーションを有しており,Geminiでこれらとの連携が可能になるのは大きい.

1.4月9日に開放されたGemini-1.5Pro

■Geminiには,ハイスペックで,最大で1時間の動画や70万語のテキストを扱える次世代モデル「Gemini-1.5Pro」が存在したが,一部のユーザーしか使用できない限定テストの状態であった.4月9日になってAPI経由であれば誰でも使用できるようになった(逆にWeb版やアプリではまだ利用できなかった).音声を理解する機能(音声翻訳機能はOpenAIによるテストでGPT-4oと同等レベル)やファイルを処理しやすくするAPIが搭載され,さらに開発者がモデルの出力をより詳細に制御できるようにするシステム命令やJSONモードなども搭載された.そして5月15日のアップデートではこのGemini-1.5ProがWeb版およびアプリのGemini Advancedで利用できるようになった.

■Gemini-1.5Proは,GPT-4が用いているTransformerだけでなく,Mixture-of-Expertも取り入れており,入力に応じて最も関連性の高いエキスパートのニューラルネットワークのみを選択的に活性化させることでモデルの効率性が大幅に向上した.

2.5月15日のGemini Advancedのアップデート内容

(1)Gemini-1.5ProをGemini Advancedに導入
■Gemini-1.5ProがGemini Advancedに導入されたことで,ようやくWeb版やアプリでも使用が可能になった(これによりGemini-1.0Ultraは廃止).Gemini Advancedは有料プランであり,Googleが提供するストレージ(容量)を増やす有料サービスGoogle One(https://one.google.com/about?hl=ja)にアクセスして,AI Premiumプランに登録することで利用可能となる.
【AI】GoogleのAIであるGemini Advancedに高性能のGemini-1.5Proが搭載_e0255123_17164292.png
■料金は月額$20(2900円)であり,GPT-4が利用できるChatGPT Plus会員とほぼ同額であるが,Gemini Advanced利用を含めたGoogle Oneのサービス(クラウドサービスGoogle drive,メールサービスGmail,画像保存サービスGoogle Photoなど)を保存容量を2TBまで大幅に増やして利用できるようになる他,利用者専用の特典を受けられるため,ChatGPT Plusよりお得といえる.また,最初の2ヵ月間は試用期間として無料で利用できる.

(2)日本語対応が可能となった
■Gemini Advancedでは,最もハイスペックなGemini-1.0Ultraが使用できたが,必ずしもUltraで回答されるわけではなく,無料のGemini Proとの違いが分からない,GPT-4より見劣りする,といった声が聞かれていた.これはGemini-1.0Ultraが日本語対応していないかったため,Googleアカウントの言語設定を英語に設定した上で英語で質問する必要があったからである.このため,日本人には使いづらいものであったが,今回のアップデートではGemini-1.0UltraからGemini-1.5Proに変更されて日本語対応も可能となったことから,以前よりも日本語でのチャット性能が向上している.

(3)コンテキストウィンドウ強化
■機械学習の向上によりコンテキストウィンドウで最大100万トークンもの膨大な情報を処理可能になっている.GPT-4oが12万8000トークンであることを考えるとGemini-1.5Proは圧倒的な処理量で,これはハリーポッターの全書籍の8割の量に相当する.これによりこれまでよりも複雑な問題を解決できるようになり,情報の探索と分析の時間が節約され,生産性の向上が期待される.また,約100通の電子メールを要約することが可能である.

■なお,Google AI StudioかVertex AIのwaiting listに登録する必要があるが,コンテキストウィンドウをさらに倍の200万トークンに増やすことも可能である.

(4)Googleが提供している他のサービスとの連携
プロンプトに「@」マークを入力すると,連携できる機能が選択できるBoxが現れ,Googleの他のサービス機能を呼び出せる.連携できるのはGmail,Googleドキュメント,Googleドライブ,Googleフライト,Googleホテル,Googleマップ,YouTubeである.
【AI】GoogleのAIであるGemini Advancedに高性能のGemini-1.5Proが搭載_e0255123_17133471.png
(5)ファイルアップロードが可能に
■前述の連携機能でのGoogleドライブまたはデバイスから複数のGoogleドキュメント,PDFファイル,Wordファイルをシームレスにアップロードすることが可能となった.

(6)画像認識
■以前からGeminiでは画像認識が可能であったが,Gemini-1.5ProではGPT-4oと遜色ないレベルの画像認識機能にまで向上している

(7)動画解析
■動画解析機能は全AIの中で最も優れており,GPT-4oでは困難な長い動画の解析も可能である.

(6)数カ月以内にGemini Live搭載へ
■今回のアップデートでは未搭載であるが,Gemini Advancedユーザー向けの音声会話機能「Gemini Live」が数ヵ月以内に公開されるとのことである.また,2024年後半にはGemini Live使用時にカメラを利用できるようにする予定とのことである.

3.アプリについて

■Geminiは5月からGoogleアプリで使用することができるようになった.Googleアプリを開いて,一番上の検索の横にある星マークをタップするとGeminiに切り替わる.
iOS版(App Store)
https://apps.apple.com/jp/app/google-アプリ/id284815942
アンドロイド版(Google Play)
https://play.google.com/store/apps/details?id=com.google.android.googlequicksearchbox&hl=ja&gl=US

# by DrMagicianEARL | 2024-05-16 17:39 | 医学・医療とAI

by DrMagicianEARL