人工智能的Lisp和Prolog?

34 lisp artificial-intelligence prolog

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

但严重的是,这些语言是什么使它们如此受人工智能研究的欢迎.即使人工智能研究"老"......它可能是过去5到10年中最长的方式......似乎是因为这些语言在某种程度上"设计"了人工智能的概念,或者仅仅是我们现在没什么好用的?

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

关于主题的任何文章/书籍也是有帮助的:)

Fre*_*Foo 31

Lisp已经回答了这个问题,所以我只想评论一下Prolog.

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

  1. 为自然语言构造符号语法,用于构造句子/话语的逻辑表示;
  2. 使用这些表示和逻辑公理(不一定是经典逻辑的公理)来推断新事实;
  3. 使用类似的语法将逻辑表示转换回语言.

Prolog非常擅长这一点,并且在ISS中用于完成这样的任务.然而,这种方法已经失去了信誉,因为

  1. "所有语法都泄漏":没有语法可以捕获语言中的所有规则和例外;
  2. 语法越详细,解析的复杂度(大O和实际)就越高;
  3. 对于许多实际任务而言,逻辑推理既不充分也不必要;
  4. NLP的统计方法,即"字数统计",已被证明更加稳健.随着互联网的兴起,可以获得足够的数据集来获得NLP开发人员所需的统计数据.与此同时,内存和磁盘成本下降,而处理能力仍然相对昂贵.

直到最近,NLP研究人员开发了一些实用的组合符号统计方法,有时使用Prolog.世界其他地方使用Java,C++或Python,您可以更轻松地找到库,工具和非博士程序员.在Prolog中I/O和算术都不实用的事实并没有帮助它被接受.

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

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


mik*_*era 30

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

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

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

  • 有一些历史联系,因为Lisp在很多早期AI研究的同时变得流行起来.这个帖子中有一些有趣的事实.

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

  • 主观观点:Lisp似乎吸引了具有数学思维的人,这恰好是你需要大量的现代AI ......这是可能的,因为Lisp与无类型的lambda非常密切相关结石

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

  • 索伦:太多近距离?说真的,在Lisp中编写一个函数,然后用另一种语言编写相同的函数,并计算分组字符.我发现对于Java来说,如果你把所有的`[] {}()`加在一起,你最终会得到*比Lisp中的parens多几倍*所以这个经典的抱怨真的是"它太简洁和一致" .我认为Lisp课程的教授应该让每个人都在Lisp和Java/C /中做一个练习,只是为了证明这是出于某种原因.(你有没有尝试用Java做SICP?哇.) (18认同)
  • 我在Lisp大学只有一次经历,主要是((((((((((((((((((()()()()()()))))))) )))))))))))))))))))))))).有点放.:( (11认同)
  • 是啊,可怕的括号.这让我离开了一段时间......但是一旦我弄清楚*为什么*他们在那里(基本上 - 他们是一个非常优雅,一致和最小的函数应用语法,与语言的homoiconic设计保持一致)它一切都是有道理的,我为了不早点学习Lisp而踢我自己. (5认同)
  • @Ken:你可能在Java中使用`[] {}()`.这是Python吸引许多人的一个原因:) (4认同)
  • 对代码采用标准格式样式(无论语言如何)将有助于使代码更具可读性.LISP中的Parens可以像C/Java中的波浪形括号一样对待,一旦你开始使用它们缩进表达式,你会发现LISP就像可读一样! (2认同)

Mon*_*son 15

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

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


小智 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也有一天会卷土重来.


小智 6

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