人工智能的Lisp和Prolog?

时间:2011-03-07 19:53:14

标签: lisp artificial-intelligence prolog

现在,因为我3年前在A.I.上课。我非常熟练地问这个问题......开玩笑只是开玩笑;)

但严肃的说,这些语言是什么使它们如此受欢迎A.I.研究。即使A.I.研究是“老”......它可能是过去5到10年中最长的方式...... 是因为这些语言在A.I.的概念中有些“设计”了。或者只是说我们现在没有什么好用的?

我问这个因为我总觉得它很有趣,而且我只是有点好奇。如果我完全错了,他们使用不同的语言,我很想知道他们使用的是什么。我的意思是我可以理解prolog,尤其是Sentient / Propositional Logic和Fuzzy逻辑。但我不明白“为什么”我们会使用Lisp ...甚至还有其他A.I.研究人员会用来做机器学习等。

关于主题的任何文章/书籍也很有用:)

6 个答案:

答案 0 :(得分:30)

Lisp已经回答了这个问题,所以我只会评论Prolog。

Prolog专为两件事而设计:自然语言处理和逻辑推理。在20世纪70年代早期的GOFAI范例中,当Prolog被发明时,这意味着:

  1. 为自然语言构建符号语法,用于构造句子/话语的逻辑表示;
  2. 使用这些表示和逻辑公理(不一定是经典逻辑的公理)来推断新事实;
  3. 使用类似的语法将逻辑表示转换回语言。
  4. Prolog非常擅长这一点,并且在ISS中用于完成这样的任务。然而,这种方法已经失去了信誉,因为

    1. "all grammars leak":没有语法可以捕获语言中的所有规则和例外;
    2. 语法越详细,解析的复杂性(大O和实用)就越高;
    3. 逻辑推理对于许多实际任务来说既不充分也不必要;
    4. NLP的统计方法,即“字数统计”,已被证明更加稳健。随着互联网的兴起,可以获得足够的数据集来获得NLP开发人员所需的统计数据。与此同时,内存和磁盘成本下降,而处理能力仍然相对昂贵。
    5. 直到最近,NLP研究人员才开发出一些实用的组合符号统计方法,sometimes using Prolog。世界其他地方使用Java,C ++或Python,您可以更轻松地找到库,工具和非博士程序员。事实上I / O和算术在Prolog中不实用,这无助于它的接受。

      Prolog现在主要局限于涉及NLP和约束推理的特定领域应用程序,它们看起来确实很好。尽管如此,很少有软件公司会以“基于Prolog技术为基础”做广告,因为这种语言因为没有达到“让AI变得容易”的承诺而得名。

      (我想补充一点,我是Prolog的忠实粉丝,但我甚至只用它来进行原型设计。)

答案 1 :(得分:29)

无法真正与Prolog交谈,但这就是为什么Lisp:

  • Lisp是一种homoiconic语言,这意味着代码以与语言中的数据结构相同的形式(s-expressions)表示。即“代码是数据”。如果您正在编写修改/操作其他代码的代码,例如,这有很大的优势。遗传算法或符号操作。

  • Lisp的宏系统使其非常适合定义特定问题的DSL。大多数Lisp开发人员有效地“扩展语言”以满足他们的需求。再一次,Lisp是同质的这一事实在这里有很大的帮助。

  • 有一些历史联系,因为Lisp在大多数早期AI研究的同时变得流行起来。一些interesting facts in this thread

  • Lisp作为一种函数式编程语言非常有效。这是一个非常适合AI的领域(你经常只是试图让机器学习如何为给定的输入生成正确的输出)。

  • 主观观点:Lisp似乎吸引了具有数学思维的人,这恰好是你需要很多现代人工智能......这是可能的,因为Lisp非常漂亮与无类型的lambda演算密切相关

我正在做一些AI /机器学习工作,并且由于上述原因选择了Clojure(JVM上的现代Lisp)。

答案 2 :(得分:15)

当我们认为AI是符号操作和像Ontologies这样的东西时,Lisp有一个优势。 当我们认为AI是逻辑时,Prolog有一个优势,而Unification是一个棘手的操作。 但是这些都不能为任何当前的竞争者提供任何优势#AI; AI" 统计AI是关于稀疏数组的。 各种神经网络,包括深度学习,都是关于与链接相关的节点的海洋。 模型自由方法(多种机器学习,进化方法等)也很简单。复杂性是紧急的,所以你不必担心它。写一个简单的基础,可以了解它需要学习什么。 在任何一种情况下,任何通用语言都可以。甚至可以说,大多数神经网络方法都非常简单,以至于C ++会有点过分。

使用允许您最轻松地聘请最佳程序员完成任务的语言。

答案 3 :(得分:11)

这里有一些好的和信息丰富的回答,但Lisp和Prolog的观点要么被遗漏,要么被边缘化,要么不够强调。

Lisp,后来Prolog出现在一个主要的人工智能研究围绕符号处理的时代。符号处理的一个简单例子是我们人类如何手工进行代数,微积分或积分。我们象征性地操纵变量和常量来导出等价关系。 Lisp和Prolog就是为此而设计的。

符号操作并非在C ++或Java中实现,因为它们的设计并未考虑到这一点。然而,现在人工智能中的C ++,Java或类似语言可能是流行语,因为现在存在几种不涉及符号处理的AI研究变体。

AI的一种形式涉及使用统计方法作为知识的基础,这需要使用更多更精简的语言来减少计算时间。许多所谓的AI系统也只不过是专门用于特定利基目的的系统。当然,这些系统最好用非Lisp / Prolog语言编程,而不是依赖于“推理”或常识知识获取,更多地依赖于从输入处理数据。

即使是Watson(用Java,C ++和一些Prolog编程)也可以说是一个高度专业化的系统。似乎Watson的目的是获取大量事实,然后使用复杂的搜索算法对这些事实进行排序(虽然不确定,IBM可能会因此而怨恨我)。未来的AI实现可能会结合AI范例并为每个专用部分实现各种语言。甚至Lisp和Prolog有一天可能会卷土重来。

答案 4 :(得分:6)

回忆起Prolog的动机:解决问题的逻辑,理解推理,人或机器,这可能是一个好主意。这是一个正在进行的项目,即使Prolog是其最好的结果之一,也不是它的最终结果。我们一直在寻找更好的语言来代表知识。查看Bob Kowalski的最新着作:如何人工智能化。

答案 5 :(得分:1)

  

但我不明白“为什么”我们会使用Lisp ......甚至还有什么   A.I.研究人员会用来做机器学习等。

Yann LeCun开发了Lush又名LISP Universal Shell。他最近还成为社交媒体网络的人工智能研究主任。

  

关于主题的任何文章/书籍也很有用:)

我猜你已经知道了Artificial Intelligence: A Modern Approach 这是大学人工智能阅读最多的入门书。