2

我正在为 C# 中的软件工程课程编写聊天机器人。

我使用马尔可夫链生成文本,使用维基百科文章作为语料库。我希望它根据用户的输入以(至少稍微)智能的方式响应用户输入,但我不知道该怎么做。

我目前的想法是尝试从用户输入中提取关键字,然后使用这些关键字来指导句子生成。但是由于马尔可夫属性,关键字必须是句子中的第一个单词,这可能看起来很傻。同样,对于n订单链,我每次都必须从用户那里准确提取关键字。 n

生成器的数据是一个字典,其中键是单词列表,值是单词列表以及权重,这取决于单词在键中单词之后出现的频率。就像:

{[word 1 , word 2 , ..., word n ]: [(word, weight), (word, weight), ...]}

它在命令行测试程序中工作,但我只是为n它生成的每一位文本提供一个单词种子。

我希望有某种方法可以使链更喜欢用户使用的附近单词,而不是使用n输入中的第一个/最后一个单词或n关键字或其他任何单词来播种。有没有办法做到这一点?

4

1 回答 1

2

使您的聊天更智能的一种方法是从用户的输入中识别主题。假设你的马尔可夫大脑也适应不同的主题。然后为了构建你的答案,你可以参考下面的字典:

{([word1, word2, ..., wordn], topic ): [(word, weight), (word, weight), ...]}

要查找主题,您可以从WikipediaMiner开始。例如,下面是wikifyapi 针对句子找到的主题及其相应的权重:

统计太难了。你有适合初学者的概率论教程吗?

[{'id': 23542, 'title': 'Probability theory', 'weight': 0.9257584778725553},
 {'id': 30746, 'title': 'Theory', 'weight': 0.7408577501980528},
 {'id': 22934, 'title': 'Probability', 'weight': 0.7089442931022307},
 {'id': 26685, 'title': 'Statistics', 'weight': 0.7024251356953044}]

可能那些已识别的关键字也可以被视为种子。然而,问题的回答并不是那么简单。这种基于马尔可夫的句子生成根本没有理解问题的能力。它所能做的最好的就是提供相关的内容。只是我的2美分。

于 2012-11-06T20:44:41.037 回答