Keras Text Generator продолжает повторять одни и те же слова - PullRequest
0 голосов
/ 23 сентября 2019

Я создал очень простую модель 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...