読者です 読者をやめる 読者になる 読者になる

にほんごのれんしゅう

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

複数の著者をテキスト情報を混ぜ合わせたRNNと長文の改善手法

問題背景

  • RNNによる単純な小説の学習と、学習結果の出力は過去、多くの事前研究で行われており、ある程度、人が書いたらしいと思われる文章が数多く出力されてきた。[1], [2]
  • しかしながら、複数の著者の小説を混在させて評価した例は少ないか無いように思う。
  • 著者を混ぜ合わせて学習した場合、両方の著者の特性を備えたモデルができるのではないかと仮定した。
  • また副次的知見として、Attentionの情報を引数に取らないRNNは一般的に長文に弱いが、もっとかんたんな方法で長文を生成することに成功したので、その時の情報を記す。

提案手法

  • 複数の著者の文章を混ぜ合わせ、学習用データ・セットとする
  • 長文を出力させるために、前の出力内の特徴となる文字を取り出して、一度、LSTMをリセットし、前の文の末尾の文字列のシーケンスを経過したと言う状態を作り出し、連続しない自然な長文を出力させる

f:id:catindog:20161209141815p:plain

図1. 今回使用した長文生成モデル

実験手法

  • 小説家になろうのサイトより、「無職転生 - 異世界行ったら本気だす -」と、「転生したらスライムだった件」と「蜘蛛ですが、なにか?」を2016/12/09まで公開されている情報をもとに、文字粒度のRNNを学習させる
  • 1. 「無職転生 - 異世界行ったら本気だす -」のみで学習させる
  • 2. 3つの作品を順序を保ったまま、学習させる
  • 3. 3つの作品の各行をランダムにシャッフルさせ、学習させる

評価指標

  • 出力結果が自然な文章であり、特定の誰かの文章でないと評価できる場合にtrue、自然な文章でなく、特定の誰かの文章なのだと確信でき場合にfalseの二値として、分類し、1.2.3で各々100文を評価して、スコアを比べる

結果

  • 1. score 56 @3layer,Unit1024
  • 2. score 1 @3layer,Unit1024
  • 3. score 60 @3layer,Unit1024

 以上のような結果となり、2に関してのみ極端に悪いスコアとなった。主な原因は自然な文章が全く生成されないことに起因している。
f:id:catindog:20161209142124p:plain

図2. 1の出力結果。長文である

f:id:catindog:20161209142155p:plain

図3. 3の出力結果。長文で独自の言い回しが見て取れる

考察

  • 複数の著者の文章を単純に順番道理に連結しただけでは、そもそもtrain-lossが下がらず、まともに学習できていないなどの問題があることがわかった。これは、RNNが学習する文章の特徴量がその作者固有のものであると考えられる。一層あたりのRNNUnit数は1024の3層のモデルであったので、もっと層を増やすなどなどの工夫をすれば、正しく学習できる可能性があるが、計算時間を考慮すると一部現実的でない可能性もある。
  • シャッフルした文章を学習しても、正しい文章は出力されるようであるが、文脈構造が弱いように感じられる。順序情報を失ってしまったたであると考えられる。
  • 自然でユニークな文章であるというスコアに関しては1と3で大きな有意差はなく、同一でない文章を作るだけならば、特定の著者や作品に偏っていてもいいかもしれないが、特異的にユニークである文章を3に関しては作成することができた。例を示すと以下のようになる。
 この世界では、リーダーが火炎球(フルメッド)に制御されていたのだ。
 この世界では、リーダーが火炎球(フルファンジーヴァングアーン)を観察した。
 この世界では、リーダーが火炎球(レンドエンド)に相当するハズだ。
 この世界では、リーダーが火炎球(フルフォン)の天敵となった場所に進化したのだ。
 この世界では、リーダーが火炎纏(チェイン)を用いていた。

なんだかよくわからない中二病ワードを効率よくそれっぽく生成することができるようである。これを複数の作者が入ったため、本来存在しない中二病ワードの生成に成功したと捉えられそうである。