如果我使用嵌入层,如何解码seq-to-seq模型的输出?

问题描述

我有一个训练有素的bot数据的seq到seq模型:

justphrases_X是句子列表,而justphrases_Y是对这些句子的响应列表。

maxlen = 62   
#low is a list of all the unique words.




def Convert_To_Encoding(just_phrases): 
    encodings = []
    for sentence in just_phrases:
        onehotencoded = one_hot(sentence,len(low))
        encodings.append(np.array(onehotencoded))
        
    encodings_padded = pad_sequences(encodings,maxlen=maxlen,padding='post',value = 0.0)

    return encodings_padded

encodings_X_padded = Convert_To_Encoding(just_phrases_X)
encodings_y_padded = Convert_To_Encoding(just_phrases_y)

model = Sequential()       
embedding_layer = Embedding(len(low),output_dim=8,input_length=maxlen)
model.add(embedding_layer)
model.add(GRU(128)) # input_shape=(None,496)
model.add(RepeatVector(numberofwordsoutput)) #number of characters?
model.add(GRU(128,return_sequences = True)) 
model.add(Flatten())
model.add(Dense(62,activation = 'softmax'))
model.compile(loss = 'categorical_crossentropy',optimizer= 'adam',metrics=['accuracy'])
model.summary()

model.fit(encodings_X_padded,encodings_y_padded,batch_size = 1,epochs=1) #,validation_data = (testX,testy)
model.save("cLeverbottheseq-uel.h5")

当我使用此模型进行预测时,由于使用softmax输出将在0到1之间。但是,由于我大约有3000个唯一的单词,每个单词都分配了一个单独的整数,因此我该如何本质上重复模型在训练过程中所做的事情,然后将输出转换回分配了一个单词的整数?

解决方法

我认为无法使用Sequential API创建seq2seq。尝试使用Functional API分别创建编码器和解码器。您需要两个输入-第一个输入编码器,第二个输入-解码器。