生成AIをゲーム開発の現場で活用している筆者が、ゲーム内テキストの作成、中でもいわゆるRPGの村人たちのセリフの生成を一から行う流れを解説します。第2回は、データを大量に作るところから改善すべき点まで。
第1回はこちらです。
大量に出力しよう
ここからは人物単位でチャットを開始してセリフを生成します。とはいえ各人物の設定は、まだ名前や家族関係、年齢と社会的地位しかありません。もう少し肉付けをしないと、セリフに一貫性が出ません。
試しに商人の妻ディアナを使って、まずは人物像を生成させ、続いてセリフを生成しましょう。
ディアナの場合
これまでの設定をまとめた入力に続いて「ではディアナについて、人物像を詳細に設定してください。人物像は現実的に、良し悪しを交えて。」と指示します。
ディアナは、ネビルの農村で商人サリクの妻として知られている30歳の女性です。彼女は村で最も魅力的な女性の一人として広く認知されており、その美貌は訪れる商人や旅行者にも評判です。しかし、彼女の美しさに目が行きがちですが、ディアナの本当の魅力はその知性と商才にあります。
ディアナは商人としての夫をサポートすることで、自身も経済的な洞察力と交渉スキルを磨いてきました。彼女は村の外での取引にも積極的に関わり、新しい取引のチャンスを見つけ出すことで家族の生計を支えています。そのため、彼女は村の経済活動において重要な役割を果たしています。
一方で、ディアナは時に自分の意見を強く主張する傾向があり、これが近隣の村人や他の商人との間で小さな摩擦を生むこともあります。彼女は自分のビジネスセンスに絶対の自信を持っており、他人の意見や提案を軽視しがちです。このため、一部の村人からは少し傲慢と見なされています。
ディアナはまた、家庭においても献身的な母親であり、8歳の娘ベリルに良い教育と価値観を伝えようと尽力しています。彼女は娘に対して非常に保護的であり、ネビルの農村という比較的安全な環境で育っているにもかかわらず、娘を過剰に心配することがあります。これは、ディアナ自身が若い頃に経験した困難から、娘にはより良い未来を望んでいるためです。
ディアナの人物像は、その美貌と知性、ビジネスでの成功と家庭での役割のバランスを示しながら、彼女の性格の複雑さと現実的な挑戦を描き出しています。彼女の物語は、ネビルの農村のコミュニティにおける彼女の重要性と、個人としての成長と挑戦を浮き彫りにします。
これぐらいの人物像があれば、セリフにも大きな間違いは起きにくいでしょう。
「では姫の救出、ひいては魔王の討伐という無謀な冒険に出たばかりの主人公に対する、ディアナのセリフを生成してください。口調は人物像にしっかりと合わせ、主人公に対する反応も性格から最大限現実的に定めてください。 まずは何気ない挨拶や、村の日常的な話題に関するものを20件。」と入力してセリフを生成します。
「おはよう。今日も朝から忙しいわ。あなたも早起きね。」
「また新しい顔ね。旅の途中?この辺りで必要なものがあったら、言ってちょうだい。」
「この季節は野菜が豊富でね。特にカボチャが美味しいわ。試してみる?」
「昨夜の風は強かったわね。作物に影響がなければいいのだけれど。」
「あなたも火祭りの準備で忙しいの?私たちも、毎年楽しみにしているのよ。」
「子供たち、毎日元気に走り回っているわ。あなたも子供の頃はそうだった?」
「うちの夫、商売でまた遠出するの。いつも心配なのよね。」
「あら、新しい冒険者?ここは安全だけれど、外は危険がいっぱいよ。気をつけて。」
「最近、近隣の村との交易が増えてきたわ。それにしても、交渉は難しい。」
「今日はいい天気ね。でも、こんな日は仕事が進まないわ。」
10件の抜粋ですが、なかなか良さそうです。続いて「村の紹介や自身の情報に基づくセリフ」「打ち解けた後のセリフ」「主人公が村に破滅をもたらした場合のセリフ」「ほとんど知らない魔王や姫についてのセリフ」を各20件、合計100件分生成しました。
それぞれ5件の抜粋です。
「ネビルの農村へようこそ。ここは小さいけれど、とても温かいコミュニティよ。」
「私たちの村は、不毛の大地の中で一筋の緑。みんなで力を合わせて守っているの。」
「商人の妻として、近隣の村や商人との交易を取り仕切っているわ。何かあったら言って。」
「私の夫はサリク、この村で商売をしているの。いつも忙しくてね。」
「私たちの村は、毎年冬至に火祭りを開催するの。古代の英雄を称える大切な儀式よ。」
「あなたとの話はいつも新鮮ね。村での平穏な日々に、少し刺激が加わるわ。」
「実はね、私も若い頃は冒険に憧れたものよ。でも、今はこの村が私の場所だってわかってる。」
「あなたの冒険話、本当に心躍るわ。でも、無茶はしないでね。心配するから。」
「夫とは商売の話で頭がいっぱいだけど、あなたとはもっと色々な話ができて嬉しいわ。」
「ねえ、次に村を訪れるときは、もっと長く滞在してくれない?みんな、あなたのことが好きよ。」
「何をしてくれたの!ここは私たちの家よ。どうしてこんなことに…」
「あなたを信じていたのに、なぜ?私たちの村に何が残るっていうの?」
「こんなはずじゃ…あなたがもたらすはずだったのは希望だったのに、なぜ破滅を?」
「あなたのせいで、私たちの生活は台無しよ。これからどうすればいいの?」
「私たちはあなたを受け入れ、信頼した。それなのに、どうしてこんなことに…」
「魔王についてはほとんど聞いたことがないわ。ただ、彼の影響は遠くまで及んでいるらしい。」
「姫がさらわれたって?可哀想に…でも、私たちにはどうすることもできないわ。」
「魔王のことは、古い伝説の中でしか聞いたことがないの。実際のところはどうなのかしら。」
「あの姫には特別な力があるって聞いたけど、本当かしら?だとしたら、なぜ魔王は…」
「魔王が本当にいるのなら、私たちの平和な生活はいつまで続くのかしら。心配よ。」
▲ChatGPT上での実際の対話はこちら
用意した世界や村の設定を踏まえつつ、極端におかしな出力はなさそうです。生きた村人というにはあまりに硬いですが、ゲーム次第では十分使えるでしょう。
他の村人でも全く同じ手順でセリフを生成しました。
長老エルマリクの場合
農民アリアンの場合
鍛冶屋オリヴァンの場合
4人分400件のセリフ生成にかかった時間は15分程度でした。ゲーム最序盤のいわゆるモブキャラたちにはひとまず足りる品質でしょう。この内容でこの分量を書き起こすのに比べれば、生成時間はほとんど無視できる規模です。
生成したセリフはこのままゲームに使えるわけではありません。設定との矛盾を含むもの、文章としておかしなもの、単語の選択が不自然なものなどの除去や修正が必要です。そうした後処理を含めたとしても、なおかかる時間は圧倒的に短いでしょう。
改善しうる点
品質には改善点が色々ありますが、同じ設定で大量の村人の大量のセリフという要件は、どうしても個々の質を下げます。またLLMに限らず現状の生成AI全般が、その出力に8割以上の品質を求めるのが難しいという根本的な課題があります。主人公が重要なシーンで吐く珠玉の一言なら、今はまだ確実に、書き起こした方が早いでしょう。
それでも大量に一定の要件に収まる言語表現を短時間で用意できることの価値は大きく、また今回の例でも改善点はいろいろ考えられます。
関係の明示
たとえば不足していた主人公との関係。設定には主人公がどのように村や住民と関わるのか、情報がありませんでした。そのためセリフ中、住民が示す態度の一貫性がなく不自然です。
たとえば「主人公は姫の手がかりを求め村にやってきた。村でよそ者は警戒されるが、主人公の身なりや目的、経歴から、毛嫌いはされない」といった条件を加えれば改善するかもしれません。セリフの状況に幅を持たせ、教師のミランで試してみましょう。
初対面時の警戒心を持ちつつも、興味を示すミラン
「あなたがここに来た理由を聞かせてもらえますか?姫を救い、魔王を討つだと…。それは大それた話ですね。私たちの村に何ができるというのですか?」主人公の経歴を聞いた後、少し尊敬の念を抱き始めるミラン
「なるほど、あなたの背景を聞いて少し納得がいきました。ただ、理想だけでは生き残れません。あなたの計画には具体性が必要です。」主人公が村の子供たちに基本的な剣術を教えているのを見たミラン
「あなたの技術は見事ですね。しかし、子どもたちに剣術だけでなく、それをいつ使うべきかを教えてください。力は、正しく使うことが肝心です。」主人公が村のために何か手伝いを申し出たときのミラン
「あなたの申し出に感謝します。私たちの村も助けが必要な時がありますからね。あなたの力が、私たちの共同体にとって何をもたらすか見てみましょう。」主人公が村での日々を通じて信頼を築いていく中でのミラン
「あなたが村のために尽くしてくれたこと、私たちは忘れません。姫を救う旅、本当に成功させたいのなら、私たちも協力しましょう。」主人公が過去の戦いの話をするときのミラン
「あなたの経験は、この荒廃した世界で生きる私たちにとって、大いなる教訓です。過去から学び、未来に生かす。それが私たちのすべきことです。」主人公が一時的に挫折を感じているときのミラン
「挫折は、成長するための糧です。あなたの目的を見失わず、前に進み続けてください。姫のためにも、私たちの世界のためにも。」主人公との深夜の談話中、人生観を共有するミラン
「私たちの生きる世界は厳しいものです。しかし、希望を持ち続けることが、私たちを前に進ませる力になります。あなたの旅が、その希望の光となることを願います。」主人公が旅立つ前日、助言を与えるミラン
「明日は新たな旅の始まりですね。忘れないでください、どんなに遠い道のりでも、私たちの思いはあなたと共にあります。姫を安全に、そして確実に連れ戻してください。」主人公が旅に出るとき、別れの言葉を述べるミラン
「あなたの旅路に祝福を。そして、どうか安全に。私たちの村、そしてこの世界に平和をもたらすために、あなたの勇気が報われることを願っています。」
▲ChatGPT上での実際の対話はこちら
なかなか良さそうです。セリフにおいては話者間の関係を規定する表現が含まれないと、結果が不安定になりやすいのでしょう。関係情報はひな形に含めるべきです。
村人の人物像
個々の村人はセリフ生成前に人物像を膨らませていますが、どうも薄っぺらさが気になります。世界や村の設定、そして職業など社会的位置がむき出しというか、人物の内的な世界の介在が見えません。
これは膨らませる段階で個人性につながる情報が不足していて、各人の人間性が背景設定頼みになっているからだと考えられます。個人を膨らませているのに、膨らませる元が少なすぎるため、情報量の多い背景に紛れてしまい、皆似通った観念で塗りつぶされてしまっているのです。
各人の膨らませる段階を、個々の新規チャットで行っているのも問題です。今のChatGPTでは同じコンテキストで異なる何かを描かせると、その結果はある程度の範囲に収束してしまう傾向が強く出ます。「美しい物語を」と別個に何度頼んでも、ベタベタした似た構成が表れ続けてしまいやすいです。
これを防ぐには、バリエーションを持たせたい対象の生成は一度にまとめて行う方法があります。つまり全村人の、名前や年齢、性別や社会的位置以外の情報を、ある程度一括して生成させます。これにより一括した人物間での似すぎた出力を防止できます。恐らくその方が文章として妥当だからでしょう。
世界や村の設定に続けて「以上が理解できたら、エルマリクの一家について、各人の性格、口調、セリフ例、世界観、美点欠点などを現実的且つ個性的に設定してください。」としてみました。
エルマリク (長老, 男性, 78歳)
性格: 知恵があり、落ち着いている。村の平和と繁栄を何よりも大切にする。過去の経験から多くを学び、若者に知識を伝えることに情熱を注ぐ。
口調: 落ち着いた口調で、話すときは常に考えながら話す。尊敬語を使い、他人を大切にする態度を示す。
セリフ例: 「我々の村は数多くの困難を乗り越えてきた。お互いを思いやり、協力し合うことが我々の力だ。」
美点: 深い知恵と経験、人々を導く能力。
欠点: 時に保守的で、新しい変化を受け入れるのが遅れがち。
サリア (長老の妻, 女性, 74歳)
性格: 慈悲深く、家族思い。村の若者たちにも母親のような愛情を注ぐ。料理と裁縫が得意。
口調: 優しく、温かみのある口調。誰に対しても丁寧で、慈愛に満ちた言葉遣い。
セリフ例: 「あなたが元気でいることが、私の一番の幸せよ。いつも健康に気をつけて。」
美点: 慈悲深さ、手作りの料理や衣服で人々を喜ばせること。
欠点: 心配性で、特に家族の安全について過保護なところがある。
カリム (息子, 男性, 45歳)
性格: 実直で勤勉。村のために一生懸命働き、家族を支えることに誇りを持っている。少し頑固な面も。
口調: 真面目で、直接的。家族や仕事に対する責任感が強く、その話題になると熱が入る。
セリフ例: 「一日一日を大切に、我々の手で村をより良い場所にしていこう。」
美点: 強い責任感、家族への深い愛情。
欠点: 時に頑固で、新しいアイデアに対して開かれていないことがある。
ナリア (カリムの妻, 女性, 43歳)
性格: 社交的で明るい。村の人々との交流を楽しみ、家族の団結を大切にする。
口調: 親しみやすく、時に冗談を交えながら会話する。誰とでもすぐに打ち解けることができる。
セリフ例: 「笑顔は最高の薬よ。困ったときこそ、お互いを助け合わなくちゃ。」
美点: 人懐っこい性格、困難な時もポジティブな姿勢。
欠点: 時におせっかいと感じられることがあり、プライバシーに対する配慮が足りないことも。
ジェノン (孫, 男性, 20歳)
性格: 好奇心旺盛で冒険心が強い。新しいことを学ぶことが好きで、村外の世界にも関心がある。
口調: 若々しく、情熱的。時には無邪気な発言が飛び出すことも。
セリフ例: 「世界は広いんだ。僕たちにはまだ見ぬものがたくさんある。夢を追いかけよう!」
美点: 高い好奇心と学ぶ意欲。
欠点: 時に現実感が欠け、理想と現実のギャップに苦しむこと。
レヴィア (孫, 女性, 18歳)
性格: 思慮深く、感受性が豊か。村の自然や人々の幸せに深い関心を持ち、詩や絵を描くことが趣味。
口調: 穏やかで、詩的な言い回しを好む。話す際には、感じたことや考えたことを丁寧に表現する。
セリフ例: 「この大地には、まだ見ぬ美しさが沢山隠れている。私たちはそれを見つけ出す旅人なのかもしれない。」
美点: 豊かな感受性、芸術への愛。
欠点: 現実の問題に対して消極的なところがあり、時に行動に移すのが遅れがち。
▲ChatGPT上での実際の対話はこちら
口調の情報など、セリフに直結する部分でバリエーションが出ています。入力段階で単語など簡単な個性の指示を加えれば、もっとばらけさせることも可能でしょう。こうした階層を挟んでいくことで、最終出力を要件に沿って豊かにできます。
その他の改善しうる点
たとえば今回のセリフでは、世界設定にある大筋しか物語が登場していません。しかしRPGではロールプレイによって編まれる物語が不可欠です。この村で生じるイベントを定義し、そのイベントに対し各人がどう反応するかはゲームとして必要でしょう。
村人間の関係の露出がセリフに少ないのも不足です。人物の詳細生成時に盛り込むことで、より関係が登場するようになり、社会を認識しやすくなるでしょう。
主人公の状態への反応、時間と季節、不和や問題、経済、資源や欲求など、盛り込んで改善できそうな点は他にも色々あります。コンテキストの大きさという制約もあって全ては盛り込めませんが、ゲームの要件に応じて設計し、収まる範囲なら十分投入可能なテキストを生成できると考えています。
まとめ
今回のように大量の創作的テキストを生成するのは、かなりゲーム的な要求です。小説でも漫画でも基本は入念に設計された物語を構成する文章が必要であって、読まれるかも分からない大量のテキストにあまり出番はありません。他に必要とするのは事典のような形式で世界を作る場合ぐらいかもしれません。
プレイヤーが掘り起こすことで世界を体験する濃度が変わる類のゲームでは、名文ではない無数の表現が必要です。これまでそうしたゲームを個人や小規模なチームが作ろうとすると、テキスト制作は厚い壁のひとつでした。ChatGPTに限らず、生成AIはそうした壁をかなり薄くしてくれる可能性を持っています。
なお今回はコストと分かりやすさ、手早さのためにChatGPTを利用しましたが、実際にゲーム制作で利用するには効率が悪すぎます。コンテキストに込める文章の生成はChatGPTで行っても、コンテキストを組み上げたりセリフのバリエーションを生成したりする部分には、APIを使いツールを作るべきでしょう。
私は今、Glimnoteという世界の設定や人物の関係を生成AIを使いながら構築するサービスの制作に関わっています。一方で個人の実験としてゆっくりですが、今回のような生成をもっと柔軟に行えるツール作りも進めてきました。ゲーム配信プラットフォーム最大手が生成AIの利用そのものは拒絶しなくなったことで、こうしたツールは今後たくさん登場するだろうと考えています。
生成AIに関する社会の衝突は起き続けていますが、多様で大量の既存の表現から柔軟に新たな表現が導出できるという技術そのものは、いずれゆっくりと全体に受容されていくのではないでしょうか。そうした日を意識しつつ、ゲーム制作や世界を作る遊びへの応用を試し続けていこうと思います。