2017-02-01 2 views
2

J'ai une séquence pour séquencer le modèle d'apprentissage qui fonctionne bien et capable de prédire certaines sorties. Le problème est que je n'ai aucune idée de comment convertir la sortie en séquence de texte.Comment convertir une séquence prédite en texte dans keras?

Ceci est mon code.

from keras.preprocessing.text import Tokenizer,base_filter 
from keras.preprocessing.sequence import pad_sequences 
from keras.models import Sequential 
from keras.layers import Dense 

txt1="""What makes this problem difficult is that the sequences can vary in length, 
be comprised of a very large vocabulary of input symbols and may require the model 
to learn the long term context or dependencies between symbols in the input sequence.""" 

#txt1 is used for fitting 
tk = Tokenizer(nb_words=2000, filters=base_filter(), lower=True, split=" ") 
tk.fit_on_texts(txt1) 

#convert text to sequence 
t= tk.texts_to_sequences(txt1) 

#padding to feed the sequence to keras model 
t=pad_sequences(t, maxlen=10) 

model = Sequential() 
model.add(Dense(10,input_dim=10)) 
model.add(Dense(10,activation='softmax')) 
model.compile(loss='categorical_crossentropy', optimizer='adam',metrics=['accuracy']) 

#predicting new sequcenc 
pred=model.predict(t) 

#Convert predicted sequence to text 
pred=?? 
+0

toujours pas de réponse? –

+0

@BenUsman Avez-vous trouvé une solution à ce problème? J'ai l'expérience de la même chose. – TVH7

+0

@ TVH7 voir la réponse déposée –

Répondre

3

Voici une solution que je trouve:

reverse_word_map = dict(map(reversed, tokenizer.word_index.items())) 
1

Vous pouvez faire le dictionnaire que la carte index retour à caractère.

index_word = {v: k for k, v in tk.word_index.items()} # map back 
seqs = tk.texts_to_sequences(txt1) 
words = [] 
for seq in seqs: 
    if len(seq): 
     words.append(index_word.get(seq[0])) 
    else: 
     words.append(' ') 
print(''.join(words)) # output 

>>> 'what makes this problem difficult is that the sequences can vary in length 
>>> be comprised of a very large vocabulary of input symbols and may require the model 
>>> to learn the long term context or dependencies between symbols in the input sequence ' 

Cependant, dans la question, vous essayez d'utiliser la séquence de caractères pour prédire la sortie de 10 classes qui n'est pas la séquence modèle de séquence. Dans ce cas, vous ne pouvez pas retourner la prédiction (ou pred.argmax(axis=1)) à la séquence de caractères.