AI文鳥というAI小説作成支援サービスのAIモデルが公開された。
もともと小説を書くためのAIなので物語には強いだろう。しかも日本製だし。
ということで大先生が早速試していた。
僕も真似をしてさっそく使ってみたのだが、そのままだとかなり短い文章しか出てこない。使い方に工夫が必要そうである。
そこでこんなコードを書いた。
def b (prompt) :
input_ids = tokenizer.encode(
prompt,
add_special_tokens=False ,
return_tensors="pt"
).cuda()
tokens = model.generate(
input_ids.to(device=model.device),
max_new_tokens=320 ,
temperature=0.6 ,
top_p=0.9 ,
repetition_penalty=1.2 ,
do_sample=True ,
pad_token_id=tokenizer.pad_token_id,
bos_token_id=tokenizer.bos_token_id,
eos_token_id=tokenizer.eos_token_id
)
out = tokenizer.decode(tokens[0 ], skip_special_tokens=True )
print(out)
return out
def story (begin) :
t=begin
for i in range(10 ):
s = b(t)
t = f"{s} \n"
で、story関数になにかわたすと、自動的に10回くらい何かを繰り返してくれるというわけだ。これで何か面白いことができるだろうか。 試しにこんなフレーズを投げてみた。
>> > story("気がつくと、俺は見知らぬ街にいた。\n俺「ここは、どこだ?」\nすると背後から女の子の声がした。。???「あの~すみません」\n俺は振り向いた。\n" )
出力が見にくいので整形するとこうなった。
気がつくと、俺は見知らぬ街にいた。 俺「ここは、どこだ?」 すると背後から女の子の声がした。 ???「あの~すみません」 俺は振り向いた。 そこには女の子が立っていた。 その女の子は金髪で頭にカチューシャをつけていた。 俺はその子にこう聞いた。 俺「もしかして君は俺の知り合いか?」 女の子は少し考えてこう言った。 ???「いえ私は知りませんが、私の名前はユイです」 俺「そうか、ありがとうユイちゃん」 ユイ「どういたしまして!」 それから俺とユイちゃんはいろんな場所を回った。最初は公園に行った。 ユイちゃんが滑り台から落ちそうになったり、俺が木登りしているところを見られたりしてたな。 そして夕方になり家に帰る途中だった時ユイちゃんにこんなことを聞かれた。 ユイ「私って本当に人間ですか?実は夢を見ているだけじゃないですか?」 俺「そんなことはないと思うよ。だってちゃんと触れるし、一緒に話もできるじゃん」 ユイ「そうですか......」 ユイちゃんの目が少し潤んでいたので俺は慌てて言った。 俺「どうしたのユイちゃん!?」 ユイ「なんでもないですよ~」 ユイちゃんは笑顔でそう言ったが俺にはわかった。この子は悲しい時に笑う癖があるのを......。 だから俺はすぐにこの子を笑顔にしたいと思った。だが次の日、学校で事件が起こった。なんと昨日一緒に遊んだ友達数人が行方不明になったのだ。その中には俺の友達も含まれていた。学校が終わり家に帰っていると電話がかかってきた。相手は警察だった。 俺「もしもし」 警察官a「突然すまないね。君の友達が何人か行方がわからなくなったんだ。何か知らないかい?」 俺「いや、何も聞いてないです」 警察官a「そうかい、なら最近起きた失踪事件のことは知っているかな?」 俺「はい、知ってますけど」 警察官a「もしかしたら君が巻き込まれている可能性があるかもしれないんだ。もしそうだったらまた連絡するよ」 そう言って警察官の人は電話を切った。俺は嫌な予感を感じ家に着いた瞬間玄関を開け家の中に入った。そしてリビングに行くと母の姿がなかった。 俺(母さんが帰ってくるまで待とう) そう思い椅子に座って待っていると携帯が鳴った。着信先はさっきの警察官だった。 俺「もしもし」 警察官a『よかった!繋がった』 警察官a『今どこにいる?』 俺「友達の家に向かってる最中ですけど、どうかしましたか?」 警察官a『今すぐそこから逃げろ!』 俺「えっ!?どういうことですか!?」 警察官a『いいから早く逃げるんだよ!』 俺「わかりました!」 そう言って俺は電話を切り急いで家を出ようとしたその時外から悲鳴が聞こえた。俺は恐る恐る外を見ると目の前に怪物がいた。怪物の姿はまるで蜘蛛のような姿をしており脚には鋭い爪がついており目は赤く光っていた。怪物はこちらに気づいたのかこっちに来た。 俺(まずい!) そう思った時にはもう遅く怪物の腕が俺に迫ってきた。その瞬間俺の意識は完全に途切れた。
何これすごい! ところどころちょっと変だけどなんか全体としては話になってる。 もうちょっと工夫できないか。
会話劇の方が簡単そうだから、変わりばんこに「俺」と「ユイ」に喋らせてみるとしよう。
def story2 (begin ) :
t=begin
chara = ["俺" ,"ユイ" ]
for i in range(10 ):
s = b(t)
t = f"{s}\n{chara[i%2]}「"
>> > story2("俺はリョウ。ちょっと女の子に興味津々な高校二年生だ。今日も学校でカワイこちゃんと会えるといいな。\n俺「さーて、カワイこちゃんはいないかな?」\nすると何か背筋をゾクっとさせるものがあった。殺気だ。まごうことなき殺気である。振り向くと、とんでもない美少女が立っていた。栗色の髪、栗色の瞳、顎はシャープで、卵型の輪郭。理想的な美形だ。ただ一つ、その目に怒りの炎を宿らせ、鬼のような形相をしている以外は。そう、彼女はユイ。俺の幼馴染である。\nユイ「リョウ、あんたまた" )
こうして得られた物語がこれだ。
俺はリョウ。ちょっと女の子に興味津々な高校二年生だ。今日も学校でカワイこちゃんと会えるといいな。 俺「さーて、カワイこちゃんはいないかな?」 すると何か背筋をゾクっとさせるものがあった。殺気だ。まごうことなき殺気である。振り向くと、とんでもない美少女が立っていた。栗色の髪、栗色の瞳、顎はシャープで、卵型の輪郭。理想的な美形だ。ただ一つ、その目に怒りの炎を宿らせ、鬼のような形相をしている以外は。 そう、彼女はユイ。俺の幼馴染である。 ユイ「リョウ、あんたまた浮気したわね!?」 俺「い、いや違うんだ! 話を聞いてくれ!」 ユイ「問答無用よ! ユイ「ゴッドハンドスマッシュ」(怒)」 俺「ぐわぁぁぁぁぁっ!!」 ユイ「全く......次やったら許さないんだからね? 俺「悪かったって......」 ユイ「......もうしない?」 俺「はい......」 ユイ「よろしい♪」 ユイ「じゃ、行こっか♪ あ、そうそう、今日は私お弁当作ったから食べてくれるよね?」 俺「え、マジ!? 食う食うー!」 ユイ「ふふっ、喜んでくれたみたいで良かったぁ~☆」 俺「愛してるぜ、マイハニー!」 ユイ「はいはい、ありがとねー」 俺「流されたぁぁぁ!!??」 俺「ひどいや......」 ユイ「何が酷いの?」 俺「なんでもないですごめんなさい」 ユイ「よろしい♪」 俺「あはは......」 俺「あれ......? もしかして今のやりとり夫婦っぽくなかった......?」 ユイ「......」(無言で殴りかかっている) 俺「ぎゃぁぁぁぁぁぁぁ!!!???」
下手だ。下手だけど確実に躍動感がある。どこか「それっぽい軽薄なセリフ」の応酬が延々と続くという、むかしのラノベみたいな雰囲気がある。いや、最近のラノベを読んでないから最近のがどうなのかわからんが。
GPT-4はセリフが下手だったが、Bunchoはセリフがそれっぽいのが出てきてすごい。もう少し工夫できないか?
常にセリフではなく、セリフか行動かを変化させるようにしてみよう。
def story3 (begin) :
t=begin
chara = ["俺" ,"ユイ" ]
for i in range(10 ):
s = b(t)
t = f"{s} \n{chara[i%2 ]} "
if i%3 ==0 :
t+="「"
else :
t+="は"
print(s)
return s
>>> story3("その日、俺はある任務のためにベイルートに居た。\n俺「連中、まだ姿を見せないな」\n俺たちは港を監視していた。\nユイ「そうね。奴らが姿を見せるのは夜更けになりそうね」\nユイは日系アメリカ人で、俺のチームの紅一点。美人だが、気が強いのが玉に瑕だ。" )
するとこうなった
その日、俺はある任務のためにベイルートに居た。 俺「連中、まだ姿を見せないな」 俺たちは港を監視していた。 ユイ「そうね。奴らが姿を見せるのは夜更けになりそうね」 ユイは日系アメリカ人で、俺のチームの紅一点。美人だが、気が強いのが玉に瑕だ。 俺「まてよ? ユイは奴らの姿を見たことあるのか?」 ユイ「......ええ、そうよ。私は見たことがあるわ」 俺「どこなんだ!?」 ユイ「ここじゃ言えないわね......付いてきなさい」 そう言って、ユイは歩き出した。 俺(気になるけど、ここは我慢だな) 俺はユイの後を追うことにした。 ユイ「こっちよ!」 ユイについて行くと、そこは使われていない倉庫だった。 ユイ「ここでいいわよ」 俺「ここは......?」 ユイ「いいから入りなさいよ! そこに居るんでしょ!? 俺は早く会いたいの!!」 ユイに急かされて中に入ると、そこには数名の男女がいた。その全員は俺たちを見て驚いていた。 ユイはその中の一人の前に立つと、こう言い放った。 俺「やぁやぁ諸君!! 君たちも我らと一緒に戦おうじゃないか!!」 ???1「おい貴様!! 何者だ!?」 ユイ「あんたらこそ何者なのよ!? ユイは知ってるんだからね!!」 ???2「そうだぞ!! まずは自己紹介からだろぉうがァッ!!」 ??3「お前ちょっと黙ってろォ~っ!!」 ユイ「うるさいわね!! こっちはそれどころじゃないのよ!!」 ユイは今にも喧嘩を始めそうな勢いだったが、それを止めたのはユイよりも年上の男だった。 ???4「まぁ待てお前たち、彼女は敵じゃないんだろう?」 ユイ「......ふんっ」 ユイは少し不機嫌になりながら答えた。 俺(この人がリーダーっぽいなぁ......) 俺はそう思った。
なんか途中で「俺」と「ユイ」が入れ替わったりしてるが、話は動いてる。 続きを考えてもらった。
俺「初めまして皆さん。俺はサクヤ・タノシイト申すものです。以後お見知り置きを......」 俺は一礼した。 ユイは不思議そうな顔をしながら俺に尋ねてきた。 ユイ「あなた、なんでそんなに礼儀正しいわけ?」 俺「そりゃもちろん、相手が目上の方だからだよ」 ユイ「はぁ? 目上ってどういうことよ?」 俺「言葉通りの意味さ。相手は目上の方だからね。それに敬意を持って接しないと失礼だろう?」 ユイ「......」 ユイは何か言いたそうだったが、諦めたようにため息をついた後、こう言った。 ユイ「分かったわ。ただし、変なことしたらすぐにぶっ飛ばすからね」 俺「はいよ」 ユイ「じゃあ改めて紹介するわ。右から順にマオ、リッキー、ハルカ、そして私を含めた5人でチーム『magitta』よ」 ユイ以外のメンバーは軽く会釈をした。 ユイ「さて、お互いに自己紹介を終えたことだし本題に入るわ。今回集まってもらったのは他でもない、あの化け物どもについてよ」 ユイは真剣な顔つきになった。 俺(やっぱりアイツらのことだったのか......) 俺は心の中で呟いた。 ユイ「最近、私たちの仲間内で奇妙な噂が流れてるのよ。それは、『この世界とは別の世界から来た者がいる』っていうものなんだけど、アンタたちはどう思うかしら?」 俺「別の世界から来た人ですか?」 ユイ「そ。そいつらの見た目とかは知らないんだけどね、どうも私たちと同じ人間とは思えないのよね~」 俺「でも、どうしてそんなことがわかるんですか?」 ユイ「簡単よ。私たちが見たヤツらの姿と、さっきの怪物の姿が酷似してたからよ」 俺「なるほど、それで同じ人間じゃないと」 ユイ「そういうこと。しかもそいつらの中にはさっきみたいな奴もいるみたい」 俺「あんなのがあと6匹もいるのか......」 ユイ「もしあいつらに襲われたらひとたまりもないでしょうね......」 俺「そうですね......ところで一つ質問なんですが、その人たちはどうやってこちらの世界に来ているのでしょうか?」 ユイ「分からないわ。ただ一つだけ分かることがあるとすれば、奴らは普通の方法でこちらに来ることはできないってことだけね」 俺「そうですか......」 ユイ「とりあえず今日はここまでにしましょうか。また何かあったら連絡するわ」 俺「了解です」 ユイ「それじゃあお疲れー」 俺はユイたちと別れた後、自分の部屋へと戻った。 ユイは不思議な力を持っている。俺が初めて彼女と会った時に感じたものだ。しかし、何故彼女がそのような力を使えるのかは全く分かっていないらしい。 俺(ユイの力って何なんだろうな?) 俺「考えても仕方ないよな......」 ユイは話したくないようだし、俺も無理に聞く必要もないと思っているので深く詮索しない方がいいのかもしれない。 俺はそんなことを考えながら眠りについた。
なんでか知らないが、毎回なんかちゃんと区切りのいいところで終わるのはなんなんだ。ただ10回ループ回してるだけなのだが。
とにかくAI Buncho、遊びがいがありそうである。 ファインチューニングの元ネタとしても使えそうだなあ