PaddlePaddle / Knover

Large-scale open domain KNOwledge grounded conVERsation system based on PaddlePaddle
Apache License 2.0
673 stars 131 forks source link

PLATO-KAG不需要三步训练了吗? #160

Closed guijuzhejiang closed 1 year ago

guijuzhejiang commented 1 year ago

感谢你们的工作,以前训练plato2时分了UT,plato2,NSP三个任务的训练。PLATO-KAG貌似只训练一次,脚本中也没有latent隐变量了。是这样吗?除了运用了wiki知识外,PLATO-KAG与Plato2相比,还有其他区别吗?

portia1026 commented 1 year ago

PLATO-KAG 主要是为了知识对话,学习知识的选择以及利用知识辅助回复生成。它是基于 PLATO-2 第一阶段模型的预训练 UT 进行热启的,不涉及隐变量和评估任务。

guijuzhejiang commented 1 year ago

谢谢你的回复,今天跑了一下代码,基本了解训练和预测的过程了。有个疑问请教一下,推理生成对话tgt的输入是topic,knowledge和src,如何在大量的topic和knowledge中选择相关的作为输入呢?

sserdoubleh commented 1 year ago

原来数据集本身有 knowledge 候选 和 topic,所以可以直接使用数据集本身自带的 如果是新场景下使用,可以参考各个数据集构造时的构造方式

guijuzhejiang commented 1 year ago

不好意思,我没有描述清楚我的问题。我不是说训练,我是说推理时如何得到topic和knowledge。比如我们部署一个训练好KAG模型后,机器人和人类聊天时,人类说的话作为src,但是作为模型的输入还需要src对应的topic和knowledge,如何得到他们呢?我想是否需要对src做NER,拿到命名实体作为topic呢?

sserdoubleh commented 1 year ago

我理解你是想在部署的时候使用~ 这个是可以参考如 WoW 数据集的构建,根据对话最后一轮用户、机器人的聊天内容用 TF-IDF 搜索相关 Wikipedia 文章。当然也可以使用NER 识别话题再通过其他方式关联到一些知识源

guijuzhejiang commented 1 year ago

谢谢,我打算做一个topic和knowledge的关联表,根据最后一轮对话用TF-IDF搜索相关topic,在选择几个knowledge。不过感觉效率会有问题,聊天时每句话让人等个几秒钟,机器人会有危险