Я создал очень простую модель Keras для генерации стихов.Я обучил его более 300 эпох, и он имел точность 0,99, но когда я генерирую новый текст, он повторяет одни и те же слова снова и снова.Что я могу улучшить в модели при обучении или прогнозировании?
Например, как долго будет оптимальным seq_len, если мои стихи будут выглядеть так:
«если выпадет снег, это»буду падать черным.пожалуйста, не называйте нас мертвыми, называйте нас живыми куда-нибудь лучше.\ n мы произносим наши собственные имена, когда молимся.\ n мы идем за сладостями и возвращаемся. ”
СОЗДАНИЕ МОДЕЛИ
def create_text_sequences(tokens):
train_len = 25 + 1
text_sequences = []
for i in range(train_len, len(tokens)):
seq = tokens[i-train_len:i]
text_sequences.append(seq)
return text_sequences
def create_model(voc_size,seq_len):
SCHEMA = [
Embedding(voc_size, seq_len,input_length=seq_len),
LSTM(units=seq_len*2,return_sequences=True),
LSTM(units=seq_len),
Dense(50, activation='relu'),
Dense(voc_size,activation="softmax")
]
model = Sequential(SCHEMA)
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
model.summary()
return model
ПРОГНОЗИРОВАНИЕ
def generate_text(seq_len=15,num_words=10):
d = read_file(f"poems.txt")
tokens = separate_punc(d)
text_sequences = create_text_sequences(tokens)
model = load_model(f"model_300.h5")
tokenizer = load(open(f"tokenizer_300","rb"))
output_text = []
random_pick = np.random.randint(0,len(text_sequences))
random_seed_text = text_sequences[random_pick]
seed_text = " ".join(random_seed_text)
input_text = seed_text
for i in range(num_words):
encoded_text = tokenizer.texts_to_sequences([input_text])[0]
pad_encoding = pad_sequences([encoded_text], seq_len,truncating='pre')
pre_word_ind = model.predict_classes(pad_encoding,verbose=0)[0]
pre_word = tokenizer.index_word[pre_word_ind]
input_text = ' ' + pre_word
output_text.append(input_text)
return " ".join(output_text)