気の向くままに辿るIT/ICT
ソフトウェア

GPT-3のExamples/TL;DR summarizationを試してみた

ホーム前へ次へ
フリーソフト・オープンソースを活用しよう。

GPT-3のExamples/TL;DR summarizationを試してみた

GPT-3のExamples/TL;DR summarizationを試してみた

2021/12/03

 OpenAIの自然言語処理モデルGPT-3のExamples/TL;DR summarizationを試してみました。

TL;DR summarization

debian:~$ python openai_examples_tldr_summary.py
('ベイズの法則、最近ではベイズ・プライスの定理とは、ある事象に関連する可能性のある条件についての事前の知識に基づいて、その事象の確率を記述するものである。 例えば、健康問題の発生リスクが年齢とともに増加することが知られている場合、ベイズの定理により、ある年齢の個人のリスクを、単にその個人が集団全体の典型的な例であると仮定するよりも、(年齢を条件として)より正確に評価することができる。',)
 
 ベイズの法則は、確率論において、確率概念を統一的に扱うために、確率
debian:~$ python openai_examples_tldr_summary.py
('ベイズの法則、最近ではベイズ・プライスの定理とは、ある事象に関連する可能性のある条件についての事前の知識に基づいて、その事象の確率を記述するものである。 例えば、健康問題の発生リスクが年齢とともに増加することが知られている場合、ベイズの定理により、ある年齢の個人のリスクを、単にその個人が集団全体の典型的な例であると仮定するよりも、(年齢を条件として)より正確に評価することができる。',)
 
{
 "id": "cmpl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
 "object": "text_completion",
 "created": xxxxxxxx,
 "model": "davinci:2020-05-03",
 "choices": [
  {
   "text": "\n\nベイズの定理は、確率論における最も基本的な概念である。ベイズの定理は、確率",
   "index": 0,
   "logprobs": null,
   "finish_reason": "length"
  }
 ]
}
debian:~$

 テキストの文章の最後に「tl;dr:」を付けるとテキストを要約するTL;DR summarization

 おお、すごい、それっぽい。

debian:~$ cat openai_examples_tldr_summary.py
import openai
import os
import json
 
openai.api_key = os.getenv("OPENAI_API_KEY")
#prompt="A neutron star is the collapsed core of a massive supergiant star, which had a total mass of between 10 and 25 solar masses, possibly more if the star was especially metal-rich.[1] Neutron stars are the smallest and densest stellar objects, excluding black holes and hypothetical white holes, quark stars, and strange stars.[2] Neutron stars have a radius on the order of 10 kilometres (6.2 mi) and a mass of about 1.4 solar masses.[3] They result from the supernova explosion of a massive star, combined with gravitational collapse, that compresses the core past white dwarf star density to that of atomic nuclei.\n\ntl;dr:",
prompt="ベイズの法則、最近ではベイズ・プライスの定理とは、ある事象に関連する可能性のある条件についての事前の知識に基づいて、その事象の確率を記述するものである。 例えば、健康問題の発生リスクが年齢とともに増加することが知られている場合、ベイズの定理により、ある年齢の個人のリスクを、単にその個人が集団全体の典型的な例であると仮定するよりも、(年齢を条件として)より正確に評価することができる。"
 
response = openai.Completion.create(
 engine="davinci",
 prompt=prompt,
 temperature=0.3,
 max_tokens=120,
 top_p=1.0,
 frequency_penalty=0.0,
 presence_penalty=0.0
)
#print(prompt)
print(str(prompt))
print(" ")
print(response['choices'][0]['text'])
#print(str(response['choices'][0]['text']))
#print(json.dumps(response, ensure_ascii=False, indent=2))
debian:~$

 ソースはこんな感じ、環境変数OPENAI_API_KEYに自分のAPIキーが入っている前提です。

 そのままでは想定通り機能しないので一部オリジナルソースから変更しています。

 print()、もしくは、json出力しないと実行しても何も表示されないので何れかを追加する必要があり、後者用にimport jsonを追加。

 が、応答内容によっては、何れか一方では表示できないことがあり、他方を使用せざるを得ないこともあります。

 表示できないのが、print文なら、response配列を文字列にキャストすれば、たいていは凌げますが。

 応答文だけだとチャット状態にならず、問いかけ文も表示したいところ。

 が、サンプル通りだとprintやjson形式で出力しようにも問いかけ用の変数promptがスコープの範囲になく、スコープに入るようPythonの場合だとインデント階層を相応に上げたところで変数が登場(変数宣言)するようにする必要があります。

 また、promptの中身によっては、文字列にキャストしないとエラーとなるケースもありました。

ホーム前へ次へ