我有一个可以使用预定义消息的聊天应用。数据库有大约80个预定义的对话,每个对话有5个可能的响应。为了澄清,这是一个例子:
Q: "How heavy is a polar bear?"
R1: "Very heavy?"
R2: "Heavy enough to break the ice."
R3: "I don't know. Silly question."
R4: ...
R5: ...
让我们说用户会选择 R3:"我不知道。愚蠢的问题"
然后该响应将有5个可能的响应,例如:
R1: "Why is that silly?"
R2: "You're silly!"
R3: "Ugh. I'm done talking to you now."
R4: ...
R5: ...
每个回复都有5个可能的回复;之后,对话将结束,并且必须开始新的对话。
回顾一下,我有80个手动编写的对话,每个对话有5个可能的响应,深层3层=总共10,000条消息。
我的问题:使用机器学习自动生成更多对话的最准确方法是什么?
我研究过RNN:Karparthy's RNN post。 虽然RNN可以根据旧内容制作新内容,但新内容非常随意且毫无意义。
为了更好地了解这些会话的使用情况,请访问http://getvene.com/并观看预览视频。
答案 0 :(得分:4)
我可能会从生成文本模型开始。有一个很好的article使用Python和Keras(但是你可以使用LSTM递归神经网络和TensorFlow)。通过丰富而丰富的训练数据,该算法确实可以产生非常有趣的文本输出。如上文所述,有一个Gutenberg项目,您可以免费找到大量免费书籍。这应该提供足够数量的培训数据。但是,由于你可能已经玩过RNN,我会继续进行。
接下来是question
和可能的responses
之间的关系。这告诉我你的对话中涉及某些语义。这意味着它不是随机的并且生成的响应应该至少试图“适应”某种相关的响应。像Latent Dirichlet Allocation这样的东西可以根据数据找到合适的类别和主题,但是以相反的方式 - 基于主题(问题),您需要找出至少某种相关的数据(响应)。也许某种方法可以将生成的文本拆分成许多部分,然后对这些部分进行矢量化并使用类似Document Distance算法的方法来查找紧密匹配?一个也可以派上用场的想法是Latent Semantic Analysis,因为事实上,从字词/向量矩阵中你需要尽可能多地减少矩阵,同时仍然保留相似性。
答案 1 :(得分:3)
我建议使用PPDB http://www.cis.upenn.edu/~ccb/ppdb/重新定义您的短语以扩展您的训练数据。查看本文例如:https://www.aclweb.org/anthology/P/P16/P16-2.pdf#page=177您可以使用类似的方法重新措辞每个句子。