LoginSignup
13
10

More than 5 years have passed since last update.

深層学習とマルコフ連鎖による短歌自動生成Ver.0.10

Last updated at Posted at 2018-02-04

短歌自動生成だと星野しずるが有名ですが、あれはランダムに単語をつなげてその面白さを味わうもの。ここでやろうとしているのはランダムではなく、既存の短歌を学習してそれっぽい短歌を出力するというもの。
結論、今のところ、星野しずるの足元にも及ばない。

学習データ

  • http://www.twimemachine.com/
    • 短歌ボットを指定して、著名な短歌を取得
    • 日時やタグなどをテキストエディタで除去
    • tanka.txt として保存
    • 現在4,278首を取得 まだ全然足りないと思う

深層学習

Chainer

夏の夏といふ答えので回る夏夏夏児
夏の夏といふ答えので回る夏夏ひかり
夏の夏といふ答えので回る夏夏夏夏夏
夏の夏といふ答えので回る夏の夏についてひらか夏
夏の夏といふ答えので回る夏夏夏夏ひかり
夏の夏といふ答えので回る夏の夏の夏ってひらか
夏といふ夏についてわから夏の夏って答えので切れ夏
夏の夏といふ答えので回る夏について運ぶけれどすぎ夏
夏といふ夏についてわから夏の夏って答え夏といふ書き
夏といふ夏についてわからけれどいけ夏にて変わるのでやら夏
夏の夏といふ答えので回る夏の夏について夏ってひらか
夏の夏といふ答えので回る夏夏夏について運ぶ
夏といふ夏についてわからけれどいけ夏の夏といふ答え夏
夏といふ夏についてわからごとき夏を答えのでやら夏
夏といふ夏についてわから夏にて運ぶ夏の夏について答え
夏の夏といふ答えので回る夏の夏についてひらかけれど終わら
夏といふ夏についてわから夏の夏って夏について答えので切れ
夏といふ生き夏の夏について答えので回る夏の夏
夏といふ生き夏の夏について答え夏の夏ってひらか
夏の夏といふ答えので回る夏について夏の夏ってひらか

確率が高い順に出るとのことだが、上位は意味をなしていない。下位になるとそれ風のが出るが、単に「夏」を繰り返しているだけ。学習する短歌数が足りないのだと思う。生成する文書の長さは指定していないが、学習させた短歌の長さとほぼ同等のものが生成された。品詞の並びを学習し、文書の最後となるパターンまで学習しているからと思われる。

  • 「オレンジ」、「少女」、「雨」、「風」と4単語を指定すると
風の少女へ知っながらいくオレンジ少女風雨
風の少女へ知っながらいくオレンジ少女ふゆ
風の少女へ知っながらいくオレンジ少女風吾オレンジ
風の少女へ知っながらいくオレンジの少女よりさめ風
風の少女へ知っながらいくオレンジ少女風吾ふゆ
風の少女へ知っながらいくオレンジの少女の風よりなら
風として少女へしれオレンジの風について育てどもいく少女
風の少女へ知っながらいくオレンジについてさめちゃいっ風
風として少女へしれオレンジの風について育て少女という燃え
風として少女へしれながらいる風について育てどいくオレンジ
風の少女へ知っながらいくオレンジの少女より風についてさめ
風の少女へ知っながらいくオレンジ少女風よりさめ
風として少女へしれながらいる風のオレンジについて育て少女
風として少女へしれらしいオレンジを書いながらいける風
風として少女へしれオレンジを育て風の少女についてしい
風の少女へ知っながらいくオレンジの少女よりさめど出す
風として少女へしれオレンジの風について少女より知っちゃいく
風としてなれ少女のオレンジへ知っながらいく風の少女
風としてなれ少女のオレンジへ知っ風の少女より呼ん
風の少女へ知っながらいくオレンジについて風の少女よりさめ

……だめだめです

  • 課題
    • 学習する短歌数を増やす
      • 単語の意味を見るword2vecだけは短歌で学習させるのではなく大量に取得しやすい別の文書で代用する 
    • 後述、マルコフ連鎖と組み合わせる

TensorFlow

マルコフ連鎖

  • ざっくりとした仕組み
    • 短歌を単語レベルに分ける
    • 単語と単語のつながりを計算する
      • マルコフ連鎖とは、例えば過去2語のつながりで次の語が出るというようなルールとした場合、過去3語以上は一切関係ないですよというような考え方。
      • なので、A-Bの語の後にCが30%、Dが70%というような統計を取り、次にA-Bという語が出てきたら30%の確率でC、70%の確率でDを出すというようなもの。
    • 最初の語をランダムに選び、マルコフ連鎖により次の語をつなげていく
    • 長所 単語の前後のつながりは自然なものが出やすい
    • 短所 学習する文書(短歌)数が少ないと元の文書とほぼ同じようなものしか出ない。きっちり57577とはならない。
  • 先行事例

TextGenerator

python PrepareChain.py tanka.txt    # で文書DB作成
python GenerateText.py 1            # で文書生成
  • 出力例
スカートの人の汗滲むボール横抱きにしない死は寝室でもう遊んでいてつま先立ちのさよならが風である配管のうねりを闇に叫ぶわたしをだれか死ぬ。
暑い暑い夏の腕を垂らして触れるとき新たに満ちる見えるものみな視線を乞はず
永遠に存在を追い越すことができない人も物語を待っている四時に鳴り出すアラームを手の中は空白の街めざして偽者のサンタク ロースが溢れる街をゆく
ねんごろの少女とは遠い伝言ゲームのように
川べりに止めた

57577を学習しているわけではないので長さは適当だけどたまにいい感じ風なやつが出てくる

金曜の首泳ぎゆくあやつるごとく我は清くも醜くもなる
そうでなかった時間に淡くかかはりてゐる人の額に花をゆさぶる
産み終えて雪崩のあとのしずかさの妻の顔あおくあふれて

最後の一首字足らずだけどキターーーーーーと思ったが、元の歌の半分くらいをパクった感じで独立の一首とは言い難い……

  • 課題
    • まともな短歌風の場合は、元の短歌とまったく同じか、2句まで一緒のようなのしか出ない。つまり学習する短歌数が全然足りない。

全体の課題と今後の展望

短歌はわざと単語と単語のつながりを飛躍させるところがあるので、単純に意味が似ているものを持ってきてはだめ。なのでランダムな星野しずるのほうが人間に出来ない意味の飛躍をするので趣深いのかも。
文書での例は見たことないのですが画像生成だと、

  • 大量に作者名と絵画画像を学習させる
  • 作者名を入れるとその作者風の新たな絵画画像を生成する
  • 作者A80%、作者B20%などと指定すると作者Aよりだがと作者Bの画風が合わさったような絵画画像を生成する

というの(DCGAN)があるので、その短歌版を作りたい。穂村弘50%、東直子50%の短歌を生成するとか。

13
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
10