如何训练聊天机器人


10

我想开始尝试神经网络,作为一个玩具问题,我希望训练一个人聊天,即实现像cleverbot这样的聊天机器人。反正不是那么聪明。

我到处找了一些文档,发现有很多关于常规任务的教程,但是关于这个特定主题的教程很少。我发现的只是暴露了结果,而没有给出实现的见解。这样做的人做起来很浅(seq2seq上的tensorflow文档页面缺少imho)。

现在,我觉得我可能已经或多或少地了解了原理,但是我不确定,甚至不确定如何开始。因此,我将解释如何解决该问题,并希望对此解决方案提供反馈,告诉我我在哪里出错了,并且可能与该过程的详细解释和实践知识有任何联系。

  1. 我将用于该任务的数据集是我所有Facebook和whatsapp聊天记录的转储。我不知道它会多大,但可能还不够大。目标语言不是英语,因此我不知道在哪里可以快速收集有意义的对话样本。

  2. 我将从每个句子中产生一个思想载体。仍然不知道实际如何;我在deeplearning4j网站上找到了word2vec的一个很好的例子,但句子却没有。我了解单词向量的构建方式以及原因,但是我找不到句子向量的详尽解释。

  3. 使用思想向量作为输入和输出,我将训练神经网络。我不知道它应该有多少层,哪些必须是lstm层。

  4. 然后应该有另一个神经网络,它能够将思想向量转化为组成句子的字符序列。我读到我应该使用填充来弥补不同的句子长度,但是我想念如何编码字符(代码点足够吗?)。

Answers:


7

我建议从阅读此博文开始。您可能可以蚕食代码以创建一个RNN,该RNN接受一个对话声明,然后继续输出该声明的答案。

那将是您项目的简单版本,而没有单词向量和思想向量。您只是在输入字符,因此错别字不必担心您。

下一个更复杂的步骤将是输入单词向量而不是字符。这样一来,您可以将其归纳为训练数据中不包含的单词。而且它可能仍然只是对代码的较小修改。

如果您坚持使用思想向量,则应该开始阅读NN翻译。并可能尝试获得预训练的编码器网络。或自己在针对您的语言的大型翻译语料库上对其进行预培训。

使用小型培训集,您最好的选择可能是过度拟合,直到系统逐字重新创建您的培训数据为止。使用单词向量将使您的系统对“我今天打败了猫”给出相同的答案。就像您将训练数据提供给“我昨天踢过狗”一样。

我不确定矢量是否会带来很大的不同。如果让解码器学习的话。


我已经读过第一篇文章了,我觉得字符不是正确的抽象层次。我没想过一次使用单词向量,但我想那也是一种有趣且不太复杂的方式。我将阅读该论文,这可能是我所追求的……
图腾

我已经找到了可以使用的漫游器核心...但是我仍然停留在文本生成上。ai.stackexchange.com/questions/5963/…我想知道的是尽管有向量和学习率,它仍然没有按预期运行。我担心这可能是我所欠缺的图书馆使用,但是对于300的层大小,我认为这不可能。或者所需的训练量是否与层的大小有关?任何帮助,将不胜感激。请注意正在使用的库。
FreezePhoenix

0

根据您的项目概念,对于初学者,我要求您应用一些测试驱动的开发技术。首先,尝试创建一个较小的数据库,该数据库可用于处理少量数据集,这可以带来所需的改进。

就是说,使用该数据库以节点的形式创建与您的数据内联的有组织的树。因此,如果机器人开始从数据库中生成一些反馈,并标记有您指定数据集中的数据点。因此,反馈或回答都是方法到树中的下一个节点。

注意 :对于初学者,请不要使用整个聊天记录,因为这是一个简单的任务。即输入过多=过度拟合。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.