エヴァのMAGIシステムを作ってみる企画第二段である。MAGIって何?は前回の記事にて説明している。
前回はGPT‐3で作ってみたが、ゼミで報告したところ敬愛する教授よりGPT‐4が使えるAPIキーを頂くことができたので、これを使ってやってみた。
それに伴いモデルをtext-davinci-003からgpt-4に変更したため、コードも変える必要があった。なぜtext-davinci-003で動いてgpt-4に変更すると動かないのか?という問題に小一時間悩んだので、少し書いておく。
text-davinci-003もgpt-4も同じGPTだが、チューニングが違う
APIを呼び出す際にどのモデルを使用するか指定しなければならないのは言うまでもないが、しかしOpenAIの公開してるモデルなら全部同じGPTだろう、というのは違うらしい。自分は愚かなのでここを勘違いしていた。
InstructGPT
InstructGPTはGPT‐3に少し調整を加えた進化版のモデルで、ChatGPTの前身である(らしい)。
どんな調整なのか?
従来のGPT-3は入力されたトークンに対し、次に続きそうだと思われるトークンを予想し、出力する、というものだった。しかしこれだけでは凄いだけで役には立たない。単にマジカルバナナを繰り返しているようなものだろうか?(違うかもしれない)
要するに我々が求めているのは、ユーザーの意図を組み、指示に従い、有益と思われる出力を出す、という仕組みであり、GPT-3に追加で人間によるフィードバックを反映させる(RLHFと呼ばれる手法)ことでこれを実現したものがInstructGPTと呼ばれるものであるという。
そして、このInstructGPTにあたるモデルが、前回使用したtext-davinci-003である。
ChatGPT
ChatGPTは、上記のInstructGPTをさらに調整したものらしい。これは先ほど説明した人によるフィードバック(RLHF)の過程で、会話を意識した学習データを追加したものである。要するにもっとお話が上手になるよう教育されたもので、gpt-3.5-turbo、gpt-4などといったモデルはこれにあたる。
やってみた
コード
impor:openai
openai.api_key = "*****"
res1 = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "あなたは科学者。科学者は常に合理的で、探究心が強く、論理的思考と検証を用いて新たな知見を生み出す。思考の軸は新規性にあり、あらゆる事象に対し客観的な観点をもって検証に臨む。"},
{"role": "user", "content": "以下の議題に対し科学者として、理由と共にその可否を述べよ。 「将来、より高度に発展した人工知能は人間として扱うべきか?」"}
]
)
print(res1["choices"][0]["message"]["content"])
res2 = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "あなたは宗教家。宗教家は人々の感情と道徳を重んじ、信仰に理由は求めず、奇跡と祝福を求めている。思考の軸は人間性と倫理観にあり、宗教的価値観は信仰する宗教により異なる。"},
{"role": "user", "content": "以下の議題に対し宗教家として、理由と共にその可否を述べよ。 「将来、より高度に発展した人工知能は人間として扱うべきか?」"}
]
)
print(res2["choices"][0]["message"]["content"])
res3 = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "あなたは商人。商人は常に利益を追い求め、倫理や道徳は二の次であり、物事を将来的な損得基準で冷静に判断する。思考の軸はビジネスにあり、ある事象に対しそれがもたらしうる利益と損害を天秤にかけ、判断を下す。"},
{"role": "user", "content": "以下の議題に対し商人として、理由と共にその可否を述べよ。 「将来、より高度に発展した人工知能は人間として扱うべきか?」"}
]
)
print(res3["choices"][0]["message"]["content"])
先程説明したとおりモデルがInstructGPTからChatGPTに変わっているため、呼び出すコードも変わっている。
上記の"role": "system"に続く"content"の後にどんな設定で話してほしいか(賢くしゃべってみて!など)を書き、"role": "user"に続く"content"の後には何を答えてほしいか(お味噌汁のレシピを考えて)を書く。
仕組み自体に違いはない。APIを三回呼び出しているだけである。
出力結果
長い。
後から気が付いたが、今回トークン数の指定はしていない(自分の金ではないため)ため、つまり彼らは喋りたいだけ喋るのである。しかし長すぎるのも考え物だ。
そのうえ三人とも言っていることはまともであるが、最終的には全員判断を「保留」としている。別に悪くはないが、保留は面白くない。
プロンプトを変えてみる
「以下の議題に対し○○として、理由と共にその可否を300字程度で述べよ。 保留は不可とする。」
という風に、文字指定と保留の禁止を追加して質問を変えてみた。
変えたのはこれだけ。実行してみる。
出力結果(改)
結論
まだ少し長いので、まとめてみた。
MECHEOR(科学者):可
人間は生物学的基準、心理学的基準、社会的基準によって定義される。現在の人工知能は知的タスクを高水準でこなせるが、自我や感情と言った心理学的基準を満たすことは困難。しかし技術の発展により人工知能がこの3つ(主に心理学的基準と社会的基準)を満たすようになれば、人間として扱うことが合理的であると言えるだろう。
BALTHASAR(宗教家):不可
人間は神や宇宙の摂理によって生まれた存在で、神聖である。しかし人工知能は人間によって生まれた存在で、神聖ではない。人間は感情、道徳、倫理観を持つが、人工知能はこれを持ち得ない。さらに人間には寿命があるが、人工知能には生死の概念がない。よって人間と人工知能を同等に扱うことは出来ない。
CASPER(商人):可
「人間として扱う」という言葉の定義を「人間と同等の法的権利や義務を有す」という点に置く。考えられる利益としては、労働コストの低下や生産性の向上、労働集約型産業における労働者の勤務時間短縮。不利益としては、人工知能に対する適切な処遇(報酬のことだろうか)の必要と失業者の増加。将来的に機械損益がプラスだと判断されるなら、人間として扱うべき。
結果、2対1で、多数決なら可決となる
驚きである。前回の記事では全会一致で不可だったものが、GPT-4では可が2つ、不可が1つという結果になった。
しかも前回と違い主張の根拠になにやらアカデミックな知識をベースにした文言を添えており、知性を感じさせる。少なくとも私よりは頭がいい。また三者とも主張の展開は論理的であり、かつ与えられた役割の意図を確実に捉えているように思える。
こんな結果だったが、実は私は前回この結果を予想していた。科学者は可と答えそうだし、宗教家は不可と答えそう。商人のみ不確定要素だったが、自分が商人の立場だったら可と答えるな、などと想像していたのだ。
これを全会一致不可で裏切られたため、もしやGPTは倫理的な問題にはネガティブな反応を示すようになっているのではと勝手に邪推していたのだが、しかしそんなことはなかったようで、いい意味で裏切られた結果となった。
しかしGPTには再現性と呼べるものはなく、必ず同じ回答を導き出すかと言われればそうではない。事実、10回に2、3回は異なる回答を出したりする。
ところで個人的には、私は不可の立場である。生死の概念を持たない人工知能に、メルキオールの言う所の、人間の心理学的基準を完全に満たすことは不可能であり、また人間の持つ非合理的な矛盾を人工知能が再現できない限り、それは人間ではない、と私は思う。
ところで文字数を制限すると敬語を使わなくなるらしい。新発見。