MkItYs

MkItYs > AI・交渉・物語の自動生成 > 

images

ChatGPT (GPT-4) にPrologで関係のルールを教えてみる:GPT-4, Prolog (SWI-Prolog)

images

- 2023.03.15

ChatGPT (GPT-4) に、Prologで関係のルールを教えてみましたーーうまくすれば、チャットのときのルールベースのメモリに使えるかもしれません。

関連


ChatGPT (GPT-3.5) にPrologで関係のルールを教えてみる:GPT-3.5, Prolog (SWI-Prolog)
大規模言語モデル/音声認識/音声合成/感情分析を使う:ChatGPT (gpt-3.5-turbo) , GPT-3 (text-davinci-003) , FlexGen, Azure Cognitive Services (Speech SDK)

結論


結論として、総じてGPT-3.5 でうまく対応できなかった問題は、ほぼ解消されてますねーーそのいっぽうで知識が増えたぶん、すこしややこしい問題も出てきてますが。[※1][※2]


※1
この記事は、次の記事のフォーロアップですーーGPT-3.5 での問題が、GPT-4 でどうなったかを確かめています
ChatGPT (GPT-3.5) にPrologで関係のルールを教えてみる:GPT-3.5, Prolog (SWI-Prolog)
※2
とはいえあくまでチャットツールなので(原則、事実や論理については頓着しないモノなので)、使う場面は見極めが必要ですけど。

規則:親子関係のルール


まず、複数の事実に対する複数の回答ですーーGPT-3.5 はここまで複雑だとうまく答えられませんでしたが、GPT-4 は完璧に答えることができています(必要十分な回答を返している)ーーしかも根拠の説明も整理されていて、みごとです:

規則:
おばあちゃん(G,X):-おかあさん(P,X),おかあさん(G,P).

事実:
おかあさん(なつこ,はるこ).
おかあさん(あきこ,なつこ).
おかあさん(なびき,あかね).
おかあさん(かすみ,なびき).

質問:
おばあちゃん(X,Y).
X =
Y =
このプログラムは、おばあちゃんの関係を示す論理規則と、いくつかのおかあさんに関する事実を提供しています。Prolog言語のような形式で記述されています。

規則は、次のように読めます:
おばあちゃん(G,X)は、おかあさん(P,X)とおかあさん(G,P)の関係がある場合です。

事実は以下の通りです:

なつこははるこのおかあさんである。
あきこはなつこのおかあさんである。
なびきはあかねのおかあさんである。
かすみはなびきのおかあさんである。
これらの情報をもとに、おばあちゃんの関係を解決しましょう。

おばあちゃん(X,Y) の関係を見つけるために、規則に従って事実を適用します。

おかあさん(あきこ,なつこ) と おかあさん(なつこ,はるこ) の組み合わせから、おばあちゃん(あきこ,はるこ) が得られます。
おかあさん(かすみ,なびき) と おかあさん(なびき,あかね) の組み合わせから、おばあちゃん(かすみ,あかね) が得られます。
この結果から、質問に対する答えは次のようになります。

X = あきこ, かすみ
Y = はるこ, あかね

規則:さまざまなルール


日本語でも、<母と祖母>の言葉の関係を学習したようです。もしかして家族関係の言葉のルールは、この言語モデルではもう常識の範疇なのかなあ……:

事実:
ちさとの おかあさんは くるみ。
くるみの おかあさんは たきな。

質問:
ちさとの おばあちゃんは
ちさとの おばあちゃんは たきな です。

ちなみに複数の事実があっても、混乱せず答えられるようです:

事実:
はるこの おかあさんは なつこ。
なつこの おかあさんは あきこ。
あかねの おかあさんは なびき。
なびきの おかあさんは かすみ。

質問:
あかねの おばあちゃんは
あかねのおばあちゃんは、なびきのお母さんです。上記の事実から、なびきのお母さんはかすみです。したがって、あかねのおばあちゃんはかすみです。

会話


会話文も、より自然な感じになりました(無視されていた「丁寧語を使わない」も認識され、応答もなぜか1回分で止めてくれるので、「ひとこと」の注記も不要になっています):

規則:
おばあちゃん(G,X):-おかあさん(P,X),おかあさん(G,P).

事実:
おかあさん(なつこ,はるこ).
おかあさん(あきこ,なつこ).
おかあさん(なびき,あかね).
おかあさん(かすみ,なびき).

会話:
兄と妹の会話です。妹は丁寧語を使いません。
兄:はるこさんのおばあちゃんってだれだっけ?
妹:
あきこさんだよ。だって、はるこさんのおかあさんはなつこさんで、なつこさんのおかあさんはあきこさんだから。

とはいえまだ、<会話>と<規則・事実>の組み合わせは混乱するようですねーーとくにChatGPT が日本語で知っているルールに、(同じ意味の)構造化したルール(Prolog, etc. )をプロンプトに加えている場合、失敗してしまいがちです:

規則:
おばあちゃん(G,X):-おかあさん(P,X),おかあさん(G,P).

事実:
おかあさん(なつこ,はるこ).
おかあさん(あきこ,なつこ).
おかあさん(なびき,あかね).
おかあさん(かすみ,なびき).

会話:
兄と妹の会話です。妹は丁寧語を使いません。
兄:あかねさんのおばあちゃんってだれだっけ?
妹:
あかねさんのおばあちゃんは、なつこさんだよ。

なのでこのモデルがすでに<常識>として知っているルールがあるなら、そのルールを使う関係だけを加えた方がうまく回答できるという、けっこうややこしいことに……どうしようかな……

事実:
はるこの おかあさんは なつこ。
なつこの おかあさんは あきこ。
あかねの おかあさんは なびき。
なびきの おかあさんは かすみ。

会話:
兄と妹の会話です。妹は丁寧語を使いません。
兄:あかねさんのおばあちゃんってだれだっけ?
妹:
あかねさんのおばあちゃんは、かすみだよ。