Python

PubmedをChatgptとPythonで自動翻訳

Chatgptってとても便利ですよね。
医学論文も、その内容をざっと要約して読みたい時、Chatgptの翻訳機能は大変強力なツールとなります。

ここでは、
「Pubmedからほしい論文の抄録を入手し、
その内容をChatgptのAPI機能をつかって自動で翻訳する。」

というプログラムを作成します。

APIってなんですか?
Pythonを始め、他のプログラムから、同じサービスを使えるようにする機能だよ。

例えば、Chatgptで翻訳するには、
ホームページを訪れてログインし、
入力欄に命令を入れると、入力した文章を翻訳してくれます。

これはみんながよく使っている機能です。

しかし、論文の数が100個など、膨大になった時は、
いちいち質問をコピーペーストし、
返答をコピーペーストして整理するのは大変です。

そんな時、pythonでプログラムを組み、その中に

「Chatgptに入力して、翻訳した結果を返す」

という関数を書いておけば、繰り返し処理を行うことで、一気に返答の結果を得ることができます。

このように、
外部からの操作で同じサービスを使えるようにする機能
がAPIです。

1.OpenAIからChatgptのAPIキーを取得する

APIを利用するには、「APIキー」が必要です。
Chatgptを提供しているOpenAIのホームページを訪れ、入手することができます。

このAPIキーは、他人に知られないように管理することが重要です

このAPIキーは、

  • 正当な使用者である事の認証
  • 同一アクセスの利用制限の設定

のために使用されます。

まずはChatgptを使用するアカウントを作成します。
2023年5月現在では、アカウント作成は無料でできます。

ChatGPTのページでなく、OpenAIのプラットフォームのページに行きます。

https://platform.openai.com/overview

ログインボタンからChatGPTのアカウントでログインします。

はじめの画面で、ユーザー名をクリックし、ドロップダウンメニューから
「View API Keys」を開きます。

この
「Create New Secret Key」を押すと
API Keyが作成されます。

このAPI Keyはとても大事なので、保存しておきましょう。

2. PIPでopenaiをインストール

ターミナル、またはコマンドプロンプトでpipを使用し
Pythonからchatgptの機能を使用できる

「openai」

というツールをインストールしておきます。

pip install openai

でインストールできます。

3.Pubmedからアブストラクト(抄録)を取得する

Pubmedから論文情報を取得します。 詳しくはこちらの記事に説明しています。

PubmedからPythonを使ってデータ取得 Pubmed https://pubmed.ncbi.nlm.nih.gov は世界的に最も...
from Bio import Entrez

Entrez.email = "使う人のEmailアドレス"

def fetch_abstract(pmid):
    handle = Entrez.efetch(db='pubmed', id=pmid, retmode='xml')
    article = Entrez.read(handle)['PubmedArticle'][0]
    abstract = article['MedlineCitation']['Article']['Abstract']['AbstractText'][0]
    return abstract

自分のemailアドレスを、Entrez.emailに代入します。

ここでは例として、ノーベル賞を受賞した整形外科医、山中先生の
iPS細胞の論文 PMID 16904174
を参照していきます。

abstract = fetch_abstract(16904174)
print(abstract)

Differentiated cells can be reprogrammed to an embryonic-like state by transfer of nuclear contents into oocytes or by fusion with embryonic stem (ES) cells. ・・・

論文ID(PMID)からアブストラクト(抄録)が取得できました。

4. PythonでChatGPTを使用するスクリプトを書く

スクリプトは以下のようになります。

from openai import OpenAI, ChatCompletion

openai.api_key = '入手したOpenAIのAPI key'

def translate_text(abstract):
    prompt = f"Translate the following English text to Japanese:\n\n{abstract}"
    response = openai.ChatCompletion.create(model="gpt-3.5-turbo", messages=[{"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt}])
    return response['choices'][0]['message']['content']

openai.api_keyには、先程取得したOpenAIのAPIキーを入れます。

Chatgptの質問欄にいれている文章が、変数promptに入るようにしています。

ここでは、

“Translate the following English text to Japanese:\n\n{abstract}”
「次の文章を日本語にしてください」

というものですね

openai.ChatCompletion.create()
とは、対話を行わせる関数です。

openai.ChatCompletion.create()

model:ChatGPTのモデル、ここではgpt-3.5-turboを指定
messeges: “role”で役割、”content”でmessageの内容を指定
“role” は、メッセージの役割を指定するためのキーです。各メッセージには “role” というキーを持つ辞書があり、その値として “system” や “user”などを示す任意の値を指定します。
ここでは、systemという役割で、You are a helpful assistant.userという役割で、質問する文章、ここではpromptの内容をメッセージに入れます。

こうして出たresponseを開いてみます。

print(response)  

{
“choices”: [
{
“finish_reason”: “stop”,
“index”: 0,
“message”: {
“content”: “\u7570\u5206\u5316\u3057\u305f\u7d30\・・・,
“role”: “assistant”
}
}
],
“created”: 1684123060,
“id”: “chatcmpl-7GJd6ZTyUc8jqhtMEbnHXXXXXXX”,
“model”: “gpt-3.5-turbo-0301”,
“object”: “chat.completion”,
“usage”: {
“completion_tokens”: 483,
“prompt_tokens”: 234,
“total_tokens”: 717
}
}

responseの内容

choices:対話応答の結果
id: リクエストの番号
model: 使用されたGPTモデル
usage: 使用されたトークン
object: レスポンスの種類
created: 作成日時のタイムスタンプ

肝心の応答の内容はchoicesの下に入っており、

print(response['choices'][0]['message']['content'])

異分化した細胞は、核内容物を卵母細胞に転送すること、または胚性幹細胞(ES細胞)との融合によって胚性状態に再プログラムできます。この再プログラムを誘導する要因についてはあまり知られていません。ここでは、マウスの胚性または成体線維芽細胞に、ES細胞培養条件下でOct3/4、Sox2、c-Myc、およびKlf4の4つの因子を導入することによって、多能性幹細胞を誘導することを示します。驚くべきことに、Nanogは不要であることが分かりました。これらの細胞は、iPS(誘導多能性幹細胞)細胞と呼ばれ、ES細胞の形態と増殖特性を示し、ES細胞マーカー遺伝子を発現します。iPS細胞を裸マウスに皮下移植すると、すべての3つの胚層から様々な組織を含む腫瘍が形成されました。iPS細胞をブラストシストに注入すると、マウスの胚発生に貢献しました。これらのデータは、わずか数の定義済み因子の追加により、線維芽細胞培養から直接多能性幹細胞を生成できることを示しています。

と、無事にChatGPTによって翻訳された内容を取得することができました。

これって、自分でChatGPTに入力するのと何が違うんですか?
プログラムに取り込めると、翻訳語の文章を自分の出してほしい形にできるんだよ。

このスクリプトや関数を、Pythonのプログラミングに組み込むことで、

論文IDのリストから、一気に翻訳リストをつくることができます。
また、必要に応じて、そのタイトル、原文、publicationスタイルや投稿日時などを一覧にすることも可能なのです。

3.使用量に注意

とりあえずこれで論文100個くらい翻訳してみます。
ちょっと待って!ChatGPTのAPIは無限に使えるわけじゃないよ。

ChatGPTはホームページからは無料で使う事もできますが、

APIの使用は有料です。
無料使用量をすぎると、お金が必要になります。

ちなみに先程の論文のトークンは

response[‘usage’]
に返ってきており、

print(response['usage'])

{
“completion_tokens”: 483,
“prompt_tokens”: 234,
“total_tokens”: 717
}

で表示されます。
ここでは
英単語 145ワード
“total_tokens”: 717

です。
ChatGPTのAPIの値段は
1000トークンあたり、0.002ドル(約0.27円)です。

これは他の文章生成AIと比べて激安ですが、
過去のやり取りを含めるとその分トークンを消費するので注意が必要です。

ChatGPTに登録してはじめの3か月は18ドル分の無料クレジットが使えます。
いろいろ使用してみて、トークンの消費量を体験するのがよいでしょう。

Pubmedから論文内容を取得する方法は、こちらの記事で詳細をまとめています。

PubmedからPythonを使ってデータ取得 Pubmed https://pubmed.ncbi.nlm.nih.gov は世界的に最も...