シーケンスからシーケンスへの言語モデルを実装しようとしていました。学習過程で、モデルは GloVe によって生成された 50d の単語ベクトルのシーケンスを取り込み、次の単語を意味する 1 対 V (V は語彙のサイズ) のベクトルを出力します。これは、対応する次の単語の分布と見なすことができます。テストプロセスの現在のタイムステップでの入力単語ベクトルに、112単語の語彙で試しました。
次に、次の 2 つのモデルを作成しました。
model1 = Sequential()
model1.add(LSTM(112, return_sequences=True, input_shape=(31, 50)))
model2 = Sequential()
model2.add(LSTM(112, return_sequences=True, input_shape=(31, 50)))
model2.add(TimeDistributed(Dense(112, activation="linear")))
私がそれらを合わせようとしたとき
model.fit(X, Y, batch_size=128, nb_epoch=256, validation_rate=0.1)
最初のモデルmodel1
はクラッシュして MemoryError を発生させましたが、2 番目のモデルmodel2
は正常に終了しました。X は の形をしており(number_of_sentences, max_words_in_one_sentence, 50)
、Y は の形をしてい(number_of_sentences, max_words_in_one_sentence, 112)
ます。この例では、number_of_sentences=10000, max_words_in_one_sentence=13
.
新しい time-distributed-dense を LSTM レイヤーに追加したときに何が起こったのか、言語モデルを実装したいモデルはどれなのか疑問に思っています。