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

GPT-3のExamples/Parse unstructured dataを試してみた

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

GPT-3のExamples/Parse unstructured dataを試してみた

GPT-3のExamples/Parse unstructured dataを試してみた

2021/12/01

 OpenAIの自然言語処理モデルGPT-3のExamples/Parse unstructured dataを試してみました。

Parse unstructured data

debian:~$ python openai_examples_parse_data.py
('日本は都道府県の他、いくつかの地域として認識されることがあります。例えば、関東地方には群馬、栃木、茨城、埼玉、千葉、神奈川、東京があり、近畿地方には、滋賀、奈良、和歌山、三重、兵庫、京都、大阪があり、九州地方には、佐賀、沖縄、宮崎、熊本、長崎、福岡、大分、鹿児島があります。',)
 
 | 四国地方 | 高知 香川 徳島 愛媛 鳥取 島根 広島 岡山 山口 || 九州地方 | 佐賀 沖縄 宮崎 熊本 長崎 福岡 大分 鹿児島 |
| 東北地方 | 青森 秋田 岩手 山形 福島 宮城 |
| 関東地方 | 群馬 栃木 茨城 埼玉 千
debian:~$ python openai_examples_parse_data.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:~$

 ある程度の長文において一部を構造化して、そのあとのも構造化しと言わんばかりに投げると残りをそれに倣って構造化してくれるParse unstructured data

 おお、パターンを認識してちゃんと返してますね。

 ここでは、あえてスクリプト上のmax_tokensを200に設定してみたところ、例として提示した地方についても結果を返しています。

debian:~$ cat openai_examples_parse_data.py
import openai
import os
import json
 
openai.api_key = os.getenv("OPENAI_API_KEY")
#prompt="There are many fruits that were found on the recently discovered planet Goocrux. There are neoskizzles that grow there, which are purple and taste like candy. There are also loheckles, which are a grayish blue fruit and are very tart, a little bit like a lemon. Pounits are a bright green color and are more savory than sweet. There are also plenty of loopnovas which are a neon pink flavor and taste like cotton candy. Finally, there are fruits called glowls, which have a very sour and bitter taste which is acidic and caustic, and a pale orange tinge to them.\n\nPlease make a table summarizing the fruits from Goocrux\n| Fruit | Color | Flavor |\n| Neoskizzles | Purple | Sweet |\n| Loheckles | Grayish blue | Tart |\n",
prompt="日本は都道府県の他、いくつかの地域として認識されることがあります。例えば、関東地方には群馬、栃木、茨城、埼玉、千葉、神奈川、東京があり、近畿地方には、滋賀、奈良、和歌山、三重、兵庫、京都、大阪があり、九州地方には、佐賀、沖縄、宮崎、熊本、長崎、福岡、大分、鹿児島があります。"
 
response = openai.Completion.create(
 engine="davinci",
 prompt=prompt,
 temperature=0.0,
 max_tokens=200,
 top_p=1,
 frequency_penalty=0.0,
 presence_penalty=0.0,
 stop=["\n\n"]
)
#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の中身によっては、文字列にキャストしないとエラーとなるケースもありました。

ホーム前へ次へ