精确的文本生成

我有一个使用预定义消息的聊天应用程序。数据库中有大约80个预定义的对话,每个对话有5个可能的回应。为了更清楚地说明,这里有一个例子:

Q: "北极熊有多重?"R1: "非常重?"R2: "重到足以打破冰层。"R3: "我不知道。这问题真傻。"R4: ...R5: ...

假设用户选择了 R3: “我不知道。这问题真傻”

那么这个回应将有5个可能的回应,例如:

R1: "为什么这问题傻?"R2: "你才傻!"R3: "啊,我现在不想和你说话了。"R4: ...R5: ...

而这些回应中的每一个也将有5个可能的回应;之后,对话将结束,必须开始新的对话。

总结一下,我有80个手动编写的对话,每个对话有5个可能的回应,深度为3层,总共10,000条消息。

我的问题: 使用机器学习自动生成更多此类对话的最准确方法是什么?

我研究了RNN:Karparthy的RNN文章。尽管RNN可以基于旧内容生成新内容,但新内容相当随机且无意义。

为了更好地理解这些对话的使用,请访问 http://getvene.com/ 并观看预览视频。


回答:

我可能会从一个生成性文本模型开始。有篇很好的文章使用了Python和Keras(你也可以使用LSTM循环神经网络与TensorFlow)。有了丰富且优质的训练数据,算法确实可以生成非常有趣的文本输出。如上文所述,有一个古腾堡项目,你可以找到大量免费的书籍。这应该能提供足够的训练数据。然而,既然你可能已经尝试过RNN,我将继续深入讨论。

接下来是问题与可能的回应之间的关系。这告诉我你的对话中涉及到一定的语义。也就是说,这不是随机的,生成的回应至少应该尝试“适合”某种相关的回应。类似于潜在Dirichlet分配,基于数据找到合适的类别和主题,但以相反的方式进行——基于主题(问题)你需要至少找到某种相关的数据(回应)。或许可以将生成的文本分成许多部分,然后将这些部分向量化,并使用类似于文档距离的算法来找到最接近的匹配?另一个可能有用的想法是潜在语义分析,因为实际上,你需要从一个词/向量矩阵中尽可能地减少矩阵,同时仍然保持相似性。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注