seq2seq_chatbot_new
seq2seq_chatbot_new copied to clipboard
何處添加END符號呢?
https://github.com/lc222/seq2seq_chatbot_new/blob/8d60e3ec8d122c843476464aeff4d0bf5d8adfd7/data_helpers.py#L56-L59
在這部分沒看見添加END的結尾符號 於您所提共的pkl檔中的trainingSamples亦沒看見結尾符號 不知道這是一個問題,還是我對程式碼有誤解?
我自行修改於 target = sample[1] + [eosToken] 但這又浮現一個問題 https://github.com/lc222/seq2seq_chatbot_new/blob/8d60e3ec8d122c843476464aeff4d0bf5d8adfd7/model.py#L92-L94 這邊刪除的結尾符號動作應該只有batch中長度最長的sequence會刪除到eos 其餘的都刪除到pad
这个问题你可以看一下model文件,会在train的过程中给target添加end符号。就是在model.py文件的if self.mode == 'train':这一句代码后面进行添加的。希望可以解决你的问题。
非常感謝您的回覆 我在去查看了model文件 https://github.com/lc222/seq2seq_chatbot_new/blob/8d60e3ec8d122c843476464aeff4d0bf5d8adfd7/model.py#L91-L95 這邊貌似只有將原本的target刪除結尾END並加上GO來作為訓練時期的decoder輸入 例如 原本為 "你 好 嗎 END" ,加工後變為 "GO 你 好 嗎"
@njames741 请问问题最后你解决了吗?我发现预测回答的句子都很长,没有生成eos
@parahaoer 目前我是依照上述方法添加EOS,預測的句子會產生EOS會停止 後續提到的問題則還未解決,可能需要再思考怎麼寫
@njames741 为什么我在sample[1]后面加上[eosToken]没有效果呢?
decoder_input需要删除eos么?好像不用删吧,只需要加go
@njames741 @lc222 也注意到代码中确实没有加eos.我觉得可以修改成target = sample[1] + [eosToken]. 但不明白为什么要在embedding前删除eos呢?
seq2seq_chatbot_new/data_helpers.py
Lines 56 to 59 in 8d60e3e
#将target进行PAD,并添加END符号 target = sample[1] pad = [padToken] * (max_target_length - len(target)) batch.decoder_targets.append(target + pad) 在這部分沒看見添加END的結尾符號 於您所提共的pkl檔中的trainingSamples亦沒看見結尾符號 不知道這是一個問題,還是我對程式碼有誤解?
我自行修改於 target = sample[1] + [eosToken] 但這又浮現一個問題 seq2seq_chatbot_new/model.py
Lines 92 to 94 in 8d60e3e
定义decoder阶段的输入,其实就是在decoder的target开始处添加一个
,并删除结尾处的 ,并进行embedding。 decoder_inputs_embedded的shape为[batch_size, decoder_targets_length, embedding_size]
ending = tf.strided_slice(self.decoder_targets, [0, 0], [self.batch_size, -1], [1, 1])
這邊刪除的結尾符號動作應該只有batch中長度最長的sequence會刪除到eos 其餘的都刪除到pad
貌似作者是想把eos加到pad后面,不过好像忘了加了.
同注意到没有加,现在还没改好那... Still unresolved