我正在为我的 AI 课程做一个谜语 AI 聊天机器人。所以我想聊天机器人的输入可能是:
类似这样的:“它是蓝色的,它在上方,但它不是天花板”
翻译:
<Object X> <blue> <up> <!ceiling></Object X>
(答案:天空?)
因此,输入是一组特征(对象中存在/不存在的特征),输出是一个匹配的、最可能的对象。
领域将限定为一定数量的对象,我可以自己输入所有属性,但我在想:
我如何以编程方式构建一个词语特征的数据库?是否存在这样的数据库?我如何标记一个词语,如何以编程方式找到它的所有属性?我正在考虑抓取维基百科或一些论坛,但我看不到它建立任何可靠的词语标签数据库。
关于我如何实现这一目标的任何想法?关于这个主题的一些文献的任何想法?
谢谢
回答:
这听起来像是一个基本的分类问题。 你本质上是在问:给定 N 个特征(color=blue,location=up 等),M 个分类中哪一个最有可能? 有许多算法可以完成这项任务(朴素贝叶斯、最大熵、支持向量机),但您必须研究哪一个最准确且最容易实现。 最大的挑战通常是获取准确的训练数据,但如果您愿意将其限制为手动输入的示例列表,那么这应该可以简化您的实施。
您的示例表明,您选择的任何算法都必须支持稀疏数据。 换句话说,如果您在 300 个特征上训练了系统,它不会要求您输入所有 300 个特征才能获得答案。 它还会使您的训练和测试文件更小,因为您将省略与某些对象无关的特征。 例如
sky | color:blue,location:uptree | has_bark:true,has_leaves:true,is_an_organism=truecat | has_fur:true,eats_mice:true,is_an_animal=true,is_an_organism=true
它可能不是很有帮助,因为它具有专有性,但是一个类似于您尝试完成的商业应用程序是网站 20q.net,尽管该系统会问问题而不是用户。 有趣的是,它是基于用户输入“在线”训练的。
维基百科肯定有很多数据,但您可能会发现为您的程序提取该数据非常困难。 Cyc 的数据更加规范化,但其 API 具有巨大的学习曲线。 另一种选择是语义词典项目 Wordnet。 它为几乎每种编程语言都提供了相当直观的 API,以及数千个单词的广泛的上位词/下位词模型(例如,cat 是一种猫科动物/哺乳动物/动物/生物/事物)。