オリジナルのファンタジー世界事典を生成AIで作る

第二回AIアートグランプリに応募して落選した作品の、制作の裏側を詳しくご紹介します。

応募した作品は以下からご覧いただけます。

この作品は「生成AIを使って、24時間でオリジナルのファンタジー世界の事典を作る」という設定で取り組んだものです。

従来ひとりでは叶えるのが難しかった、大きな世界を素早く作り上げたいという願望。それが近い明日には実現するんじゃないかという予想。その現在地を、今使える生成AIで確認しようと試みました。

制作開始

元々制作に1週間はかけて何か応募しようと考えていましたが、色々重なって24時間しか使える時間がなくなってしまいました。そこで開き直って次の条件で制作をスタート。

  • ファンタジー世界の事典を作る
  • Webで公開する
  • 使える時間は24時間
  • ツールもゼロから検討する

「ファンタジー世界の事典」という題材は、ずっと試したかったものです。ハイファンタジーが大好きで、ゲームや生成AIに触れる動機の根幹にもそれへの憧れがあります。生成AIを使わずに似たものを作りかけたことは何度もありますが、膨大な作業量の前に、いつも枠組みを作っては続かずというのを繰り返してきました。生成AIに触れ始めた当初から作りたかったものの一つです。

Webベースなのは慣れとツールの豊富さから。Webベースで構築しておくとXMLなどでレンダリングしてDTPに持ち込んだりも容易です。

24時間という縛りは、現実に締め切りが迫っていたのはもちろんですが、ひとりが短時間でどこまでできるかそれ自体が、生成AIの表現生産力の実験として面白そうだと採用。ただし後になって、せめて72時間あれば……と後悔しました。

ツールの検討

世界事典に必要なツールは、文章と画像を生成するもの、そしてそれを整理しWeb用に描くものです。

文章生成はChatGPT

時間と環境の制約から、ローカルで動かすLLMは最初に除外しました。理想は十分な規模のオープンな基盤を元に、独自の学習をさせたローカルで動くモデルを使うことですが、今回には到底間に合いません。すぐに使える中では、使い慣れていて創作もいろいろ試しているChatGPTが第一候補ですが、他のサービスも検討しました。

ChatGPT同様汎用性ある高性能なものとして、Google BardClaude2を検討しました。しかしどちらも規制が厳し過ぎます。Bardは穏当そうな入力でも回答を拒絶することが多く、Claude2は倫理的に正しそうな方向への捻じ曲げがひどいです。検閲が強まったとはいえ、これらに比べるとChatGPTはまだ創作向きでした。

日本語の創作に特化したサービスとして、AI BunChoAIのべりすとも検討しました。しかしどちらも小説的な表現への特化が強く、事典のように多様な概念を積み重ねて展開するようなものには不向きのようでした。生成の速度や安定性も、時間がない中では大きな懸念でした。

結果、やはりChatGPTを選択しました。サービスによっては勝る部分もありましたが、情報の広さ、表現力、文章の整合性、パフォーマンス、コスト、アプリケーションとしての使いやすさ、手軽さ、検閲などを考えると、総合的にChatGPTに。

ChatGPTには3.5と4がありますが、これははじめから4だけを想定しています。3.5では文章表現のノイズや矛盾の混入が頻繁で事典用に使うのは不向き過ぎ。4には3時間毎に50回という利用回数の制限がありますが、24時間で最大400回使えればとりあえず足りると判断しました。

今回はChatGPTを選択しましたが、次があれば他のサービスを選ぶかもしれません。検閲がどこまで強まるかわかりませんし、創作に特化した大規模なサービスが出てくる可能性は高いと考えています。またAI BunChoやAIのべりすとは個人運営に近い状態で、比較するのがフェアでないぐらい規模に差があります。その分強化される余地も大きいはずで、日本語の創作特化サービスとしてとても期待しています。

画像生成はStable Diffusion XL

これも使い慣れたStable Diffusion系を第一候補に、他のプロダクトも検討しました。

対抗馬の筆頭はやはりMidjourneyです。品質は極めて高く、ファンタジーという題材にも向いてます。しかしコストが追加で掛かり、DiscordベースのUIは手軽ですが作業効率が悪い。何より改めて試してみて、どうも面白くない。不慣れも大きいと思いますが、なぜかしっくりきません。

OpenAIのDALLEはまだ2までしか公開されていない状況で、画質にも機能も速度もSDXLに大きく劣るため除外。DALLE-3が出ていればプロンプトへの忠実さなどから採用したかもしれません。

結局使い慣れたStable Diffusion系をローカルで動かすことにしました。ローカルではDiffusersというライブラリを用いた自作のスクリプトと、Stable DiffusionのGUIとして事実上の標準となっているAUTOMATIC1111/Stable Diffusion web UIを利用します。

Stable Diffusionには1.x系・2.x系・XLとありますが、XLを選択。新しい技術を試したかったこと、ControlNetのような制御技術は使わないこと、そして何より表現力が大きく向上していることなどからです。

問題は生成の遅さで、制作時点の環境では1920×1080の生成に数分かかります。しかし他にやることは山積みで、並行作業で300枚も生成できれば十分と考えました。

コンテンツ管理はDirectus

ChatGPTで生成した文章と、Stable Diffusion XLで生成した画像は、事典としてまとめ上げるための管理が必要です。Webベースなので、いわゆるCMSを使うことにしました。

Web向けのCMSといえばWordPressが代名詞のようになっていますが、サーバーにインストールして動かすCMSは今回の用途に不向きです。逐次更新があるわけでなく、コンテンツを返す以上の機能も不要です。ChatGPT APIを利用するWordPress用の自作プラグインはありましたが、どうせ画像はローカル生成するし、APIを利用する仕様を探る時間もありません。WordPressのような大きなシステムを、セキュリティ含め適切にセットアップし維持するコストもかけたくありませんでした。スキルセットの違う多人数で編集する場合などWordPressの便利なシーンもありますが、除外しました。

FileMakerというDBアプリケーションも検討しました。私が手足のように使えるのが最大の理由ですが、モデリングは手軽で画像も扱え全文検索もあるので非常に便利。実際画像生成で出力した大量の画像管理にはFileMakerを使っています。問題はWeb向けでないため出力部分の構築が面倒で、こちらも今回はなしに。

迷った挙げ句、コンテンツ管理はヘッドレスCMS、レンダリングは静的サイトジェネレーターの組み合わせに決めました。ヘッドレスCMSとはWordPressのようなCMSからレンダリング機能をごっそり省いたようなもので、コンテンツの定義と管理に集中できます。日本だとmicroCMSが有名でしょうか、仕事でもしばしば使っています。

いろいろヘッドレスCMSを比較した結果Directusを選びました。UIが良さげだったのと、ローカルで手軽に動きそうなこと、そしてレンダリングに選んだAstroとの連動が問題なさそうだった辺りが理由です。ローカルで動くヘッドレスCMSも色々あるので、次は他を採用するかも知れません。

ページレンダリングはAstro

ヘッドレスCMSに蓄えたコンテンツをWeb公開できる形に変えるのに静的サイトジェネレーター(SSG)を使うことにしました。SSGでHTMLにレンダリングしてしまえば公開するサーバーを問いませんし、セキュリティも基本的なものだけで済みます。

SSGにもたくさん選択肢がありますが、この時本当に直前ver3が正式公開されたAstroを採用しました。Astroは比較的設計の新しいSSGです。高速なページ生成や表示がウリで、構成やレイアウトにもほとんど制約がありません。ヘッドレスCMSからデータを取得したり、半動的なコンテンツを扱いやすかったり、React風に書けたりと、色々揃っています。

枯れたver2系列はある程度試していたのですが、あえて正式公開直後のver3を選びました。多分今回の作品ではどっちを採用しても負荷はほぼ同じなので、新しいものに触れる機会を選びました。従来SSGとしては11tyをよく使ってたんですが、Astroに慣れてしまったので今後もAstroをメインに使いそうです。

どう綴るか

ツールは決めましたが、ChatGPTを使ってファンタジー世界の事典に必要な文章をどのように構築するかの設計が必要です。

今回「事典」という形式を選んだのは、ChatGPT-4を使ってもなお、破綻ない文学的な表現の品質はまだ低いためです。そのため小説や詩歌の生成は難しく、面白くありません。これが事典なら独立した項目ごとに極端な破綻がなければ通用しますし、要素間の矛盾も目立ちにくい。文学的な表現もさほど要らず、ChatGPTが得意な論理性で取り扱うのに無理がありません。

それでもただ漠然と「こんな世界で事典用の文章を生成して」と頼んだのではうまくいきません。世界全体の共通設定を踏まえ、なるべく矛盾なく、ある程度揃った観点の出力が必要です。こうした出力を満たせるよう、それまでの経験からChatGPTの使い方について次の方針を決めました。

  • セッションを繰り返して基本設定を煮詰める
    • 煮詰めた結果を人力で修正する
    • コンテキストウインドウを食い潰さないよう短くする
  • 基本設定を詰め込んだセッション上で、項目ごとに再生成を繰り返す

DALLE3で上記の解説や方針を視覚化させてみた無関係な挿絵

コンテキストの節約

セッションを繰り返す、人力で修正する、短くする、再生成を繰り返すといった方針は、どれも今のChatGPTの制約からくるものです。ChatGPTは事前に学習済みの大規模な情報を使って、与えられた情報に対する応答を生成します。この与えられた情報の部分はコンテキストと呼ばれ、その長さには制限があります。制限を超えてしまうと重要な設定を忘れたり、矛盾が頻出したりします。

コンテキストに会話の流れを乗せることで、ChatGPTはLLMを使った対話風の出力を可能にしています。こういう会話が行われたのだから、続きはこうだろうという推定の結果が、まるで人間と話しているかのような対話風のテキストとしてユーザーには提示されるのです。

狭いコンテキストに必要な情報を詰め込むことは、今のChatGPTを使った創作には不可欠です。しかし貴重なコンテキストを圧迫する要素は多々あり、工夫しなければ生成結果の質が大きく下がります。

会話の流れと書いたように、コンテキストにはユーザーの入力だけでなくChatGPTからの応答も含まれます。この応答には指示をオウム返ししたり、不要な補足を付け足したり、明らかな無駄が多数含まれます。過剰な説明もありますし、似たような例を繰り返し挙げる場合もあります。

そこで一度生成した結果を掃除し整形し、それを元に更に続きを生成させ、またその作業を繰り返し、必要な情報だけを持ったコンテキストを整備していきます。指示の部分、対話を促すための表現、そして気に入らない箇所も合わせて手直しします。

はじめの指示

最初の段階として、まずは作りたいものやその世界の概要を入力します。初期にある程度の情報を与えないと出力が凡庸になりやすい傾向があるので、次のような入力から始めました。

独自のファンタジー世界の文学的な事典を作ろうとしています。まずは世界の構築を以下の条件で手伝ってください。

・古代から中世あたりまでのヨーロッパ的な世界がベース
・言語や宗教は独自のもの
・事典の対象はその地域のひとつの文化圏で、ひとつの中規模の大陸が舞台
・世界には「畏き者」と総称される超常の存在がいる
・畏き者は、自然の脅威そのもののような存在から、悪意ある者、気まぐれな者、意思疎通できる者、できない者、人間の守護者や敵など様々
・畏き者の「恩寵」は、超常的な力を人間にももたらす
・人間たちは特に強大な畏き者の間を縫うように文明を作ってきた
・時に悪意ある畏き者を、人間の英雄が倒したり、国々が力を合わせて封印したり

この世界において、非英語的な独自の言語構造や体系を、名詞や日常会話の例を交えて提案してください。全ての固有名詞は先にカタカナで訳文を表記し、続けて括弧書きで原文をアルファベット表記して。名詞例は特に、人・男・女・子供・命・英雄・畏き者・恩寵を。

自分の好みに合うファンタジーな世界で、超常的な存在をどう組み込むかは重要です。事典として設定や絵が面白そうな要素として今回は”畏き者”という、神のような怪物のような存在を登場させることにしました。

できれば既存文化の分かりやすい延長にはしたくなかったんですが、結果が安定しないのでヨーロッパ的という指定をかけています。特に画像生成では”fantasy”と指定すると、いわゆる剣と魔法の世界が出やすく、それがそのまま活かせるヨーロッパ風の基本設定は、時間が無い中では無難な選択でした。

最後に指示として、重ねて言語の例まで生成を行わせています。これはトールキンに倣ったもの……ではなく、もっと実際的な理由からです。ChatGPTは架空の世界を描かせた場合、固有名詞にかなり雑な既存言語の表現を用いることがあります。特に英語が標準で使われてしまうため、”グレートファイヤー”だの”イビルゲート”だのが出てきてげんなりします。これを防ぐため、先に独自っぽい言語風の表現を出力させているのです。以下がその結果。

言語:ヴァラクシャ(Valaksha)

名詞例:
  • 人:ユナリ(Yunari)
  • 男:ゼンタ(Zenta)
  • 女:ルミア(Lumia)
  • 子供:トヴェリ(Tveli)
  • 命:チャス(Chas)
  • 英雄:オラティス(Oratis)
  • 畏き者:ドルヴァン(Doruvan)
  • 恩寵:ヴェリャ(Velya)
日常会話の例:
  1. こんにちは:サルヴァリュ(Salvaryu)
  2. ありがとう:ゼリュクト(Zelyukto)
  3. 神々しい:オヴァネス(Ovanes)
  4. 危険:ルザク(Luzak)
  5. 私は(名前)です:ミン ユナリ(名前)ダラ(Min Yunari [name] Dara)
  6. 畏き者が来る:ドルヴァン ジャラス(Doruvan Jaras)
  7. 恩寵を授かる:ヴェリャ グリトリュ(Velya Gritlyu)

この言語は主に音節が短く、強調する言葉が後ろに来る傾向があります。例:ヴェリャ グリトリュ(Velya Gritlyu)、恩寵(Velya)を授かる(Gritlyu)。

勘違いも時々見かけますが、こうした出力は「AIが言語学的な新しい体系を内部に生成した」なんてものではありません。それらしい出力の呼び水として例がコンテキストに積み上げられた、というだけです。たとえば上記の応答に続いて「この言語で火はどう表現する?」と聞くと、聞き直す度に答えは変わり得ます。人間の言語の処理も似たような原理かもしれませんが、少なくとも今のLLMの応答に、そうしたアドホックなモデルの構築までは期待できないと思います。

基本設定の完成

こうした方法で重要な要素について生成させながら、修正と掃除をしつつ繰り返していきます。今回は以下の7つのブロックを基本設定として用意しました。

  • 概要
  • 言語
  • 超常の原理
  • 畏き者(超常の存在)
  • 恩寵(超常の能力)
  • 人類史
  • 七つの国家

以下はその全体のテキストです。これをChatGPT-4に貼り付ければ、作品と同じような生成が行なえます。ただし長すぎて一度ではChatGPTに送信できないので、”設定の続き。理解後「理解完了」と返事を。”とある箇所で分割が必要です。

独自のファンタジー世界の文学的な事典を作りたいので前提条件を提示する。
理解後「理解完了」と返事を。

・古代から中世あたりまでのヨーロッパ的な世界がベース
・言語や宗教は独自のもの
・事典の対象はひとつの中規模の大陸
・世界には「畏き者」と総称される超常の存在がいる
・畏き者は「恩寵」として、超常的な力を人間も含めた世界にももたらす
・人間たちは強大な畏き者の間を縫うように文明を作ってきた
・時に悪意ある畏き者を、人間の英雄が倒したり、国々が力を合わせて封印したり

== 言語 ==
共通語の名:ヴァラクシャ(Valaksha)

名詞例:
人:ユナリ(Yunari)
男:ゼンタ(Zenta)
女:ルミア(Lumia)
英雄:オラティス(Oratis)
畏き者:ドルヴァン(Doruvan)
恩寵:ヴェリャ(Velya)

日常会話の例:
こんにちは:サルヴァリュ(Salvaryu)
ありがとう:ゼリュクト(Zelyukto)
神々しい:オヴァネス(Ovanes)
危険:ルザク(Luzak)

この言語は主に音節が短く、強調する言葉が後ろに来る傾向があります。
例:ヴェリャ グリトリュ(Velya Gritlyu)、恩寵(Velya)を授かる(Gritlyu)。

== 超常の原理:エヴァリナ(Evarina)==

この世界における超常の原理は「エヴァリナ」と称され、現実の物理法則とは平行に存在する力の体系。
エヴァリナは微細な単位、称して「ティリュオン」から始まり、集合を繰り返し強大な畏き者までを形成。

・ティリュオン:エヴァリナの基本単位。あらゆる物質に織り込まれている。
・リュアク:ティリュオンの集合で、特性を持つようになる。微細な存在や、弱い恩寵の源。
・シスタ:リュアクが集結し複雑な力に。弱い畏き者や有用な恩寵。
・セファ:シスタの集合体。強大な畏き者や恩寵。
・ヴァン:セファの集合体。最大級の畏き者や伝説的な恩寵。

エヴァリナは全てを貫く原理。畏き者から他に伝播し場合「恩寵」と呼ぶ。
ティリオン集合体である畏き者からその力が移るが、その条件は多様。エヴァリナによって物理世界は「可能性の広がり」を持つ。

エヴァリナの原理は決して無限・無制限でなく、緊張と衝突と崩壊と再生を繰り返し、バランスをとって世界を動かしていく。

== 畏き者(ドルヴァン)==

無数に存在し、相性と勢力圏を持つ。強大なものは少なく、小さなものたちは多数。
以下は代表例。

=== ヴァン級 ===

最大級の畏き者。意志ある自然。ほぼ人間を感知しない。
恩寵は2例しかない。自然全てがヴァン級の畏き者の恩寵とも言える。

・クレリヴァ (Kleriva):大陸を貫く巨大な山脈全体そのもの。
・アイレナ (Ailena):深い海の畏き者。大陸の海岸線や深海の底まで彼女の身体。
・セルトラ (Sertora):空と風を統べる畏き者。雲の流れや風の向き、雷雨や晴天は全てセルトラの脈動。
・ヴァリンディス (Varindis):地下の深層と鉱石を司る畏き者。大陸の地下深くに眠る。

=== セファ級 ===

人間に最も影響する規模の畏き者。悪意善意様々、人間的な思考を持つものから、気まぐれな力の塊まで。
畏き者同士の争いも多い。

・リュノスク(Lyunosk):月明かりの下にだけ行列を率いて現れ、人々を惑わせる。
・グレナキア(Glenakia):巨大な心臓形の岩石の姿。農地に豊穣をもたらす。
・エリオラ(Eliora):透明な風の存在、秘密や未来の知識を人に囁く。
・ヴィエ(Vie):死の近くに現れ詩を披露する。
・ヴァンネリ(Vanneli):夜に人々の夢を制御、一族の絆を強化。
・ルヴェナ(Luvena):子供たちを誘拐し、彼らの命を奪う。
・フィールノス(Fielnos):火と炎を操る、村々を燃やす。

== 恩寵 ==

畏き者から流れるティリオンが人や世界に特定の効用をもたらす。これを「恩寵(ヴェリャ)」と呼ぶ。
恩寵の獲得は何らかの印として現れる。

恩寵は畏き者の基準で与えられる。儀式や祭壇が多い。人類は時間をかけ畏き者の要求を見極めてきた。

恩寵は永遠ではない。畏き者の気まぐれ、儀式の質、他の畏き者の影響によって終焉を迎えることがある。
恩寵の維持にはメンテナンスが必要。

恩寵は、人間と畏き者との間の相互依存を示している。畏き者は人間からの刺激を好み、依存すらする。
人々は畏き者の力を利用して文明や社会を発展させる。

=== 恩寵の例 ===

・「病気治癒」イリタンから。条件は「毎月新月に白い花を捧げる」。
・「豊穣な収穫」コトラバから。条件は「年に一度、収穫祭を開催」。
・「金鉱探知」ギルダネから。条件は「探す前に黄金の小像を捧げる」。
・「短期間の気候制御」シュラナから。条件「天気の踊りを3日3晩行う」。
・「敵の策略を知る」ジェモスから。条件「敵の戦旗を獲得し、祭壇に置く」。

設定の続き。理解後「理解完了」と返事を。

== 人類史 ==

・古代(年代不詳 – 1年)
大陸各地に民族が存在し、独自の文化を持ちながら、集団を形成。
先古代の終わりに小規模な都市国家や集落が形成され始める。東方との少ない交流もあった。

・崇願期 (1年 – 446年)
大陸中央で原因不明の超巨大爆発とともに、突如エヴァリナが世界に溢れる。
この出来事が歴史記録の開始で、爆発の年を紀元とする慣習が生まれる。
その後畏き者たちが大陸各地に出現。人々は彼らとの関係を築くための新しい宗教や信仰を形成。
徐々に複数の強大な国家が出現。超常の研究も進みエヴァリナ学として体系化。
東方との交流は激減。

・一統期 (317年 – 584年)
畏き者たちや恩寵を巡る争いや取引が激化。多くの国や都市が興亡を繰り返す。
317年英雄ヴェランドが強大な畏き者エストラヴィンを人類で初めて滅し、シャロヴィア建国。
シャロヴィアは西半分の大半に広がり争いは激減。
畏き者の関係や恩寵の利用が整理され、文化の共通基盤が整備。
エヴァリナ・畏き者・恩寵、そして王権をまとめた信仰体系が「ヴァント」として成立。

・群王期 (589年 – 881年)
地方の勃興、継承の失敗、東方との衝突を経て、シャロヴィアは崩壊分裂。
多数の国が興亡。多くの英雄や伝説が生まれる。国力の源となる恩寵は厳重に管理されるようになる。
人間が恩寵無しにエヴァリナを操作する「フェグスター」が生まれ、恩寵なしで畏き者を殺した英雄ビテンが現れる。
離合集散して7つの地域で安定し、最後に南方がイシェッドに統一、群王期終了。

・七国期 (882年 – 現在1127年)
大陸は七つの国で一応の安定。衝突や東方との戦乱は絶えないが西方は繁栄の時代。
各国は独自の文化や恩寵の利用方法、畏き者との関係を持ちつつ、シャロヴィアの遺産の上に生きる。

== 七つの国家 ==

方言はあるが、共通語としてヴァラクシャが通じる。

アヴィスティア (Avistia)

政治:貴族制。各鉱山を管理する貴族が強い権力を持つ。
外交:ベロヴやカレニアと取引で強い絆を持つが、ノルセリアとは微妙。
文化:寒冷な地域、冬の祭りや伝統的なスポーツ。
生活:海産物と鉱山労働。保温技術や建築に特化。

ベロヴ (Berov)

政治:エルヴァントを中心にした緩やかな連邦制。エルヴァントが首都としての役割。
外交:アヴィスティアやカレニアとの鉱山取引で友好関係。
文化:河川文化が発展し、船の競技や祭りが盛ん。
生活:農業と河川を利用した漁業、水運が主。

ノルセリア (Norseria)

政治:商業王国。商業の盛んな都市が多数存在し、各都市が自治。
外交:交易相手の国々との関係は良好。アヴィスティアとは緊張関係。
文化:商業と海洋文化の融合。大きな市場や交易の祭り。
生活:農業、林業、海上交易での仕事が主。

フェダス (Fedas)

政治:神聖王制。畏き者グレナキアとの関係を重視し、王が代表として仲介。
外交:シャロヴィア正統を自負し、その他の国とは冷静な関係。
文化:豊穣の祭りや農業に関する神聖な儀式が盛ん。
生活:農業中心。聖地やグレナキアの神殿が多い。

カレニア (Grenia)

政治:集団指導制。各リーダーが集まり決定を下す。
外交:アヴィスティア、ベロヴとの鉱山取引で友好関係。
文化:山の畏き者を崇拝する文化。
生活:鉱業が主。山の畏き者との契約を祝う。

タルヴェイ (Tarvei)

政治:自治都市国家群。各都市が独自の文化を持ち、共通の元首。
外交:軍事が弱く、他国との文化交流を優先。
文化:芸術や音楽、文学が盛ん。
生活:海産物取引や芸術関係の仕事が主。

イシェッド (Ished)

政治:氏族制合議。各氏族が領土を持ち会議を開く。
外交:フェダスと長年対立。
文化:自然共生。雨林祭りや動植物崇拝。
生活:狩猟採取、雨林での生活が主。

このような初期設定作りはコンテキストウインドウの大きさに強く制限されます。限界まで設定で埋め尽くすと以降の生成に問題が出るため、ある程度の空きも必要です。もっと上限が大きければ、経済、武器、儀礼、単位、書物、叙事詩、演劇、娯楽、酒、農耕、民族、都市、集団、権威構造、戦い、呪詛、姻族、医療などなど、事典が扱う世界の設定として与えたいものは幾らでもあります。コンテキストの拡大は最も発展を期待する能力です。

検閲が強くて今回採用しなかったClaude2は10万トークンという大きなコンテキストウインドウを持つとされています。日本からの利用も正式に対応したので、次はそちらでこうした実験を考えています。

項目の生成

ここまで、同一の世界に存在しうる無数の項目を生成してもらうための下準備をしてきました。ようやく具体的な事典の項目を生成し始めます。

項目の生成には、たとえば次のような指示を行います。

事典の項目として「英雄ヴェランド」について3回に分けて生成して。


人物・出来事のについては必ず年代も織り込む。この事典の「現在」は七国期951年。
固有名詞は全てこの世界の言語法則に則る。なお理解済みの設定と矛盾があると、生成結果は破棄されるので注意すること。

解説はひとつの見出し語と一連の文章で構成され、適宜見出しを入れる。見出しはレベル2から始める。
文体や表現はである調の事典的で!重厚!な威厳ある、格調高いものに。稀に詩的な言い回しも。

評価やエピソードを扱う際は、必ず具体的な根拠を述べること。
文章は最大限長く生成する!!!

まずは1回目。弱く貧弱だったヴェランドの概要、エストラヴィンによる北部での殺戮、復讐の誓いまでを。

これはある英雄についての項目を生成する指示で、やや具体的な内容の指定も含んでいます。ChatGPTに任せたい場合はもっと大雑把な指定も使います。

事典の項目として、群王期の英雄を誰か生成して。名前はこの世界の言語で。


人物・出来事のについては必ず年代も織り込む。この事典の「現在」は七国期951年。
固有名詞は全てこの世界の言語法則に則る。なお理解済みの設定と矛盾があると、生成結果は破棄されるので注意すること。

解説は一連の文章で構成され、適宜H2から始まる見出しを入れる。
文体や表現はである調の事典的で!重厚!な威厳ある、格調高いものに。

評価やエピソードを扱う際は、必ず具体的な根拠を述べること。
文章は最大限長く生成する!!!

まずは1回目。

文体や文章構造の要件は微調整しながら共通で利用します。「まずは1回目」といった回数の指示は、その項目を長さ制御用。最大限長くといった指示は無視されることも多くおまじない程度で、回数を1回目2回目と重ねた方がボリュームは出やすいです。複数回目の結果がそれ以前と似た繰り返しにならないよう、「次は2回目。没落と惨めな最期について。」などと指定することもできます。

このようにひとつの項目を1~5回程度に分けて生成します。ある人物と、深く関連する事物などの場合は、そのまま続けて次の項目生成したりもします。ただしコンテキストが埋まってしまうため、原則はリセットして次の生成を行います。その際に関連性の高い項目の出力を入力に回して繋がりを含ませたりもします。後述しますが、必要に応じて画像生成用のプロンプトを生成させる場合もあります。

ひとつの項目が終わると、詰めた初期設定コンテキストの時点まで遡って、次の項目の生成を繰り返します。

量産の壁

こうして生成したテキストは、不自然な部分や矛盾などを修正しながらCMSに登録していきます。これでやっと量産の準備ができましたが、今回はここで時間切れになりました。なんとか30項目作った辺りで、あとは公開作業でぎりぎりとなってしまいました。

量産といっても「1000項目生成して」と頼んで済むようなものではありません。結構なばらつきと矛盾やノイズは交じるので、ひとつひとつ結果を確認する必要があります。自分で本格的に事典作りをする際は、こうした手間をAPIで減らしていく予定ですが、実費負担が大きいのは悩ましいです。

とはいえChatGPTのままこういった手法を使えば、自力で全て書き起こすのに比べて遥かに短い時間で済むのは間違いありません。今はまだ到底手書きに及ばない品質ですが、モデルの発展とアプリケーションの工夫に強く期待しています。

どう描くか

視覚表現にはStable Diffusion XLによる画像生成を用いますが、どんな絵を、どんな方法で描くか決めなければなりません。

画風の選定

まず最初の問題は、ある程度一貫した画風で行くのか、それともバラバラ多様に行くのかです。

ここでいう「画風」とは、絵画表現のそれよりも広いものです。写真なのか絵画なのかCGなのか漫画なのか、そんなところから選びます。学習した表現を再構成して導出する画像生成AIは表現が何でもありだからこその悩みです。

画風を統一する場合、揃えるべき画風の選定とそれを実現するプロンプトや設定の追求、そしてそこから外れた出力が出てしまった場合の対応とが必要です。

多様な画風を選ぶなら生成は楽になりますが、統一感の不足は避けられません。作るものによってはそれでも充分ですが、今回の事典ではあまりバラバラなのは問題です。

では統一した画風を選ぶとして、写実なのか絵画なのか、絵画ならどんな質感にするのか決めなければなりません。扱うのがファンタジーで、神と化け物のあいまったような「畏き者」という超常の存在と、人間の英雄たち、そしてまつわる景観や事物を描くのに適した表現を探します。事典であれば写真と絵画が混ざるのは妥当ですが、ファンタジーとなると違和感も強い。描き手を意識させない方が適していると判断しました。

では絵画風の統一した雰囲気をどうするか。幾つかテストを行いながら、候補を「((renaissance religious painting of a fantasy world))」としてみました。その画風の指示に、適当な英雄の項目からプロンプトをChatGPTに生成させ、SDXLで画像として生成したものがこちらです。

悪くないんですが、ちょっとクドい。写実性や筆致の細かさは非現実的な対象を描く際に足を引っ張る可能性もありますし、もう少し茫とした雰囲気が欲しい。その後も試しながら、最終的に画風の指定部分を「baroque, Impressionism painting of a (fantasy:2). concept art. dramatic. scene.」として、今度は畏き者を描いたのがこちら。

バロックと印象派を混ぜファンタジーを強めにかけたこの設定を採用することにしました。”concept art. dramatic. scene.”の部分は題材に合わせて調整しますが、基本の画風指定部分はなるべく変えません。それでも題材次第で写真的に出てしまったり、整いすぎてしまったりするため、まだまだ画風の統一は難しさがあります。

なお、どの生成AIを使う時にも指示に具体的な作家名を使うのは避けています。権利的な懸念と、また誰か風の何かを作りたくないのが理由です。幸い時代区分やアートスタイルはChatGPTでもStable Diffusionでもある程度効くので、作りたいものに合わせて削ぎ落としたり混ぜたりしながら探れます。

画像生成用プロンプトの生成

さて、画風は決めたとして今度はプロンプトの供給が課題です。ChatGPTで生成した事典の項目に適した画像を生成するには、それを描くためのプロンプトを用意しなければなりません。しかし圧倒的に時間が足りない。描くべき対象はChatGPTが一応理解しているのだから、プロンプトもChatGPTに考えてもらうべきです。

たとえば以下のプロンプトは「ヴェランド」という名の英雄について、ChatGPTに”ヴェランドを象徴する絵画の内容を、単語や熟語を羅列した短い英文で表現して”と指示して生成したものです。

Darkened sky, silhouette of seven kingdoms, lone warrior, radiant armor, echoing voices, ethereal chains, shattered sword, time-warping vortex, shadow of Estravin, triumphant stance, legacy glow, swirling winds, desolate battlefield, guiding spirits, looming Besée, eternal oath, fading sunset.

このプロンプトを元に生成された画像は次のようなものです。

ChatGPTの生成してくれた英雄のエピソードを一応描けていると思います。画像生成用のプロンプトを組み立てるコストが高いものについては、こういった方法でChatGPTに行わせて作業時間を削減しました。

画像から項目を

作品には間に合いませんでしたが「生成された画像から項目の文章を生成させる」という方法についても準備を進めました。当時はまだ画像を理解するChatGPT-4Vがリリースされていなかったため、GoogleのBardを使って画像の解説を行う予定でした。

画像生成ではプロンプト次第で幅のある出力も可能です。またプロンプト自体を微妙に変えながら生成を繰り返すことも可能です。それらを使って多様な畏き者や英雄、事物の画像を生成しておき、その画像をBardが理解した結果からChatGPTで項目の文章を生成する、という方法を考えていました。

ChatGPT-4Vが登場した今、この方法をChatGPT上で改めて試しました。入力画像は次のものです。

そして文字からの生成の場合同様のコンテキストで「これから渡す画像から事典の項目を生成して」と指示した出力がこちら。

モルガスの巨影

七国期846年 – 851年

七国期の中盤、特に846年から851年にかけて、数多の報告により確認された、巨大な影のような存在「モルガス」の出現は、多くの人々に深い恐怖をもたらした。この生命体は、巨大な樹木のような姿を持ち、その外観は闇と霧で覆われていた。一部の資料によれば、モルガスは互いに手をつなぎ、力強い絆を持っている二つの生命体であるとされる。

出現地点

モルガスが最初に目撃された場所は、ドルヴァリア山脈の奥深く、大きな湖のほとりであった。山岳地帯の静寂と冷気の中で、この生命体は突如として現れ、その存在感を放っていた。湖の水面に映るモルガスの姿は、多くの探検家や研究者を魅了した。

人々との関わり

モルガスは攻撃的な性格を持つ生命体ではなかったが、その巨大な姿と霧に包まれた外観は、人々に強い畏怖の念を抱かせた。特に夜間に現れるモルガスの姿は、その影が月光に照らされることで一層鮮明となり、近くの村々の住民たちに恐怖の夜をもたらしていた。

消滅

851年、突如としてモルガスの姿は目撃されなくなった。原因は不明であるが、一説には、彼らが持つ強力な力を持って別の次元へと移動したとも、彼らの生命力が尽きて消滅したとも言われている。

このモルガスの出現に関する事実は、後の時代に多くの伝説や物語の題材となり、人々の心に深く刻まれていくこととなった。

画像からでも文字にそう劣らない生成が出来ているようです。文字と画像と双方が必要なコンテンツでは、どちらから始めても制作が進められる柔軟さはありがたいです。マルチモーダル化が進み、音や映像や質感など入出力が多様化していけば、こうしたルートが爆発的に増えていきます。

結局間に合わなかったこの方法ですが、500枚近く生成した中には魅力的なものがたくさんあります。せっかくなのでぐっと来たものを幾つか掲載します。

画像はすでにローカルで実行しても、日に1000枚程度は十分生成可能になっています。取捨選択は大変ですが、ChatGPT-4Vのような画像の入力が可能なサービスを使って分類や評価を行う道も生まれています。LLaVAのようなオープンな実装もどんどん出てくるでしょう。

生成はWeb用に1024×1024を中心で行っていますが、設定さえ残っていれば、潜在空間を用いてもっと高解像度で生成し直すことも可能です。事典を印刷用に回したい場合も十分対応できます。

どう集めるか

生成した文章と画像は、ヘッドレスCMSのDirectusに登録することで集めていきます。

Directus

セットアップ

DirectusはいわゆるNode.jsベースのアプリケーションで、インストールも起動も非常に簡単です。公式のドキュメントではDirectusの提供するクラウドサービスを推していたりDockerで始めるよう記載があったりしますが、単にローカルで動かす場合は不要です。

Directus自身はオープンソースと謳っていますがライセンスは「Business Source License 1.1 (BSL)」です。BSLはソースコードをオープンにしつつ、それを使った競合サービスは提供できないという、営利企業によるオープンな開発の妥協点を探ったライセンスです。とはいえ今回のようにローカルで自分一人使う分には制限を受けず問題ありません。

データの保管用にSQLiteを選べるのは嬉しく、設定もほとんど.envに書き加えるだけ、起動もnpxで動かすだけです。生成AIはもちろんですが、こうしたアプリケーションが僅かな手間で動かせるようになっていることも、個人が大きなものを作れる明日を拓く重要な要素です。

モデリングと権限設定

Directusのコレクション定義

Directusでは登録したい情報を「コレクション」という形で定義します。今回の事典では記載される項目を扱うentriesという名前のコレクションを用意しました。事典としては他にも色々なコレクションが考えられますが、時間が無いので主となる記載項目のみを扱いました。

コレクションには登録するデータごとに型やUIの定義を行います。こういった所もよくあるDB付きのCMSといった感じで、癖も強くありません。ただしUIの種類は豊富でかっこいいんですが、微妙に使いにくいとは感じました。

Directusのフィールド定義

フィールドとして、項目のタイトルや本文と、カテゴリやタグを用意しました。どちらも静的サイトジェネレーターからテキストとして取得する前提で、基本設定のまま利用しています。

本来Directusはもっと複雑なコンテンツで活きるはずです。UIのタイプやバリデーションなど豊富なオプションはほとんど使っておらず、もっと時間をかけて設定を詰めれば使い勝手も違ったかもしれません。

どう組み立てるか

Directusに登録した項目から、最後はAstroを使ってWeb用のページを組み立てていきます。

下準備

Astroの始め方は非常に簡単で、最新のNode.jsが導入済みならコマンドでウィザードを通してセットアップが行なえます。Astroのチュートリアルに沿っていけば、多少この手の仕組みを触ったことのあるユーザーは十分使いこなせる手軽さです。

どのツールも親切なクイックスタート付き

レイアウトという仕組みでいわゆるテンプレート機能を実現したり、事典の項目のように動的なURLを持つ要素を”entries/[title].astro”といったファイル名で表現したりといったポイントはありますが、事典程度なら覚えることも少なく、1時間程度でほとんどの仕様はカバーできました。

Directusからの読み込み

やや手こずったのはDirectusからの読み込みです。

Astroにレンダリングさせたいコンテンツは、ローカルで動作しているヘッドレスCMSのDirectusに格納してあります。ビルド時にはこれを取得する必要があります。

この取得が当初どうしてもうまく行かず、権限設定の確認などで30分は無駄にしてしまいました。結局これはDirectus側のローカル起動用のホストが”0.0.0.0″と指定されており、Astro側で”localhost”を参照していた、という単純なミスでした。

事典の表示

Directusに登録事典で見出しなどはタグが当たっている状態なので、事典としての項目は生のテキストとして表示してやれば済みます。テンプレートエンジンに選択したJSXでは、単にテンプレートに埋め込んだだけでは生テキストとしてタグを解釈してくれないので、setでhtmlとして渡してやります。

Wiki風の自動リンク

本文中に事典内の他項目名があった場合、Wiki風に自動でリンクする処理も行いました。これも力技で解決してしまえます。項目の本文に対して、登録済みの項目名を全て並べたリストを使って走査し、リンクにすべき箇所を置換するだけです。合致した1件目だけを置換すれば事足りますし、静的サイトジェネレーターなので処理時間も大きな問題にはなりません。数十万件の項目があればともかく、数千件程度なら処理時間もそう変わらないでしょう。

引っかかったのはこの程度で、あとはひたすらそれらしいページを組み立て、スタイルを調整するだけ。少なくともこうした定型的な静的サイトについてなら、Astroはほとんど迷いなく使えます。

おわりに

以上のように慌ただしく取り組んだ結果、なんとか体裁は整えたけれど、事典としての項目はたった30件。文章や画像の品質も詰めが甘く不足も多い、作品として見れば落選も当然の状態でした。量産に入る辺りで時間切れとなったため、あと24時間あれば200件は行けたかもしれないのが残念です。しかしこうした取り組みそのものが、表現の明日を改めて考えさせてくれました。

もし2年前、自分ひとりで分厚いハイファンタジーの世界を構築し、たとえば1000件の項目があるその事典を作ろうとしたなら、それはきっと数年単位の取り組みだったでしょう。今回の方法でもまだ十分な品質には数ヶ月はかかるかもしれません。それでも途方もない挑戦だったものが、やってみるかと踏み出せる規模になってきました。

いずれこうした大量生産する個人は氾濫するでしょう。その大量に意思を徹することも、基盤の発展やテクニックで改善が進んでいきます。今はまだ雑な集まりに見えても、その質は上がり続けます。どこかに向上の壁があるはずだと考えても、人間にしか難しいとされていた出力が短期間で幾つも達成されてしまいました。

少なくない人が、今回行った工程を創作と考えないかもしれません。初期値はともかく、コンピューターの出力を選別し整え詰め込み再出力、基準に達したら条件を変え出力を繰り返し、また選別と修正。創り出される量への人の関与が圧倒的に少なくなっています。そこに思想又は感情が表現されていたとしても、これを創作ととらえられるかはまだまだ意見が分かれるでしょう。

私自身は、いずれ創作という行為への価値基準がぶれていき、創作とは呼べない多分に機械任せのこうしたセッションの産物が、やがて人にとって重みを増すのだと考えています。このファンタジー事典を作る試みは、そうしたアートの明日について、手法を解説したこの文書を含みます。そして「独自の世界事典を作って」と頼むだけで済むようになる明後日には、アートでなくなります。

ひとりで世界を作る

子供の頃から繰り返し描いてはどこかに置いてきた、世界を作るという遊び。それが、妄想よりもずっと確かな形で実現し得ることへの心騒ぎ。応募としての意味づけはともかく、それが最も表現したかったものです。

ローカルで実行できるStable Diffusionが公開された去年、最初に本格的に生成したのは架空の世界の地図と動物の銅版画でした。

架空の地図を、街や動物を、伝説を、世界の原理を、完全に自分用に作り続けてきた人が、少ないかもしれないけれど確かにいます。まだまだ拙くはありますが、いつか夢見たものが描ける可能性が見えてきました。

今後もAIを使って世界を構築する試みはどんどん登場すると思います。私もこうした事典作りなどと合わせて他にもあれこれ試しています。たとえば今、ゲーム制作へのAI活用を目指す株式会社Witchpotさんと、物語の世界を作り上げるようなツールを作っています。

生成AIはたくさんの問題も抱えていますが、それまで個人では難しかった膨大な表現を可能にしてくれるという点だけでも、途方もない魅力と可能性を感じさせてくれます。

作品等の権利について

今回紹介したhttps://qveria.allai.art/ のコンテンツ、及びこの文書中に掲載したChatGPTへの入力は、全てCC0 1.0とします。商用利用も転載も加工も一切許諾は不要です。

もしもこれらの表現があなたの著作権を侵害していると考えた場合、私のXのアカウントまでお知らせください。全ての責任はまず第一に、生成AIを利用して表現を出力し公表した私個人にあります。

第二回AIアートグランプリに応募して落選した作品の、制作の裏…