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

GPT-3のExamples/Factual answeringを試してみた

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

GPT-3のExamples/Factual answeringを試してみた

GPT-3のExamples/Factual answeringを試してみた

2021/11/23

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

Factual answering

debian:~$ python openai_examples_factual_answering.py
("質問: アルデュイーノって何?\n答え: アルデュイーノは、2005年に登場したマイクロコントローラ。\n###\n質問: マイクの友達あれ誰だっけ?\n答え: ?\n###\n質問: マイクロポンってなんだっけ?\n答え: ?\n###\n質問: マイケル・ジョーダンって誰?\n答え: NBAのスーパースターだよ。\n###\n質問: 日本の四季は?\n答え: 春夏秋冬\n###\nQ: サグラダファミリアは完成したのかな?\n答え: まだみたいだね。\n###\n質問: ホワイトハウスって白いの?\n答え: 緑だったらそんな名前つけなくね?\n###\n質問: アイスのイントネーションってどんな感じ?\n答え: ?\n###\n質問: PPAPって何?\n答え: ?\n###\nポケモンのキャラってどんくらいいるの?\n答え: ?\n###\n歴代オリンピック金メダリストって何人?\n答え: ?\n###\n質問: 東京スカイツリーの高さは?\n答え: 634メートル\n###\n質問: 富士山ってどこにあるの?\n答え:",)
 
 日本の北限
debian:~$ python openai_examples_factual_answering.py
("質問: アルデュイーノって何?\n答え: アルデュイーノは、2005年に登場したマイクロコントローラ。\n###\n質問: マイクの友達あれ誰だっけ?\n答え: ?\n###\n質問: マイクロポンってなんだっけ?\n答え: ?\n###\n質問: マイケル・ジョーダンって誰?\n答え: NBAのスーパースターだよ。\n###\n質問: 日本の四季は?\n答え: 春夏秋冬\n###\nQ: サグラダファミリアは完成したのかな?\n答え: まだみたいだね。\n###\n質問: ホワイトハウスって白いの?\n答え: 緑だったらそんな名前つけなくね?\n###\n質問: アイスのイントネーションってどんな感じ?\n答え: ?\n###\n質問: PPAPって何?\n答え: ?\n###\nポケモンのキャラってどんくらいいるの?\n答え: ?\n###\n歴代オリンピック金メダリストって何人?\n答え: ?\n###\n質問: 東京スカイツリーの高さは?\n答え: 634メートル\n###\n質問: 富士山ってどこにあるの?\n答え:",)
 
{
 "id": "cmpl-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
 "object": "text_completion",
 "created": xxxxxxxx,
 "model": "davinci:2020-05-03",
 "choices": [
  {
   "text": " 日本の北限\n",
   "index": 0,
   "logprobs": null,
   "finish_reason": "stop"
  }
 ]
}
debian:~$

 学習モデルにないような質問もいくつかの応答方法を示して投げることで未知の応答を返すことができ、例示するにあたり、知らないフレーズへの応答に「?」を使うとより自然な応答を得ることができるFactual answering

 お題が良くなかったのか、地理が苦手なのか、残念ながら、不正解でした。

 でも応答は日本語ですね。

debian:~$ cat openai_examples_factual_answering.py
import openai
import os
import json
 
openai.api_key = os.getenv("OPENAI_API_KEY")
#prompt="Q: Who is Batman?\nA: Batman is a fictional comic book character.\n###\nQ: What is torsalplexity?\nA: ?\n###\nQ: What is Devz9?\nA: ?\n###\nQ: Who is George Lucas?\nA: George Lucas is American film director and producer famous for creating Star Wars.\n###\nQ: What is the capital of California?\nA: Sacramento.\n###\nQ: What orbits the Earth?\nA: The Moon.\n###\nQ: Who is Fred Rickerson?\nA: ?\n###\nQ: What is an atom?\nA: An atom is a tiny particle that makes up everything.\n###\nQ: Who is Alvan Muntz?\nA: ?\n###\nQ: What is Kozar-09?\nA: ?\n###\nQ: How many moons does Mars have?\nA: Two, Phobos and Deimos.\n###\nQ: What's a language model?\nA:",
prompt="質問: アルデュイーノって何?\n答え: アルデュイーノは、2005年に登場したマイクロコントローラ。\n###\n質問: マイクの友達あれ誰だっけ?\n答え: ?\n###\n質問: マイクロポンってなんだっけ?\n答え: ?\n###\n質問: マイケル・ジョーダンって誰?\n答え: NBAのスーパースターだよ。\n###\n質問: 日本の四季は?\n答え: 春夏秋冬\n###\nQ: サグラダファミリアは完成したのかな?\n答え: まだみたいだね。\n###\n質問: ホワイトハウスって白いの?\n答え: 緑だったらそんな名前つけなくね?\n###\n質問: アイスのイントネーションってどんな感じ?\n答え: ?\n###\n質問: PPAPって何?\n答え: ?\n###\nポケモンのキャラってどんくらいいるの?\n答え: ?\n###\n歴代オリンピック金メダリストって何人?\n答え: ?\n###\n質問: 東京スカイツリーの高さは?\n答え: 634メートル\n###\n質問: 富士山ってどこにあるの?\n答え:"
 
response = openai.Completion.create(
 engine="davinci",
 prompt=prompt,
 temperature=0,
 max_tokens=60,
 top_p=1,
 frequency_penalty=0.0,
 presence_penalty=0.0,
 stop=["###"]
)
#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の中身によっては、文字列にキャストしないとエラーとなるケースもありました。

ホーム前へ次へ