kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

ChatGPT に「形式が整った俳句」を作ってもらう(あるいは「文字数指定」をする)

 おはようございます。今日も元気にChatGPTをしています。さてさて、ChatGPTに俳句を作らせようとしても失敗するという話は一部界隈では有名です。たとえば、次のように「俳句を作ってください」とだけ指定しても五・七・五を平然と無視してくれやがります。

俳句(うまく行ってしまった)

 あれ?うまく行ってしまいましたね。ChatGPTは非決定的に答えを返すのでこんなこともありますよね。同じプロンプトでリトライします。

俳句(きちんと間違えた)

 これでようやく間違えてくれたので本題に入れます。と、このように俳句を詠んでと言っても五・七・五を平然と無視してしまうのです。では、俳句のフォーマットを指定してやった場合はどうでしょうか?

俳句(一回の修正で通ってしまった)

 あれれ?一回の修正でちゃんと五・七・五になおしてきましたね。う、うーん。まぐれ当たりのハズなので、三句くらい詠めばはずしてくれるはず。

はずしてくれた

 今度は予定通り(?)です。文字数に関する指定をしても、どうにもうまく行きません。

 この「文字数制限の指定をChatGPTは無視する」というのは廃ChatGPTerには有名な話なのですが、一方で「5個」とかの数量は理解してくれますし、リストの長さは理解してくれるんですよね。とここで昨夜思いついたのが「文字列を文字のリストとして表現すれば、ChatGPTはちゃんと文字数制限に相当するものを理解してくれるのでは」ということでした。というわけで、トライです。

お願い(1)

お願い(2)

 文字リストとして出力してもらう形にしたのでだいぶ「改善しています」。しかし、制限をもうちょっと厳密に守ってもらおうかと、より形式的に文字リストを出力してもらうようにしました。

文字数指定(厳密)

 今度は指示こそ通ったももの「本当に5文字、7文字、5文字からなる文字リストを出力する」だけですね。文字数をそのまま指定しようと無視するし、厳密に指定させると今度は単なる文字列長制限つき文字列生成になってしまうようです。しかし、ここで諦めては負けです。「文字リストを出力させる」アプローチはいいはずなので、あとは3つのリストが五・七・五に対応させるとこまでやればいけるハズ。てことで

成功例(1)
成功例(2)

 やってみたら見事行けました!季語が一部入ってないですが、五・七・五にきちんと従わせられたので及第点としていいでしょう。ただ、欲を言えば1回の質問でちゃんと「俳句になっている文字リスト」が欲しいですよね。もうちょっと頑張ってみました。

俳句(成功)

 ここまでやって思ったのですが、ChatGPTさんはやはり俳句の意義自体は理解しているように感じるので、プログラミング言語のコレクションのような、ChatGPTが間違えようがない形式を経由するとうまく行きやすいかもしれません。