Closed wizare closed 4 years ago
您好, 感谢对我们工作的关注, 代码逻辑和论文应该是一致的, 为了使对话能够朝着target靠近, 在预测keyword的词语分布之后, 会从预测概率最高的开始往后选keyword, 直到选到和target比之前更加接近的keyword. 具体可以看model/kernel.py
第331行开始
for wd in kw_tokenize(self.corpus[i]):
if wd in self.data_config._keywords_candi:
tmp_score = sum(self.kw_embedding[self.data_config._keywords_dict[wd]] *
self.kw_embedding[self.data_config._keywords_dict[self.target]])
if tmp_score > self.score:
reply = self.corpus[i]
self.score = tmp_score
self.next_kw = wd
flag = 1
break
感谢您的回复。 您所指的这段代码是在模型的retrieve函数里,而这个retrieve函数只在chat.py 和 simulate.py中有被调用。那么训练以及测试的阶段中,这个往target靠近的Strategy就不需要采用吗?
以及按照retrieve函数,是选keyword和candidated_reply都需要用到这个Strategy吗?
模型的训练只考虑预测下一轮的关键词以及回复, 所以是没有target的, 策略只用于测试多轮的完整对话.
确实这两个步骤都用了策略.
明白了。 另外我还有些问题:
kw_weight, predict_kw = tf.nn.top_k(matching_score, k=3) predict_kw = tf.reshape(predict_kw,[-1]) predict_kw = tf.map_fn(lambda x: self.kw_list[x], predict_kw, dtype=tf.int64) predict_kw = tf.reshape(predict_kw,[-1,3])
检索可以看成是一个追求简单的选择, 我们论文的重点还是放在介绍task, 数据集和一个基本的解决方案, 所以对生成模型没有进行深入研究. 但我觉得这是一个不错的想法, 并且可能需要更大的数据集来训练, convai2这个对话语料规模还是偏小, 大部分人在这个语料上都是跑的检索模型. 我又基于微博语料做了一个更大的中文target guide数据集, 感兴趣的话可以发给你.
是的, 训练的时候取前3个的和主要是发现这样收敛会快一些, 但只取一个也基本没有影响
十分感谢。能分享您的这个数据集给我吗?
我需要提供我的邮箱吗?我的邮箱是1027998359@qq.com
您好: 根据论文中,为了使对话能够像target靠近,在预测keyword的词语分布之后,会根据与target的词向量远近,进行一个策略选择。但我看完您的代码之后,觉得按照您的代码的逻辑,就是取预测概率前几的keywords。请问是我的理解有偏差吗