SF小説自動生成GPTsを作成しました
2023年より(前身となったワークショップも含めると2022年より)御縁をいただき、東京大学大学院情報学環「講談社・メディアドゥ 新しい本寄付講座」・渡邉英徳研究室にて客員准教授をさせていただいています。
この講座では「新しい本」の姿を模索し、議論し、ワークショップをしたりプロトタイピングをしたりしているのですが、その一環として(もあって)SF小説自動生成AIをGPTsで作成しました。本稿では以下でそのツールの概要・作成経緯・仕組みの解説をしていきたいと思います。
ツールの概要
入力に従って、(樋口が思う)SF小説っぽい文章が生成されるツールです。一文、一言、単語を入力しても小説の断片が出力されます。文体変換もできます。以下のリンクからアクセスできます。
入力すると、こういう動きをします(ツイートに動画を埋め込んでいます)。
作成経緯
以前からAIによる小説の自動執筆に興味があり、デビュー作の小説「構造素子」(今回作成したツールのアイコンにもしている作品)も、物語執筆AIが作中世界を物語の自動生成によって書き換えてゆくという話でした。
渡邉先生ともよくそういう話をしていて、ChatGPTが出てきてからは学生のみなさんとプロンプトエンジニアリングによる小説自動生成のワークショップなども行っていました。
そうした経緯から独自ツールも作ってみたいと思っていたのですが、LLMのファインチューニングは非常に(金額的にも時間的にも労力的にも)コストがかかり、RAG(Retrieval-Augmented Generation=LLMのトークン制限を超える大量データをベクトル化して参照可能にする技術)を用いた小説生成はうまくいかなかった(知識を参照して提示するという挙動が強調されプロンプトによる文体制御がうまく効かない)こともあり、手っ取り早くプロンプトだけで作れるGPTsでいいんじゃね、まず試しに動かして共有してみたいだけだし、というわけで、GPTsでサクッと作ったという次第です。
仕組みの解説
以下のプロンプトのみで動かしています。ドキュメント参照やウェブ参照など、RAG的な外部知識参照の仕組みは使っていません。なので、プロンプトをCustom instructionsに貼り付けてもらえれば、GPTsを使わなくとも誰でも同じように動かせるようになります。
少しプロンプトの解説をすると、まずは見ての通りMain Instructionがプロンプト本体で、Sub Instructionがプロンプトインジェクション(チャットを通してプロンプトを盗み出す技術)への対策です(まあここでこうしてすべてを開示しているのでなくてもよいのですが、GPTsでプロンプトを盗まれたくない人は参考にしてください)。
Main Instruction部分では、プロンプトエンジニアリングのお作法的な技術と、自分が小説を書く際の思考のモードや参照枠のようなものに思いをめぐらし、だいたいこんな感じだろうかと思う情報を棚卸しし、プロンプトに組み込んでいき、実際に動かして試行錯誤した結果が反映されています。
お作法的なところというのは、「あなたは~です」というようなLLMの役割定義であったり、文量や出力言語などの形式の指定のことを指しており、小説の参照枠というのは実在する作家名や学術知識などを指しています。ル・クレジオ、ドン・デリーロ、ミシェル・ウエルベックはぼくが小説を書くときに実際に意識している作家で、LLMも彼らの作品のテーマや文体などを学習しているので、指定してその知識を思い出させることで、自分自身の小説のモードに近づけることができます。またぼくはSF作家なので、理系分野の専門書などを脇に置きながら書くことが多く、そういう知識もあらかじめ思い出しておいてもらいます。
それから、LLMは説明文に比べて描写文が苦手です。そもそもLLMの学習元となっているあらゆる本や記事において説明文に対する描写文の割合は小さいので、普通に執筆指示をしたら知識の多くを占める説明文で書こうとするのは当然と言えば当然なのですが、そこでヴァージニア・ウルフなどの描写が濃密で特徴的な作家名に言及して思い出させることで、ある程度描写文を書いてもらうことが可能になります。
最後に
触っていただくとわかるのですが、ある程度SF小説っぽい文章は出てくるものの、現状のトークン制限上、長くするのはやはり厳しいのと、展開をもたせる指示を書くと細かい文体が崩れるというような挙動をします。また、政治的・倫理的に問題のある(とOpenAIが判断している)文章は出力されないため、そこにも限界を感じます。
本当に柔軟な自動生成小説AIツールを作成したい場合は、TinyLlamaなどのある程度動かしやすい小規模ローカルLLM(SLM=Small Language Modelと呼んだりもするらしい)でファインチューニングして文体制御を行いつつ、Grokなどの「なんでもアリ」(?)をうたっているオープンソースLLMと連携するのがよいのではないか、と妄想しますが、いつかそんなことができる時間とお金が手に入るといいな……などと思いつつ、このあたりで筆を置かせていただきます。
※本稿は東大渡邉研ブログに投稿した以下の記事の増補版です。