|
前提知識
・GANとは
・Pythonとは
・強化学習とは
・seqGAN用文章データ作成
■seqGANとは
seqGANとはSequence GANの略で、文章生成が可能なGANとなります。従来のGANでは、画像データの様に値が連続なデータを取り扱っていましたが、
文章データのように離散的なデータを扱えるという点、また文章は文字順序が重要な意味を持ちますので、出力結果だけを評価するのではなく中間状態で評価できるという点が、従来のGANと異なります。
文章を離散データとして扱うには、単語にIDを振り、また文章のつながりを表現するためベクトル化(Embedding)を行います。
■seqGANの構造
seqGANは大きく二つの構造に分かれます。一つ目は事前学習といわれる部分で、生成器に対して本物の画像を入力して学習させることで生成器の精度を高めます。生成器と識別機に使用するのはLSTMです。

二つ目は敵対的学習の部分になりますが、敵対的学習は更に、生成器の学習部分と識別機の学習部分に分かれています。
生成器は強化学習を用いており、生成器が生成した中間状態の文章をRollout(ロールアウト)した文章と、生成器がそのまま生成した文章を識別機に入れた結果を比較して報酬を算出し、それを生成器に返します。
<Rolloutとは>
Rolloutとは、生成器が途中まで生成した文章を、ある方策に従って残りの部分を疑似的に生成することです。Rolloutはランダムではなく、主にモンテカルロ探索によって決定します。

■pythonによる実装
題材は青空文庫にある太宰治の「走れメロス」と「人間失格」を用い、そこから太宰治らしい文章が作れるかを試します。下準備として太宰治の文章を離散化するため、一つずつの単語にIDを振る必要があります。
その方法はこちらを参照ください。今回は、ID化したデータとIDに対応した単語の辞書を予め準備しております。
必要なファイル、環境は以下になります。
・python : 3.9.5 , pytorch:1.8.1
・ID化した文章データ(real.data)と辞書(seqdict):dazai.zip
・プログラムファイル:seqGan.zip
<実行結果>
以下は生成した文章の一部分ですが、きちんとした文章にはなっておりません。もう少しパラメータを変更して試行錯誤するとうまくいくかもしれません。
また、この手法はあくまでも太宰治がこれまで使ったことのある単語の中から、それららしい単語を選び出して組み合わせるというやり方なので、
"太宰治は一度も使ったことはないけども、太宰治だったら使いそうな言葉"を創出するわけではありません。
打ち樹ていうの小箱わかれ感嘆いる。
折り曲げあと日蔭。
真の一線休養込み上げ上野。
胴威張っながら暴君の彼もかさしはさんでが神体が伝言作らかん、世の中のせた。
サブチャンネルあります。⇒ 何かのお役に立てればと
|
|