シナリオの自動生成について

シナリオの自動生成については、 このあたりをちょっと試してもらうのが 良いかもしれません。

私は何をしたいのか

まず、私がシナリオ自動生成にどういうことを期待しているのか から書いておきます。

やはり第一に、その目的から書くべきでしょう。 もちろん最終的な目的は、出力をそのまま実際のセッションに使えるような シナリオを自動的に作ることです。 しかし、実際に考えてみると、シナリオの創作には非常に多くのことがらが 関わっています。それは、シナリオ著者の個人的体験などという いわばシナリオ外部のことがらだけでなく、 シナリオ内部においても、その中のさまざまな部分が関連しあい 互いに影響を与えあっているのです。 残念ながら、現状の私の能力ではそれらまで自動的に考慮する シナリオ自動生成プログラムを作ることはできません。 試しにこれでも見てください。 出てくるものは非常に単純なものだけなのですが、 それでもこのプロット用の辞書はかなり複雑になってしまっています。 シナリオ内での関連を考えずに、とにかく作るというものであれば 非常に簡単にできますが、それではおかしな、どうしょうもないもの しか出てこないのです。 もちろん、それを、人間の想像力を助ける呼び水として使うことは できるでしょうが、それは私が最終的な目標としての目指しているものでは ありません。 もっと時間をかけて、考察を進めていけばもっと良い方法が思いうかぶという 思いと手がかりは有るのですが.....。 というわけで、まず目標は目標として置いておきます。

シナリオ自動生成とシナリオ・プール

では、目標はそれとして、現実的にはどういうことを考えているかという 点に移ります。

まず、そもそもなぜシナリオの自動生成をしたいと思うようになったのか ですが、理由は簡単、自分で0から考えるのが面倒だったからです。 というのも、まずRPGにおいてシナリオを作るのは原則としてGMでしょう。 もちろん、GMとは言ってもシナリオの作成だけにかまけているわけにはいきません。 彼には彼の私生活などが有るからです。 ですから、シナリオ作成にかける時間はできるだけ少なくしたいわけです。

ここで、「シナリオを0から自分で考えるのが面倒」という場合、 2種類の対処方法が有ると思います。 なお、言うまでもないことですが、これは私のような横着者だけについての 話ではありません。 色々な事情で「シナリオができていないのに、セッションが近づいてくる」 というような場合も有りうるでしょう。 そういう、広い意味での「自分で0から考えるのは面倒」 という場合を考えていると思ってください

さて、対処方法の1つは、 「それなら色々な人の作ったシナリオをプールしておこう」という方向で、 もう1つが「それならシナリオを自動的にコンピューターにでも作らせれば良い」 という方向です。 前者が「シーンのプール」とか「アイテムのプール」などの、 「シナリオのパーツのプール」とかに、考えを進めることもあるでしょう。 また、後者に至る前段階として、 「何とかシステマティックにシナリオを作れないだろうか?」 という段階も有るでしょう。 その場合、同じシステマティックにやるならコンピューターに載せた方が楽という 発想から、私は上記のような考えに至ったわけです。 もっとも、おそらく思い至っていると思いますが、 「システマティックにやる」というのと「コンピューターに載せる」という のの間には多少のギャップが有ります。 これについては、また後で触れましょう。

いずれにせよ、ちょっとこのあたりをまとめてみると、

               「自分で0から作るのは大変」
                          |
           +--------------+--------------+
           |                             |
           V                             V
  「シナリオのプール」        「システマティックにシナリオを作りたい」 
           |                             |
           V                             V
「シナリオのパーツのプール」  「コンピューターで自動生成」
もちろん、こののちそれぞれの方向でさらにいろいろと細かい話が できると思います。

さて、上の図(?)を見ていただくと分かると思いますが、 下の段では互いに関連しあえます。 いったんは分離したように見える方法論が、 その考えを先鋭化するとともに、再び歩みよってくるわけです。 もっとも現時点で、私が作っているものは、 まだそれほど両者を歩み寄らせているとは言えませんが...

で、私としては上記のいずれの方法も有効だと思います。 ただ私個人の好みから、やはり自動生成からの方向で、 遊んでみたいと思うわけです。

自動生成の限界

さて、自動生成でも、人間が手作業で作るほどのリナリオを作れるように なれば文句は有りません。 しかし、現実的にはそれはかなり難しいのです。 コンピューターで自動生成するためには、 何らかの方法でシナリオの概形を最初から与えておかなければなりません。 人間であれば、そのような概形が与えられても、必要に応じて無視したり いろいろとやっていけるでしょう。 しかしコンピューターの場合は、与えられた概形を越えることはできません。 そこで、その概形としていかに質の良いものを与えるかが問題となります。 ここでプロップのファンクションなどに関連が出てくるのですが、 そのあたりは、これを参照してもらうとしましょう。 ただ、どうやるにせよ、与えられたシナリオの概形を越えるものは 作れないという点だけが重要なのです。

具体的に言えば、 私の場合であればプロップのファンクションと呼ばれるものを参考にして 行なっています。 しかし、実際に行なわれているシナリオを見ると、 このプロップのファンクションの守備範囲外の構造に もとづいているシナリオも多くみうけられるのです。 あるいは、シナリオのパーツを組み合わせるという方向で考えてみれば、 とうぜんプールされているもの以外は、コンピューターには組み合わせ られるはずもありません。

さて、どうやっても自動生成されるシナリオには制限が付くことは 明らかです。 では、次の問題は、「制限が付くならば、やるのは無駄か?」という 点です。 私としては決して無駄ではないと思います。 それは、元々の(現実的な意味での)目的が、 多少なりともGMのシナリオ作成作業における労力の軽減を目指すものだからです。 自動生成によって作られるシナリオは、型にはまった、 正直な話、面白くもなんともないものばかりでしょう。 より正しく言うと、シナリオとさえ呼べないものでしょう。 プロット、もしくはスケルトンと呼ぶべきものが限界だと思います。 しかし、それではあってもGMの作業の軽減はできるはずです。

ここで、目的が「面白いシナリオを作る」というものであったなら、 先に挙げた制限から、その目的はほぼ実現が不可能もしくは非常に難しいと いう結果になるでしょう。 しかし、私の目的は、「GMの作業軽減」という程度にすぎません。 言わば、「質」を得るのはとりあえずあきらめているわけです。 そうなれば話は簡単です。 とにかくどのような形であれ、GMの想像力を誘うようなものが 作れれば良いのです。

もっともだからと言って何でランダムにやってしまえば良いという わけにもいきません。 場合にもよるでしょうが、私個人の経験から言うと、 それでは訳がわからないものが出てくるだけで、 あまり想像力を刺激するとは良いがたいからです。 むしろ、みすぼらしいものではあってもそれなりに 理屈の通りそうな筋になっていないと、想像力が刺激されないのです。

人間の関与

さて、「システマティックにやる」のと「コンピューターに載せる」 の違いですが、結局その過程に人間が関与できるかどうかという問題です。 コンピューターに載せた場合、出力が出てくるまで人間は関与のしようが 有りません。 例えば、サイコロを振って、いろいろな設定を行なう場合を考えてみれば、 この違いは明らかです。 人間がサイコロを振る場合(振る作業そのものはコンピューターにまかせても 構いませんが)、その結果から表引きなどで内容を引き出すところで 「なぜ?」というような疑問が現われ、それを元にして さらに自発的に(おそらくは「システマティックに...」というのとは 矛盾しますが、思い付きで)新しい表を引くこともあるでしょう。 つまり、作業途中から肉づけが行なわれているものと思えば良いでしょう。 それに対しコンピューターに載せる場合、その 「作業途中での肉づけ」が行なわれることは有りません。 コンピューターが行なった作業結果をまとめてズンとつきつけられるだけです。

このように「システマティックにやる」との「コンピューターに載せる」 のは一見すると同じように見えるかもしれませんが、 実際にはまったく異なる作業になります。

原理的な話

というわけで、ここからは、自動生成の原理について 考えてみます。

まず第一に思い浮かぶ方法は、(1) 例えば起承転結のそれぞれに対応するようなシーンというか イベントなどをカードに書いておき、 1枚づつ抜き出していくという方法でしょう。 これは、いわば逐次的にシナリオ作成を進めていくような方法です。

これは一見簡単そうに見えますが、 実は以外にむずかしかったりします。 というのも、起承転結に対応するようなイベントなどを 集めるのが大変なのです。 また、単純にランダムにカードを抜き取るだけですから、 できあがるものはムチャクチャなものになるか、 あるいはそれを避けようと思えば それぞれのカードはかなり抽象的な内容にならざるをえないと思います。 おそらくは「起承転結」というのと同程度に。

次に思いつくのが、(2)「何が、どうした」という形式の 例えばカードを何枚もつくっておいて、 それからポンと1枚抜き出すという方法です。 カードも純粋に「何が、どうした」という形式にこだわる ことはありません。 「何が、なぜ、何をした」というようなカードでも構わないでしょう。 これは、まずシナリオの概形を決めてしまう方法と言えるでしょう。 もっともこれも、最初の例と同じ問題、つまりカードを作るのが 面倒という問題があります。

両者ともそれぞれに長短が有ります。 前者の場合、できあがるものがムチャクチャなものになりやすいものの、 シナリオを逐次的、また気持だけですが細かく作っていくので、 できあがったときにはそれなりに具体的なものになっています。 後者はまさしく前者と反対に位置する方法で、 長所短所ともに逆になります。 つまり、できあがる(と言ってもカードを1枚引くだけ)ものは、 矛盾はないはずですし、その逆にできあがるものは かなりおおざっぱなもののはずです。

また前者か、各シーン(例えば「起承転結」のそれぞれ)において どのようなことが起きうるかということを考えておけば、 その組み合わせにおいてかなり多数のプロットもしくはスケルトンを 生み出せる可能性が有ります。 それに対し後者は、カードの枚数しかスケルトンは現われえません。 ただし、前者はできあがりがすでに多少なりとも具体的になっている のに対し、後者はかなり抽象的でしょう。 これは必ずしも後者が前者に劣っているということではありません。 おそらく人にもよるでしょうが、 前者はすでに生み出されるプロット自体が多少なりとも具体的なため、 言ってしまえばそこで生み出されるシナリオ以外には作成できないと 言っても良いでしょう。 それに対し後者は、提供されるプロットが抽象的であるがため、 そこから生み出されるシナリオはかなりの数にのぼるはずです。 ですから、いずれの方法であろうと、結果的にはおそらく 同程度のプロット作成(支援)能力を秘めているものと考えています

ここで後者は「シナリオのプール」と同じものだということが 分かると思います。つまり「何がどうした」ということしか 書いてないカードでやるから問題なのであって、 始めからきっちり書かれているシナリオから選ぶなら、 上に書いた問題もなくなるわけです。 ただしその場合、抽象的に(もしくは概形のみが)書かれたカードには あった具体化の作業中にあらわれるであろう多様性は失われてしまいます。

では、それぞれを更に有効な方法とするべく考えてみましょう。

まずは(1)の方法だが...

さてと、(1)の方法、つまり「起承転結」ごとにカードを引いていくという 方法です。 この問題点は「起承転結」ごとに脈絡無しにカードを引いていくことでした。 ならば、例えば「起」のところで「XX」というカードを引いたら、 つぎの「承」のなかのそれに対応するグループからカードを引いて........ というように、それ以前に決定されているさまざまな制約により、 同じ「承」「転」「結」の中でもグループ分けし、 制約によって示される適切なグループのカードを引くようにしたらどうでしょうか。 (1.1)

実は、この方法が私のscena1でとっている方法です。 もちろん、「起承転結」ではなくプロップのファンクションという ものにもとづいて作業が行なわれていますが。 実際のところ、これをカードだけでやるのはちょっとつらいものがあります。 しかしコンピューターならいくらでも条件を覚えておけますから、 この方法はまさにコンピューター向けと言えるでしょう。 またscena1はかなりいいかげんなものですが、 しっかり作れば、そこそこのシナリオ(プロット)は作れるようになると思います。

またこの亜種(?)としてエージェント指向的なものも作れるかもしれません。 もっともそのエージェントの行動管理には、やはり「起承転結」的な 流れを使わなければならないでしょうし、 また実際のセッションにおいてはPCという乱れが入り込んでくるため、 本当に閉じたエージェント指向的というのは無理が有るかもしれません。

次に(2)の方法を考えてみるが...

(2)の方法は、「何が、どうした」というプロットもしくはスケルトンの 形態で書かれているカードを選び出すという話でした。 考えてみたのですが、これの発展というのが難しい。 方向性としては、先に書いていたような、シナリオ・プールという方向への 発展しか思いつきません。このあたりについては、 ここあたりを見てください。

もっとも、まったく思いつかないというわけでもありません。 (1)の方法との区別がつきにくいのですが、 先に挙げた「シナリオのパーツのプール」という方向です。 これは、シナリオにかぎらず、シーンやアイテムやNPCをシナリオを 構成するパーツとしてとらえ、とにかく蓄積しておき、 シナリオ作成の時にはそれらを見ることで アイディアを得ようというものだと言えるでしょう。 いわゆるNet.Bookと言われているものはこの方向性で進んでいるものと 思います。

ただし、何でもためておけば良いかというと、そうでもないと 思うのです。 うまく検索できるような機構が必要だと思うのです。 つまり、ベタ・ノートではなく、データベースとして管理されれば、 より検索など実際に必要な時に使いやるくなるのではないでしょうか? このあたりの話がこの話に つながっていきます。

というわけで自動生成の話に戻る

ここまでで挙げた方法は原始的ながらも、使い方によっては 非常に有用である、シナリオ作成支援の方法です。 ここでは、もっと高度な方法を考えてみます。

で、今私が考えているのは、 まず第一に「現状の私の頭の中に有ることだけでは完全な自動生成は無理」 でるということ。 そして「完全な自動生成が無理なら、補助をできるだけでも良いだろう」 ということ。 さらにScena1を作った経験から「やはり人間の思いつきやひらめきを 利用しない手はない」ということ。 つまり、現時点では、やはり人間のひらめきとコンピューターの 記憶容量および計算の速さを結び付けていくようなシステムが良いだろう ということです。 このことからScena2というものを作りましたが、 User Interfaceがいまいちでちょっと使いにくいものになっています。 この、インタラクティブな方向が進化(?)の一つの方向でしょう。

結局のところ、シナリオという物語の一種が、どのように作られて いるのかがまったくの謎につつまれています。 ある人は、人間の脳には物語回路とでも言うべきものが有ると良います。 しかし、それだけで物語が作られるわけではありません。 さまざまな知識や経験が必要になるはずです。

では、様々な知識をデータベースにぶちこんでいけば、 シナリオの自動生成ができるようになるのかというと これがまたかなり難しいとしか良いようがありません。 例えば、"ナイフ"一つとってみても、それは武器であり、美術品であり、 日用品でもあります。 それぞれに用途も違えば、人間(もしくはナイフを使う者)との関わり方も 違ってきていますし、その影響を与える対象やその与え方も違っています。 世の中にあるものすべてにそのような属性を付けたうえでデータベースに 登録していけるでしょうか? また、シーンのプールがなされたところで、 シーンとシーンのつながり方の条件(各シーンでの必須の登場人物や、 物語としてのつながり方の条件など)を付けたうえでデータベースに 登録していけるでしょうか? これらが可能であるならば、おそらくより完全に近い自動生成も 可能でしょう。

しかし、今のところそれらはかなり難しいと言わざるを得ません。 例えば、人工知能(私の知っているのは主に自然言語処理)の研究においては、 言葉のなかに現われるさまざまな概念を表現するために、 様々な概念マップを作り出しています。 それはおそらく研究者ごとに異なっていると言えるでしょう。 もちろん、それはその研究者の主眼がどこにあるかにも依存する問題です。 しかし、これまでかなりの年月をかけてなされてきている それらの研究においてすら、 一般的な概念マップは作られていないのです。 また、仮に作られていたとしても、それらを操作する論理体系が まだまだ充分ではありません(論理体系というよりも、 これもまた知識と考えた方が良いかもしれません)。

たとえば(一般に何と呼ばれていたのかは失念してしまいましたが)、 次のような話が有ります(記憶違いがあるかもしれません)。

という知識をコンピューターに与えて推論をさせたところ、 そのコンピューターは自殺してしまったそうです (言葉のあやです。実際にコンピューターが自殺したわけではありません。 推論結果として、自分を打つと推論しただけの話です)。

また、人間には連想という能力が有ります。 しかも「どのような経過の連想であるのか」が自分自身に分からないことも ままあるでしょう。 そして、シナリオ作成のときには、おそらくはひらめきの元として その連想が行なわれているものと思います。 そのような連想にかんするデータまでをデータベース化できるでしょうか? もちろん、連想に関してのデータも入力すれば良いということも言えますが、 はたしてそれが現実的でしょうか? あるいは記述内容からのシソーラスにより、連想をまねるということが できるかもしれません。

いずれにせよ、今の私には手にあまる作業です。 工学者の守備範囲からははずれるかもしれませんが、 いずれは手をそめてみたい分野ではあります。