squareRoot3 / Target-Guided-Conversation

"Target-Guided Open-Domain Conversation" in ACL 2019
https://aclanthology.org/P19-1565/
149 stars 23 forks source link

请问代码中哪一部分代码是负责Discourse-level Target-Guided Strategy功能的? #3

Closed wizare closed 4 years ago

wizare commented 4 years ago

您好: 根据论文中,为了使对话能够像target靠近,在预测keyword的词语分布之后,会根据与target的词向量远近,进行一个策略选择。但我看完您的代码之后,觉得按照您的代码的逻辑,就是取预测概率前几的keywords。请问是我的理解有偏差吗

squareRoot3 commented 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
wizare commented 4 years ago

感谢您的回复。 您所指的这段代码是在模型的retrieve函数里,而这个retrieve函数只在chat.py 和 simulate.py中有被调用。那么训练以及测试的阶段中,这个往target靠近的Strategy就不需要采用吗?

以及按照retrieve函数,是选keyword和candidated_reply都需要用到这个Strategy吗?

squareRoot3 commented 4 years ago

模型的训练只考虑预测下一轮的关键词以及回复, 所以是没有target的, 策略只用于测试多轮的完整对话.

确实这两个步骤都用了策略.

wizare commented 4 years ago

明白了。 另外我还有些问题:

  1. 最后采用的检索式的方法来得出回复,是出于生成式的模型得到的回复不稳定,可能会陷入循环dull response的情况的考虑吗?
  2. 训练的时候是选概率前3高的keyword作为输入,在测试多轮完整对话的只选一个吗?我是看kernel.py的149行的代码好像是这样的意思,不知道有没有理解错? 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])
squareRoot3 commented 4 years ago
  1. 检索可以看成是一个追求简单的选择, 我们论文的重点还是放在介绍task, 数据集和一个基本的解决方案, 所以对生成模型没有进行深入研究. 但我觉得这是一个不错的想法, 并且可能需要更大的数据集来训练, convai2这个对话语料规模还是偏小, 大部分人在这个语料上都是跑的检索模型. 我又基于微博语料做了一个更大的中文target guide数据集, 感兴趣的话可以发给你.

  2. 是的, 训练的时候取前3个的和主要是发现这样收敛会快一些, 但只取一个也基本没有影响

wizare commented 4 years ago

十分感谢。能分享您的这个数据集给我吗?

我需要提供我的邮箱吗?我的邮箱是1027998359@qq.com