書きまぁす\(^O^)/
最近やってることがChatGPT(ブラウザのやつ)とかけ離れてきたというのもあって、タイトル改めました。本記事は、カクヨムでGW期間中に実施されている「AI短編小説コンテスト」に応募するための小説を書くぞ~っというシリーズになります。今週末締め切りッ\(^O^)/
参加者のプロンプトとか書く手法みたいなものを見てしまうとそれの影響をめっちゃ受けそうな気がしたので、自分の作品を提出するまでは企画参加者の作品は見ないようにするつもりです。唯一例外として企画者の太刀川さんのサンプル作品はめっちゃ読みましたw てかChatGPTくん手懐けるのちょう上手い…スゴい…。
そういうわけなので、スーパー過疎ブログなのでないとは思いますが、企画参加者の方がもしこのページを見ている場合、これ以降はばんばんプロンプトとかコードとか出てくるのでお気をつけください。いちお続きを読むやつ挟んでおこう。
ChatGPTと一緒に小説を書くために必要なもの
結論は…これだッ
- ChatGPTくんが紡ぎ出す物語の「つまらなさ」を特定して、できるだけツマンネー要素を排除する
- ChatGPTくんの記憶喪失問題にできるだけ対応する
- 日⇔英翻訳で失われるニュアンスが何か特定して、できるだけ情報が失われないようにする方法を見つける
- 上記のことをやるには死ぬほど試行回数が必要なので、何度も試せる仕組みを作る
結論とか偉そうなこと書いてますが、これは私見です!!!(私見です!!!)
さて、なんかデカいこと言うときは私見ですって前振りしておかないといけない気がしたのでそのように宣言しております(最悪)。
1. ChatGPTくんが紡ぎ出す物語の「つまらなさ」を特定して、できるだけツマンネー要素を排除する
ツイッターとかでも過去に垂れ流しているのでもしかするとご存知の方はいるかもしれませんが、自分は3月くらいに「乙女ゲー風ゲームブック」の設定をChatGPTくんに入れて遊びまくっていました。そのときに感じたのですが、なにも考えずにChatGPTくんに小説を書かせようとすると、文章としては成り立っており文意も伝わっているが、物語としてはクソつまんねえものができあがるということなのです(この人はいま自分が書く小説のことをめちゃくちゃ棚に上げています)。いや、まじでびっくりしました。AIが小説書いたすっげえ!/でもつっまんねえ! っていう二重の衝撃を受けました。
参考までに、これがテキトーに書かせた例です。
これだけの内容が、「剣と魔法のファンタジー小説を書いてください。」とかいう無責任なふわふわ指示を受けて数秒で生成される、そのこと自体はめちゃくちゃすごいことなのですが、それとはまた別の話として、これが面白いかと言われるとウーンという感じ…なのです。お楽しめるかなあ…。
ただ、ここで「つまんね~の!」って投げ出すと、彼と一緒に小説を書けなくなってしまうので、なぜつまらないのか、どうやったら面白くなるのか、ちゃんと考えてみました。考えたっていうか、プロンプトを変えて試しただけなのですが、とりあえずChatGPTくんにはこんな傾向があるみたいでした。
- ハッピーエンド至上主義
- なんか知らんけどハッピーエンドにしたがる
- 「困難な出来事を盛り込んでください」とか言っても後述のガバ解決で誤魔化される
- 新しい世界至上主義
- なぜか「彼は新たな世界へと旅立った」「彼は新たな冒険に向かった」「未知の待ち受ける未来へ…」みたいな結末になりがち。これもハッピーエンドの亜種なのか?
- 困難の解決方法がガバガバ
- 困難な事象の解決方法がガバガバです。だいたい都合のいい何かしらのイベント/アイテム/仲間とのキズナ(‘_’)で解決されてしまいます。
- 具体的な解決方法はいっさい示されません。「解決したので、解決しました」みたいな現象が横行します。
- 仲違いなど、本来ならそこそこ重めのイベントがあったとしても、「気持ちが通じ合った」「信頼を確かめた」などの数語で事象が解決します。おまえマジか…
- びっくりするほどダイジェスト
- 困難ガバ解決のせいもあって、展開が超ハイスピードで進みます。
- 新しい登場人物や、新しい困難が生えてきても、主人公は何事もなく受け入れたり乗り越えたりします。
- ○○の場面まで書いてください、と指示してもガン無視で続きを書いてしまいます。この情熱は誰にも止められないッ
- 性格設定をいきなり開示する
- 登場人物の性格を指示した状態で本文を書いてもらったときに、最初の段落でいきなり設定を開示してきます。
- 「太郎は妹に対して過保護」という設定をした場合、最初の段落で「妹に対して過保護な太郎は」とかをブチかましてきます。そこは順を追ってさあ…
ちなみにこれらのAI小説あるあるをフルコンボで決めた芸術点の高いものがこちら↓ ここまでポイント押さえてるとBINGOやん!みたいな感じで嬉しくなっちゃうゾ!!
小説を書いてもらうときは、とりあえずは上記の4大ヤババを明確に禁止しておく必要があるみたい。「○○はしないでください」の形で指示が必要ということですね。4大ヤババのほかにも細かいことを書きはじめると、やってほしいこと/やってほしくないことはいろいろあって、
- 登場人物の外見を描写すること
- 同じ表現を繰り返して使用しないこと
- 同じ文末の表現(現在形/過去形/体言止め/倒置法とか)を繰り返して使用しないこと
- 登場人物に設定されているパーソナリティを原文ママで使用しないこと
- 台詞のあとに「と言った」を連発しないこと
- 描写は視点のカメラが向いたとき、自然に行うこと
- 突然関係ない事物の説明を入れないこと
みたいな…ていうかこれは全部自分が書くときに気をつけていることなんだけど(できているかは別の話である)、これをChatGPTくんが理解可能な文章にしてプロンプトに入れないといけないということなんですね。めっちゃわがままな顧客みたいだw
2. ChatGPTくんの記憶喪失問題にできるだけ対応する
これはですね~~~~難しい問題ですね。GPT-3.5を使う場合はだいたい3000文字しか情報を覚えられないんですよね。これの解決方法としては、GPTくんを複数用意するくらいしか自分は思いつきませんでした。少し前にLangChainとかChromaとか外部DBの勉強してたんですけど、今回は自分で小説の設定とかは決めるので、検索して適切なデータを読み込むところはマニュアルでやるので関係ない感じです。複数のGPTを用意するというのはこういうイメージです。
- シナリオ介入者
- 自分。配信GPTに対して、次のイベントを入力する
- 配信GPT
- シナリオ介入者からイベントを受け取り、イベントを誰に配信するか決める
- イベント配信後、リアクションを受け取る
- イベント内容とリアクションの内容を小説叙述GPTに渡す
- イベント内容とリアクションの内容をDBに記録する
- 登場人物AのGPT
- キャラクターの性格、背景などの情報を持つ
- 配信GPTから何かしらのイベントを受け取り、必要なら自分自身の性格、背景を更新する
- イベントを受け取ったとき、リアクションを返す
- リアクションは性格、背景によって変わる
- 登場人物BのGPT
- Aに同じ。Aと異なる性格、背景を持つ
- 小説叙述GPT
- 配信GPTから受け取った内容をもとに小説を書く
- 必要に応じてDBから過去の出来事を参照する
こうすれば個々のGPTたちはギリギリ3000文字で耐えられるのではないかという…まあ願望です。上手くいくかどうかはやってみないとわかりません。
3. 日⇔英翻訳で失われるニュアンスが何か特定して、できるだけ情報が失われないようにする方法を見つける
これはですね~~~~、GPTくんに何かブチ込むとき、日本語より英語のほうがいい感じの応答が返るというのがあるので、じゃあ英訳して突っ込もうとなるのですが、そのときの英訳にどのツールを使うかという話ですね。Google翻訳、DeepL、ChatGPTの3つを試してみて、感触的にはChatGPTがいいかな~という感じでした。ですのでそれを採用します。
で、ちょっと気をつけないとなと思ったのが、元の日本語に独自の固有名詞が入っていた場合、それが悪さをして変な訳文になってしまうことがありました。なので独自の固有名詞はできるだけそのままの単語を維持してもらうように、ここだけは自分で日本語⇔英語の対訳表を作って、ChatGPTくんに参考情報として渡すように気をつける、という感じです。英訳すると単純にAPI使用回数が倍になるのですが、無料枠はまだまだ余っているので使いまくります。っというか6月でせっかくの無料枠が期限切れしてしまうので、それまでにできるだけMaxまで使っちゃいたいというところです。エヘ。
4. 上記のことをやるには死ぬほど試行回数が必要なので、何度も試せる仕組みを作る
さて問題の…問題のツール作りです。ぶっちゃけChatGPTみたいなブラウザで何度も試せるものを作りたいというところです。で、ブラウザのChatGPTでは使えないTemperature設定とか、過去の履歴編集機能とかを盛り込む感じです。つまり…こういうイメージです!
AIと一緒に、楽しく、スムゥウウウズに小説を書くために、まずこういうのを作ります。作り方はさっぱりわかりませんが、そこはChatGPTくんがなんとかしてくれることでしょう。他力本願です。これからの時代は他力本願が大事なのではないでしょうかッ!
というところで次回に続きます。がんばるぞ~。
旅は終わらないッ