前回は、回文投稿サイト「回文21面相」の緩和規則なし回文36714個について、隣り合う2文字(バイグラム)の頻度を調べてみました。これを使うと、回文の自動生成っぽいことができるので、今回はそれで遊んでみます。
バイグラムによる回文自動生成(もどき)
バイグラムの頻度データがあると、ある文字Aの直後に別の文字Bが来る確率が決まるので、それをもとにして、回文っぽいものXが作れます。
具体的には、次のようにします。まず、(これはバイグラムのデータだけからはわかりませんが)回文の1文字目の頻度を別途調べておいて、その割合に応じて、Xの1文字目Aをランダムに選びます。(たとえば「あ」が1文字目になっている回文の割合が1%なら、1%の確率でXの1文字目を「あ」にします。)次に、バイグラムの頻度データを見て、Aの次に来る文字の頻度を調べ、その割合に応じて、Xの2文字目Bをランダムに選びます。続いて、Bの次に来る文字の頻度を調べ、その割合に応じて、Xの3文字目Cをランダムに選びます。……と、これを繰り返していきます。(このような手法を「マルコフ連鎖」と言います。)
ただ、このやり方で延々続けていっても回文にはならず、どこかで折り返し地点を決めないといけません。そこで、あらかじめ、奇数文字の回文の真ん中の文字の次と、偶数文字の回文のちょうど真ん中のところに特殊な文字(たとえば「〇」と「●」)があるとみなして、この文字も含めてバイグラムの頻度を調べておいて上記の過程を行い、特殊文字に到達したら折り返す、と決めておきます。(たとえば「たけやぶやけた」は「たけやぶ〇ぶやけた」、「きつつき」は「きつ●つき」だと思って、「ぶ〇」とか「つ●」とかも含めてバイグラムの頻度データを作っておき、上記の過程の途中で「〇」や「●」が出てきたらそこで終わりにして回文を折り返す、ということ。)
長々と書きましたが、ともかくもこうやって、バイグラムのデータから回文っぽいものが作れます。もちろん意味はまったく考えずに文字を並べているだけなので、日本語になる可能性は低いですが。試しにいま10個出してみたところ、以下のとおりとなりました。
- だまくしましくまだ
- かいなはやにいいしろうろしいいにやはないか
- んだのかいかつみちくばせじしたけたしじせばくちみつかいかのだん
- ゆうぞんさかがかさんぞうゆ
- よるよんよるよ
- かいといか
- まんきんま
- なとははとな
- やしたのむのたしや
- かくしたんものとりへくかおかくへりとのもんたしくか
ちょっと意味がわかりませんが(笑)、回文っぽい雰囲気はあると思います。
トリグラムによる回文自動生成(もどき)
先ほどはバイグラム(隣り合う2文字)を使って自動生成してみましたが、トリグラム(相続く3文字)を使うこともできます。こちらのほうがより見慣れた回文っぽい雰囲気になるはずで、実際に10個出してみたのが次のとおりです。かなり日本語っぽくなることがわかります。
- へのこいいいこのへ(「屁の濃い良い子の屁」ですね! よくわかりませんが)
- いんかわたしろののろしたわかんい(「印可渡し露のノロしたわ、簡易」でしょうか?)
- はいたおおたいは(「歯痛、おお大破」?)
- たえこのみのこえた(「耐え、好みの子得た」わかりやすいしけっこうよい)
- しんかいがきどしきせるなんだれまやかいかやまれだんなるせきしどきがいかんし(「新海が喜怒し煙管難、誰?真矢?開花や稀。暖なる咳し時がいかんし」……ダメな回文らしさが出ていていいのでは笑)
- わたしだしんさはるなになるはさんしだしたわ(「私打診さ、春何なる? 破産しだしたわ」何かわかるような気もする)
- よるくるよ(「夜来るよ」ベタなのも出してくるところがよい)
- とかいさくふうとまたまとうふくさいかと(「都会、朔風とまた纏う副菜かと」よくわかりません)
- かつしりさくがすにてをてにすがくさりしつか(「喝!尻割くガスに手を。手に酢が腐り湿か」謎です)
- たいかんそんがにがんそんかいた(「対寒村蟹、雁・孫描いた」でしょうかわかりません)
「回文21面相」の回文の文字の並びをもとに作っているので、もともとの回文のなかにはなかった文字の並びをもつものはぜったいに出てきません(たとえば「ぺ」で始まるものや、「ぞっ」を含むものはぜったいに現れません)。その意味で,まったく新しいものが得られることはありません。とはいえ、意味も文法も完全無視して文字の並びだけから考えることで、新しく面白い回文が得られることはありえそうで、そこそこ可能性のある手法なのではと思います。
コメントしようとして忘れたままになっておりました。
返信削除昔お話ししたかもしれませんが、特定の作家さんの作品群からマルコフ連鎖を作ると作風が出やすくなるのかなぁ、と大昔に妄想してました。芥川っぽい回文、とか。でもN-gramだとそうでもないのかなと思ったり。
回文でないコーパスから作る場合にどのような方法をとるべきか,という問題がそもそもありますね.ABというバイグラムの頻度とBAというバイグラムの頻度が食い違うので.頻度の低いほうをとるべきだろうか.あと,どこで折り返すかも考えねばなりませんね.
削除