マルコフ百合連鎖で最強の百合ポエム生成

概要

マルコフ連鎖で百合ポエムを生成したいよ~~~

TL;DR

TL;DR(Too Long, Don't read)
長すぎるから読まねえよの意味。翻って、最低限ここは読んでくれの意思も込めてる。

この記事を簡単にまとめると、

  • マルコフ連鎖という文章生成の手法を用いて百合ポエムを自動生成したよ
  • 百合漫画にある百合ポエムを使って学習したよ
  • 意外と上手くいったよ(結果の章を見てね)

という感じ。 百合漫画のポエム(以下で定義)って初めて見るものでもどこか見たことあるような気がするので、自動生成してもそれっぽい百合ポエム生成されるんじゃね?という考えのもとでやってます。ちなみに「マルコフ連鎖」という言葉でひとまとまりなのでタイトルの「マルコフ百合連鎖」はおかしいのだが、語呂で百合を挟んだ。
これは学生百合サークル連合アドベントカレンダーの記事であり、私が所属する東京大学百合愛好会の冬コミ用の記事でもあります。

この記事では文章生成の章:『マルコフ連鎖でポエム生成ってなに?』は説明を省略しているので、気になる方は東京大学百合愛好会が冬コミで出す本を読んでください(ダイレクトマーケティング)

マルコフ連鎖ってなに?

離散的マルコフ過程」のこと。

離散的ってなに?→とびとびなこと。
マルコフ過程ってなに?→マルコフ性をもつ確率過程のこと。
確率過程ってなに?→時間変化する確率変数のモデル・時間的に変動するシステムの状態を数学的に書いたもの(正確な定義は確率過程とか確率微分方程式の本を参照)。株価とかは確率過程でモデリングされる。
マルコフ性ってなに?→確率過程の持ちうる特性のひとつで、未来の状態が過去の状態にのみ依存するというもの。N個の過去の状態に依存する場合(ただし過去の状態について飛ばしはないものとする)、N階マルコフ過程といい、単にマルコフ過程という時は未来の状態が現在の状態のみに依存するN=1の時のN階マルコフ過程のことを指す。これは単純マルコフ過程とも呼ばれる。

結局どういうこと?→時間変化に応じて状態が確率的に変動するものについて、未来の状態が現在と過去の状態にのみ依存するような特性を持つものをマルコフ連鎖とよぶ。ただし時間変化は離散的であるものとする。

マルコフ連鎖の有名な例としてブラウン運動を紹介する。数式入るので飛ばしてもらっても構わない。
ブラウン運動マルコフ性を持つウィーナー過程で記述される。その特性を簡単な例としてブラウン運動にしたがって運動する粒子で説明する。いま、時刻$t$におけるその粒子の位置を$\left(x(t),y(t)\right)$と書く。ブラウン運動では、単位時間後$t+\Delta t$における粒子の位置$\left(x(t+\Delta t),y(t+\Delta t)\right)$は現在の位置と正規分布に基づいて定まる。式で説明すると、ある確率分布(正確には正規分布)に基づく乱数$X_R,Y_R$を生成して、 $$x(t+\Delta t) = x(t) + X_R$$$$y(t+\Delta t) = y(t) + Y_R$$と書ける。これは確かにひとつ先の未来の状態が現在の状態にのみ依存しており、マルコフ性を満たしている。実際にこれをシミュレーションした結果が次図。

f:id:suiso_tomu:20211215222453g:plain
ブラウン運動

図から、ランダムではあるものの突然全然関係ない点に移動することはなく、ある程度近くにランダムに移動していっている様子が確認できる。これが簡単なマルコフ過程の例である。

百合ポエムってなに?

やがて君になる』でいうと1話冒頭の

少女漫画やラブソングのことばはキラキラして眩しくて 意味なら辞書を引かなくてもわかるけど わたしのものになってはくれない

とか台詞にはなってないモノローグなどの文を百合ポエムと呼ぶ。私が勝手に呼んでる。

マルコフ連鎖でポエム生成ってなに?

マルコフ連鎖は上の物理的なシミュレーションだけでなく、文章の生成などの応用もされている。マルコフ連鎖文章生成の有名な例は、しゅうまい君とか。彼(彼?)のツイートもマルコフ連鎖で生成されている。

文章に応用する際は、文章を形態素で分ける。ここで形態素とは、言葉について意味を持つ最小の単位のこと。英語だったら単語ごとに分けていると思ってよい(接頭辞も派生形態素と呼ばれるが接頭辞を分割するところは見たことがない)。ここで文頭→文末と時間が流れるとして各形態素に時刻を与えて、文頭→文末で、各形態素が直前の形態素に依存して確率的に生成されるとして文を生成していく。この確率過程をマルコフ過程にしたものがマルコフ連鎖による文生成モデルである。例として、「吾輩」という単語が冒頭に来た場合、直後に来る言葉は何かしらの助詞になるだろう。例えば「は」とか「が」とか。「は」なら、その次に来る単語はおそらく多くの日本国民なら「猫」とか「ケロロ軍曹」とかになるのではないだろうか。勿論それは学習する文章によるが、そのようにして一単語ずつ一つ前の単語に基づいて確率的に文を生成することができる。

本稿では、この手法を用いて百合漫画に出てくる百合ポエムの自動生成を行った。(この章の説明は省略されています。冬コミのほうをよろしくお願いします。)

やったこと

マルコフ連鎖文生成のコードは既に存在するもの(からあげさんのコード)を用いた。

また、データとしてはやがて君になるの百合ポエムを用いた。正直なところこのデータを集めるのが一番面倒だった。1巻から8巻まで全てのモノローグを書き起こした。もし欲しい方がいらっしゃればテキストデータを提供します。

また、ポエムについて、文と文につながりがあるものの表現上は離れて描かれているもの、上の例では別々の吹き出しに書かれていた

少女漫画やラブソングのことばはキラキラして眩しくて
意味なら辞書を引かなくてもわかるけど
わたしのものになってはくれない

の扱いにやや困った。これらの文は内容的に繋がっているので、読点「、」などで繋げてもよかったが、そのつながりの間に句点では表現できない何とも言えぬ感覚・間隔があり、読点では雰囲気が壊れると思ったので、日本語の全角スペース『\u3000』を挟んだ。

また、固有名詞「燈子」や「侑」は、「燈子先輩」→「先輩」、「侑」→「彼女」という風に置き換えた。なるべく一般的なものが良かったので。

結果

生成した文を紹介していく。ただしここでは本家に存在しない文のみを選んできた。

早速1つ目

  • 少女漫画やラブソングのことばはキラキラしてないんだよ

そんな......

という冗談は置いておいて、上手く生成されたものたちを以下に箇条書きする。

  • 握られたままの手が 世界で一番優しく見えた
  • あと少し もう二度とひとりにはならないで
  • ましてや恋人なんて 先輩にも秘密だ
  • 先輩が 世界で一番優しく見えた
  • 先輩と一緒にいるのかな なんてやっぱり言えないけど
  • 一時の気の迷いだった あの人がいてくれてよかった
  • あと少し もう二度とひとりには戻れない
  • 私と同じだとしたら もうちょっとだけ踏み込みたくなる

それっぽ~~~~い!!百合漫画で見たことありそう!!!1つ目とか情景も浮かぶ。3つ目は「私」と「恋人」と「先輩」の三角関係っぽいものが見えてきそう(幻視)だし、4つ目5つ目6つ目と繋げるとかなり不穏になってきそう~~~(ここまですべて妄想)

終わりに

意外とそれっぽい結果が出てきて感動した。それぞれの生成ポエム毎にそれぞれのバックグラウンド・関係性・光景が見えてくる。これ使って生成したポエムをお題にして百合小説とか漫画とか作ったり百合妄想作る企画とかできそう。もしかしたら弊会で百合妄想バトルするかもしれません。そしたらまた記事で公開します。よろしくお願いします。

あと完全版を冬コミで出る予定の東京大学百合愛好会の本に載せるのでよろしくお願いします。