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

GPT-3のExamples/Third-person converterを試してみた

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

GPT-3のExamples/Third-person converterを試してみた

GPT-3のExamples/Third-person converterを試してみた

2021/12/03

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

Third-person converter

debian:~$ python openai_examples_third_person.py
('1人称を3人称にしてみる。\n\n入力: 俺腹減ったー。\n出力: 彼はお腹が空いている。\n\n入力: 私お花見るの好き。\n出力: 彼女は花を見るのが好きなんだ。\n\n入力: 僕の腹は出ているから、良い枕になる。\n出力: 彼のお腹はぽっこりしているので枕に最適だ。\n\n入力: 私、絵が下手なの。\n出力: 彼女には絵のセンスがない。\n\n入力: 僕は楽しい。\n出力:',)
 
 彼は楽しい。
debian:~$ python openai_examples_third_person.py
('1人称を3人称にしてみる。\n\n入力: 俺腹減ったー。\n出力: 彼はお腹が空いている。\n\n入力: 私お花見るの好き。\n出力: 彼女は花を見るのが好きなんだ。\n\n入力: 僕の腹は出ているから、良い枕になる。\n出力: 彼のお腹はぽっこりしているので枕に最適だ。\n\n入力: 私、絵が下手なの。\n出力: 彼女には絵のセンスがない。\n\n入力: 僕は楽しい。\n出力:',)
 
{
 "id": "cmpl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
 "object": "text_completion",
 "created": xxxxxxxx,
 "model": "davinci:2020-05-03",
 "choices": [
  {
   "text": " 彼は楽しい。",
   "index": 0,
   "logprobs": null,
   "finish_reason": "stop"
  }
 ]
}
debian:~$

 いくつかの入出力となる文章を例示しつつ、他の入力となる文を渡すと一人称視点を三人称視点に変換するThird-person converter

 また、日本語と英語の混在は、解釈されず、無応答か「??」となり、アルファベットの並びを、ひらがなやカタカナなど日本語表記にすると応答しました。

debian:~$ cat openai_examples_third_person.py
import openai
import os
import json
 
openai.api_key = os.getenv("OPENAI_API_KEY")
#prompt="First-person to third-person\n\nInput: I decided to make a movie about Ada Lovelace.\nOutput: He decided to make a movie about Ada Lovelace.\n\nInput: My biggest fear was that I wasn't able to write the story adequately.\nOutput: His biggest fear was that he wouldn't be able to write the story adequately.\n\nInput: I started researching my biology project last week.\nOutput:",
prompt="1人称を3人称にしてみる。\n\n入力: 俺腹減ったー。\n出力: 彼はお腹が空いている。\n\n入力: 私お花見るの好き。\n出力: 彼女は花を見るのが好きなんだ。\n\n入力: 僕の腹は出ているから、良い枕になる。\n出力: 彼のお腹はぽっこりしているので枕に最適だ。\n\n入力: 私、絵が下手なの。\n出力: 彼女には絵のセンスがない。\n\n入力: 僕は楽しい。\n出力:"
 
response = openai.Completion.create(
 engine="davinci",
 prompt=prompt,
 temperature=0.3,
 max_tokens=60,
 top_p=1,
 frequency_penalty=0.0,
 presence_penalty=0.0,
 stop=["\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の中身によっては、文字列にキャストしないとエラーとなるケースもありました。

ホーム前へ次へ