문제 설명
유효한 인덱스를 반환하지 않는 Tensorflow 텍스트 생성 (Tensorflow text generation not returning valid index)
Tensorflow 모델을 학습시켜 텍스트를 생성하려고 합니다. 저는 주로 Tensorflow 웹사이트의 코드를 사용하고 있지만 텍스트를 생성하려고 하면 모델이 word_index에 없는 인덱스를 반환합니다.
텍스트 생성 기능:
6model = create_model(vocab_size = vocab_size,
embed_dim=embed_dim,
rnn_neurons=rnn_neurons,
batch_size=1)
model.load_weights(tf.train.latest_checkpoint(checkpoint_dir))
model.build(tf.TensorShape([1, None]))
char_2_index = tokenizer.word_index
index_2_char = {ind:char for char, ind in char_2_index.items()}
def generate_text(model, start_string):
num_generate = 1000
input_eval = [char_2_index[s] for s in start_string]
input_eval = tf.expand_dims(input_eval, 0)
text_generated = []
temperature = 1.0
model.reset_states()
for i in range(num_generate):
print(text_generated)
predictions = model(input_eval)
predictions = tf.squeeze(predictions, 0)
predictions = predictions / temperature
print(predictions)
predicted_id = tf.random.categorical(predictions, num_samples=1)[‑1,0].numpy()
print(predicted_id)
input_eval = tf.expand_dims([predicted_id], 0)
text_generated.append(index_2_char[predicted_id])
return (start_string + ''.join(text_generated))
오류
KeyError Traceback (most recent call last)
<ipython‑input‑52‑9517558352c4> in <module>()
‑‑‑‑> 1 print(generate_text(model, start_string=u"Is Baby yoda "))
<ipython‑input‑47‑75973c66de6c> in generate_text(model, start_string)
37
38
‑‑‑> 39 text_generated.append(index_2_char[predicted_id])
40
41 return (start_string + ''.join(text_generated))
KeyError: 133
단어 색인 및 훈련 텍스트에는 대문자와 소문자만 포함됩니다.
편집 자세한 내용은 내 데이터 준비 및 구조입니다.
구조 [['SENTENCE'], ['SENTENCE2']...]
데이터 준비
tokenizer = keras.preprocessing.text.Tokenizer(num_words=209, lower=False, char_level=True, filters='#$%&()*+‑<=>@[\\]^_`{|}~\t\n')
tokenizer.fit_on_texts(df['title'].values)
df['encoded_with_keras'] = tokenizer.texts_to_sequences(df['title'].values)
dataset = df['encoded_with_keras'].values
dataset = tf.keras.preprocessing.sequence.pad_sequences(dataset, padding='post')
dataset = dataset.flatten()
dataset = tf.data.Dataset.from_tensor_slices(dataset)
sequences = dataset.batch(seq_len+1, drop_remainder=True)
def create_seq_targets(seq):
input_txt = seq[:‑1]
target_txt = seq[1:]
return input_txt, target_txt
dataset = sequences.map(create_seq_targets)
dataset = dataset.shuffle(buffer_size).batch(batch_size, drop_remainder=True)
참조 솔루션
방법 1:
It seems that vocab_size
used in create_model(...)
is not equal to the length of index_2_char
.
(by GrepThis、Vladimir Sotnikov)