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). 事実: おかあさん(なつこ,はるこ). おかあさん(あきこ,なつこ). おかあさん(なびき,あかね). おかあさん(かすみ,なびき). 会話: 兄と妹の会話です。妹は丁寧語を使いません。 兄:あかねさんのおばあちゃんってだれだっけ? 妹:
あかねさんのおばあちゃんは、なつこさんだよ。
なのでこのモデルがすでに<常識>として知っているルールがあるなら、そのルールを使う関係だけを加えた方がうまく回答できるという、けっこうややこしいことに……どうしようかな……
事実: はるこの おかあさんは なつこ。 なつこの おかあさんは あきこ。 あかねの おかあさんは なびき。 なびきの おかあさんは かすみ。 会話: 兄と妹の会話です。妹は丁寧語を使いません。 兄:あかねさんのおばあちゃんってだれだっけ? 妹:
あかねさんのおばあちゃんは、かすみだよ。