にほんごのれんしゅう

日本語として伝えるための訓練を兼ねたテクログ

文章自動作成; char-rnnとその改良

■ 文章自動作成; char-rnnを試しました、とその改良

  • そろそろ就職しないと飢えて死にそうです
  • 文章の自動錬成という物書きにとっては錬金術に等しい術があるらしいということを知ったので、試してみたいと思いました
  • char-rnnをいじっていて気付いたのですが、seq2seqの方が文章作成としてはいいのでは?と感じています。今回は多くの方が試されたchar-rnnの知見です

■ char-rnnとは; 一文字を入力したRecurrent Neural Network

 seq2seqが単語列を入力するのに対して、char-rnnは一文字だけです。一文字入力でなぜ文章ができるのかというと以下のような構造になっているそうです。

f:id:catindog:20160816110059p:plain

              図1.char-rnn

 英語の文章ではそれなりに文を構築できているようですが、日本語だとうまくいっていない様に思われます。これは、英語がa-zA-Z0-9を基本の一文字にしているのに対して、日本語はあ-んア-ン + 漢字6355語などの構造で成り立っており、入力と出力が高すぎる次元にあるため、英語の文章生成アルゴリズムと日本語の文章生成アルゴリズムでは対等に比較しかねる気がします。

■ とりあえずやってみる

 今更感がするのですが、char-rnnで文章を生成しました。学習した文章はdmm.comのサイトの商品説明 + レビューの1500件です。最初、10万件で行おうとすると、とても数時間の学習では終わりそうになかったため、この件数まで圧縮しました
 出力を2000文字にして実行すると以下のような文章を得ることができました。

架却阪板め伺和凶厚捜菊辻さち少女もちゃんと違い個人的には欲しくてマッサリとHするありさちゃん。又一人っぽい女性にこさられてオ*ニーを収録!Tカップ美尻マンポを繰り広げる公園のものでキ×グラドーチンにつけぬパンさんこの若い男も肉棒をねおさな悶絶したあふ嬢の未開の書かれる鬼巻の淫乱美女達社員と歩まってあ。絶頂を狙って痴態を満たす!可愛い奥さんが、...

 これは、、、。単語レベルではちゃんと学習しているように感じますが、意味不明な単語も多く、何か意味がある文章のようには思えません。Tカップって存在するのかよ。

■ 一文字から単語レベルに変更してみる; term-rnnに改造する

 日本語で文章作成はむりなのでは、、、と思いまして、なんとかfactor(素性)の量を圧縮できないかと考えて、単語レベルで学習すればいいのでは、と思いました。
 海外の方でも、同様の発想に至った方が多い[1]らしく、char-rnnをterm-rnnに変更しました。chainer-char-rnnを改造したのですが、改修箇所はずいぶんと少なく、楽ちんでした。[2]

 結果はだいぶましなものになりました。下手にchainerのパラメータをいじるより、こちらを試してよかったです。

待望のミニスカートを陵辱する。第30弾はは、鮪するお兄ちゃんには、生まれなしならしかも挿入です。2人目のお婆ちゃん「イジメでくる」の欲求不満さん。もう凄まじい本に大暴れ!幼妻の動きを喘ぎ奴隷を今、踏みべく突かれて尻れる女子校生はデリヘル越しの感激…!!ののしられたいシーメールたちは一般車が大きく、カメラを貪りシ串刺しを飲まされマ●コ射*するな~10重映像も自然にほぐれました。社長というのがMア*ル*ァックででっかい変態ひろみ!全身や飛び散るS級ニューハーフ3名の一人のお楽しみ下さい!!

 *検索で引っかかるとまずいものは伏字にしてあります。
 前の文章に比べてずいぶん読めるものになりました。ちょこっと編集するだけで、キャッチコピーに利用できそうなものも多いです。やはり日本語では単語レベルで学習した方がよさそうです。

■ 発展

 いろいろな単語をシードとして文章を作りましたが、同じepoch数ならterm levelの方がよさそうです。これを、シーケンシャルに入力にして、、、と考えていたら、seq2seqの論文を見つけて改めて自分の発想が一年ほどスタンダードから遅れていると感じました。
 seq2seqの学習データを改良してterm-rnnで出力された日本語としておかしい文章を、訂正するseq2seqや、小説などで会話文でない部分から、括弧の中の会話文を作成するなど、文章作成という創造的な部分を補助・自動生成するものを試してみたいです。

■ 参照

[1] https://github.com/karpathy/char-rnn/issues/115
[2] https://github.com/GINK03/KindleReferencedIndexScore/blob/master/query-expansion/chainer-char-rnn/trainkai.py