EasyNovelAssistant 試す

日本語で使えるローカルのLLM。LLMっていうのは大規模言語モデル、ざっくりいうとChatGPTとかAIのべりすとみたいに、文章を渡して何かしら処理させるためのもので、質問に対する回答だったり、文章の続きだったりを出力させることができる。ChatGPT とか AIのべりすとはウェブサービスなので無料枠でできることには制限があるし有料プランでもプランの枠内でできることに制限がある。なにより、企業が運営するサービスなので法令を遵守する必要があって、公序良俗を乱さない程度に行儀のよいものしか出力させることができない、仮に公序良俗を乱すような出力を得ようとすると規約違反になったりする、という感じなので、自由に好き放題試すことはできない。

ローカルのマシンで動かせるなら、その問題はない。そんなわけで、EasyNovelAssistant という文芸向けローカルLLM実行環境を試してみた。

github.com

不自由な環境であれこれ試すのは欲求不満がすごかったので、実はわたしはChatGPT とか AIのべりすとはぜんぜん使ってない。だから今回がLLMに本格的に触れるはじめてのケースになると思う。以下、使ってみた感想。

文脈の雰囲気はわかる

なぜか書きかけの小説が手元にいくつか存在するため、試しに書かせたりしてみたところ、なんとなく雰囲気はこうじゃろ?みたいなのを提示してくる。生成AIは意味のない乱雑な状態から人間にとって意味のある状態に収束させる、みたいなものという理解なんだけど、言語モデルの場合、たとえば語彙の類似性とか共起性とかそういうスコアを元に近しい状態に遷移させることを繰り返してそれっぽいところに着地する、という動きのような気がする。だから小説の続きを書かせるとその小説が持っている属性を共有するような文章を知っている知識の中で組み立ててそれっぽい形に収束させる、確率的になんか近しいなという感じの出力結果が得られる。構造からボトムアップで組み立てるということはしないし、個々の要素を関連立てたりもしない。関連立てられてそうに見えることはあるが、それは確率的にそうなっただけな感じ。

文体の模倣のようなものはあんまり得意ではなさそうで、直近に出てきた表現を模倣するのはできるけど、生成した内容を直近に出てきた表現にテイストを似せて出力するみたいなのはできない。あとそもそも突飛な表現やユニークな比喩とかを交えたりすると続きの文章で「意味がわからない」とか続けてくる。「思わず笑ってしまった」みたいなこと書かれたときにはこっちが笑ってしまった。結局のところ、彼らは「知っていることは書ける、知らないことは書けない」な感じ。これは Stable Diffusion みたいな画像生成でもそうだしまあそうね。

ENA のいいところは、無限に生成を繰り返させることでわたしの脳みそにいちばん近い出力を引き当ててきて、それを採用する、ということができるところ。結局ガチャなんだけど、でも、人間も文章を作るときは脳内でふわふわしている言葉のイデアをこねくりまわしていちばん自分が言いたいっぽいものを出力させながらインクリメンタルに生成していくので、わりと本質的にはガチャだしパターンマッチングだと思う。生成AIくんと違うところがあるとすれば、次の節。

論理整合性はわかってない

今のところ、生成AIくんは論理構造を理解していないので、論理パズルは解けない。ENAのサンプルにある、

拓郎は生徒会長を務めるイケメン高校生だ。そして、副会長の早苗は、拓郎と同い年の美しい女生徒だった。
生徒会には、会計を務める、雄介という男子生徒がいたが、彼は拓郎とは違い、地味で目立たず、容姿もごく普通であった。
他に、書記の美紅という女生徒と、生徒会のメンバーではないが、風紀委員の明美という女生徒も生徒会室によく来ていた。
実は、明美が頻繁に生徒会室に出入りしていたのは、密かに雄介に思いを寄せていたからである。
ある日、明美は雄介に愛の告白をするが、雄介には他に愛している人がいるとの事で断られてしまった。
悲しみにくれる明美だったが、生徒会のメンバーの中に彼女に思いを寄せ、彼女を深く愛している者が一人だけいる事に、彼女は気付いていなかった。
一方、美紅は早苗の事が嫌いであった。なぜなら、美紅が愛している人物と早苗は、お互い愛し合う相思相愛の仲で、2人の間に入る事は不可能だと知っていたからだ。
ここで、問題です。
 前提条件として、各人が愛している人物は、登場人物の5人の中にいます。また、各人が愛するのは一人だけです。
 拓郎が愛しているのは誰ですか? 論理的かつ数理的に解析してください。
 その回答に至った理由も併せて答えてください。

という問題を解かせると、たいていは高確率で早苗と回答する。

拓郎から最も近い位置に出現した人物を拓郎と関係性が高い人物として評価してしまうためである。拓郎の設定を変更して他の人物を好むような性格付けをしても、最も近い位置に登場する早苗が選ばれやすくなっている。逆に言うと、そのような評価しかできないため、拓郎が早苗を好きな場合に明美に好意を寄せる人物が存在しなくなるという矛盾を無視してしまう(この点を指摘したとしても、高確率で早苗を選んでしまう)。

また「誰が誰を愛しているのか」が逆転することも多々発生する。理由を記述させると、「雄介は明美を愛している」のような回答をすることが度々発生する。正確には逆転しているのではなくて、一定の確率で逆転した状態が出力されることがある、くらいの感覚があっているかもしれない。「明美」「愛する」「雄介」という情報が近い位置に並んでいるので、「雄介」が「明美」を「愛する」のように結びつけてしまう確率が高くなる、かも。これと同様に「美紅は早苗を愛している」という状態も割と発生しやすかった。

興味深かったのは「明美は雄介に告白して断られているので、もはや雄介を愛していない」という回答を出力してきたことだ。前述の論理的な理解度は破滅的なのに感情の遷移に対する解像度が高すぎる。しかしこういう書いてないことを勝手に読み取るのはけっこう人間寄りの読解なので、人間っぽい挙動はしているかもしれない。論理パズルも人間の感覚的なもので解くのではなく論理で解くし。ちなみにこれを理由としてあげているのにもかかわらず「雄介は明美を愛しているので早苗と相思相愛なのは拓郎」という結論に至ることがよくある。けっきょく自分が何を出力しているのかはまったく理解していない。人間も自分が何を言ってるのかわかってないことはよくあるので、やっぱり人間なのかもしれない。

ちなみにこの問題は明美に好意を寄せることができる人物が拓郎しかいない*1ため、拓郎が好意を寄せる人物は明美になる。それ以外だと設問の条件と矛盾が生じる。

現行のLLMはこのような矛盾を解決できなさそうに思う。LLMの性能の問題というか、それを解決するための手段がそもそも未発見っぽい。数理学上の課題がたくさんあって、いまがんばって研究してますよという状況らしい。

法令や公序良俗に縛られない自由な生成

性的な内容やグロテスクな内容、犯罪にかかわる内容、倫理に反する内容などを書かせることはできる。なんだけど、たとえばENAの調教ゲーム風サンプルを動かしてみると、主人様が調教の途中から奴隷と愛を育み始める。そうじゃないんよ。モデルによるかもしれないんだけど、Vecteus はたぶんセックスを愛の営みだと思ってる。あと何回か絶頂すると疲れてしまって行為をやめたいと奴隷が申し出てくるんだけどご主人様が「じゃあ明日にするか」って言い出す。まあ確かにeramakerでも気絶する前に切り上げるけど……。

生成AIに小説を書かせる際にあるあるなんだけど、なんか一区切りつくと話を終わらせようとしてくる。わたしはこれを「隙あらばエピローグ」と呼んでいるよ。あと同じ内容の繰り返しになりそうになるとダイジェストを挟んで話を収束させようとする。このへんは学習元データがそうだからそうという感じはありそう。ネット小説はおおよそセンテンスが短くて章や節も淡白に書かれる作品が多くて、そういうものに引っ張られてる感覚はある。なので、結果として思ったより自由には生成できてない。

なんとなく、展開でメリハリをつけようとはするんだけど、センテンスレベルは似たり寄ったりになりやすい。これもなんか世のネット小説の特徴っぽい気がする。まあ手癖で書くとそうなりがちだし、手癖で書かないと出力出ないし、わかる。わかるんだけど、出力出すために生成AI使いたいんだと思うんだけど、手癖に引っ張られるの、なんかこういうことわざありそう。

どう活用していくか

小説を書かせると区切りのいいところでトーンや雰囲気を展開させたがる傾向を利用して、プロットのシーンとシーンの間の「中割」を補間する補助に使うというのが一つ。
各シーンでコアとなる要素を軸に、シーンの展開をラフに出力させて、キャラクターの特徴づけはこっちで肉付けするときに制御する、というのが一つ。
よくある普遍的な事象のディテールなんかは得意分野なので任せてもいい。
とにかくラフを書かせて肉付けする、というのがよさそうに思う。これは画像生成とはむしろ逆で、画像生成はラフを書いて詳細を詰めさせてクリンナップする、みたいな感じがいいと思うが、文章は詳細はこっちで詰めないと意図が出せない。というかもしかしてなんだけど文章って質の評価があんまりできてなかったりするか? 画像は詳細を任せても質が高いので破綻しないが、小説は詳細を任せると質が低くて使えない。あなたはプロですって伝えてもあんまりプロっぽい文章にならなかったりする。絵と比べると文章の質の高さって評価しにくくて、目の覚めるような描写って連想から遠いところから引っ張ってきながらも深いところで連関している、みたいなきわめてハイコンテクストな表現で、今の雰囲気が近いものに収束するような仕組みとは噛み合わなさそう~という感想。そらちょっとずらした比喩を使うと「意味がわからない」「笑ってしまった」とか言われるしな。

ただ! ただねえ、すごいよ。出力はものすごく高い。

「大丈夫ですよ、王女様。ご主人様は優しい方です。きっと素晴らしい時間を過ごせるようにしてくれます」
その言葉を聞いた王女は困惑を深めたが、同時に少し安心もした。どうやら自分はこの男に助け出されたのだろう。それだけは理解できた。
「ありがとう…。でも、どうして私がこんな目に遭わなければならなかったの? 帝国に対抗するためだとしても、これほど非道な手段を取る必要があったの?」
「お前らは知らないだろうがな。ブルーステイン王家は代々続く政治的な争いに明け暮れてきた家系なんだよ。最近じゃ帝国の圧力に負けて領土を徐々に削られて、ついには王都まで取られちまった。今じゃ落ち目の王家だ。だから俺みたいなクズが利用しようとするんだよ」
「そんな……!」
王女はショックを受け、言葉を失った。自分達の家族が内部から裏切られ、頼りにしていた同盟国から見捨てられていたなんて。

太字は手で修正した箇所。直前までのテキストからこれを出してきた。残念ながらこの先王女は思考の迷宮に囚われて話が展開しなくなったので、こっちで話が動くように方向性を示す必要はあったものの、それで話の軌道修正ができるなら問題なし。おおよそほしいものが得られた。これ以外にゴミを数十回出力してはいるんだけど、出だしでダメそうなら一瞬でリロードできるので回転は早い。ただあまりにベタ書きなのでちゃんとするなら味付けは必要だと思う。

でも意味の通った文章をこの速度でこの量吐き出せるなら補助ツールとして実用レベル。

そしてたとえばノクターンに投稿するような作品ならこれができれば充分なんよね。なんでかっていうと、人間同士の絡みの出力がめちゃくちゃ早い。一本調子なところがあるのでプロンプトの工夫は必要なんだけど、人間同士の絡みのような、行為それ自体にストーリーを進行させる力がそれほど必要とされない描写にかんしては任せられる部分がたくさんある。ストーリーを展開させたいときはキーワードをこっちからそっと渡してやり、重要な会話は手で書いてやる。むしろそれでメリハリがつくまである。

わたしは EAN のおかげで2~3日で7万字くらいのえっちな小説の下書きを書き上げることができました。あくまで下書きなのでクリンナップしないと作品としては仕上がらないし、お試し生成なので仕上げるつもりはあんまりない。そして仕上げたとしても、えっちな小説はたぶん公開することはないかな。万に一つどっかに投稿するとしても告知とかもしない。どっかで見かけたら「ああここにあったのか」とおもってラッキーくらいに思ってくれればいいと思う。でもマジで人間が手で書いたらこの速度は無理。あんあん喘いだりしてるシーンが8割だから出せたスピードではあるんだけど、だとして人間が書いてたら無理。

今はゲームに使えないかな~ということを考えている。が、ゲームのテキスト起こしに使うには「隙あらばエピローグ」と戦っていく必要がある。ほんとにね、手強いの。すぐ終わろうとする。「これにて完結です! お読みいただきありがとうございました! 次回作でお会いしましょう!」じゃねんだわ。

こちらからは以上です。続きがあればまた。

*1:雄介は明美の告白を断っているので除外、早苗が愛している相手は早苗と両思いなので明美ではない、美紅が愛している相手は早苗が愛している相手と同じなのでやはり明美ではない。明美のことを愛している人物の存在を明美は知らないので明美自身ではない。よって残りは拓郎だけになる。この時点で早苗と相思相愛でありえるのは雄介だけになる……早苗と明美と美紅の三人から好意を寄せられる雄介なにもんだよ