Kerasを使ってカタカナでの会話のやりとりをおこないます。
まるまるここのサイトのコード利用させていただきました。
ただ、その言語は紹介できないかも知れません。
個人的には『チョット問題あり』と感じています。
(OSはMac OSXのようです)
EncoderとDecoderのところにLSTMを使っています。
只今、学習中なのですが50万会話のコーパスと貧弱な2 in Oneパソコンのため
直ぐに終わるとは思えません。
以前にもSeq2Seqを試したのですが、ここでの結果は・・・。
コードの一部のみ紹介します。
timesteps = 50 # エンコーダー長
inputs = Input(shape=(timesteps, 128))
encoded = LSTM(512)(inputs) # 512 次元
inputs_a = inputs
inputs_a = Dense(2048)(inputs_a)
inputs_a = BN()(inputs_a) # BatchNormalization:各バッチごとに前の層の出力を正規化(平均0、標準偏差1)
a_vector = Dense(512, activation='softmax')(Flatten()(inputs_a))
mul = multiply([encoded, a_vector])
encoder = Model(inputs, mul)
inputs = Input(shape=(timesteps, 128))
encoded = LSTM(512)(inputs) # 512 次元
inputs_a = inputs
inputs_a = Dense(2048)(inputs_a)
inputs_a = BN()(inputs_a) # BatchNormalization:各バッチごとに前の層の出力を正規化(平均0、標準偏差1)
a_vector = Dense(512, activation='softmax')(Flatten()(inputs_a))
mul = multiply([encoded, a_vector])
encoder = Model(inputs, mul)
x = RepeatVector(timesteps)(mul) # inputとして入ってくるベクトルを指定の数だけ繰り返す
x = Bi(LSTM(512, return_sequences=True))(x) # 512ユニット、双方向RNN(逆順にも入れている)return_sequences:毎時刻の出力を得る
decoded = TD(Dense(128, activation='softmax'))(x) # TimeDistibute:入力されたシーケンスの各時刻に同様のネットワークを付加する
x = Bi(LSTM(512, return_sequences=True))(x) # 512ユニット、双方向RNN(逆順にも入れている)return_sequences:毎時刻の出力を得る
decoded = TD(Dense(128, activation='softmax'))(x) # TimeDistibute:入力されたシーケンスの各時刻に同様のネットワークを付加する
autoencoder = Model(inputs, decoded)
autoencoder.compile(optimizer=Adam(), loss='categorical_crossentropy')
autoencoder.compile(optimizer=Adam(), loss='categorical_crossentropy')