我正在为C#中的软件工程课程编写一个聊天机器人。
我正在使用马尔可夫链生成文本,使用维基百科文章作为语料库。我希望它根据用户的输入以(至少是略微)智能的方式响应用户输入,但我不知道该怎么做。
我目前的想法是,我尝试从用户的输入中提取关键字,然后使用它们来指导句子生成。但由于马尔可夫属性,关键词必须是句子中的第一个单词,这可能看起来很傻。同样,对于n
订单链,我每次都必须从用户中提取完全 n
个关键字。
生成器的数据是字典,其中键是单词列表,值是与单词组合的单词列表,取决于单词在单词中出现的频率。所以喜欢:
{[word1, word2, ..., wordn]: [(word, weight), (word, weight), ...]}
它适用于命令行测试程序,但我只是为它生成的每个文本位提供n
字种子。
我希望有一些方法可以让链更喜欢用户使用的附近单词,而不是用输入中的第一个/最后n
个单词播种,或{{1}关键字,或者其他什么。有没有办法做到这一点?
答案 0 :(得分:2)
让聊天更智能的一种方法是从用户的输入中识别主题。假设您的Markov大脑也适用于不同的主题。然后构建你的答案,你可以参考下面的字典:
{([word1,word2,...,wordn],主题):[(word,weight),(word,weight),...]}
要查找主题,您可以从WikipediaMiner开始。例如,下面是wikify
api针对该句子找到的主题及其相应的权重:
统计非常困难。对于初学者,你有一些很好的概率论教程吗?
[{'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美分。