如何选择用于人工智能编程的语言?

38

什么是用于人工智能目的的最佳编程语言?

请注意,使用建议的语言时,我必须能够运用任何AI技术(或至少大多数技术)。


3
你如何衡量最好?例如,最易学习?对于嵌入式系统来说占用空间最小?可用的最低成本实现?最广为人知,便于招聘? - Trevor Tippins
1
@ Trevor Tippins - 最好的 = 易学,没有限制 - mary.ja45
1
如果你认为在询问最佳 AI 语言时不会出现口水战,那么你可能对 AI 社区了解不多。 - anon
3
如果你还在并且想关注的话,我更新了我的回答。正如尼尔所暗示的那样,可能会有一场热烈的讨论。我认为这不是一件坏事。 - Carl Smotricz
1
@ Carl Smotricz - 感谢您的建议。您的回答非常有帮助。 - mary.ja45
显示剩余4条评论
12个回答

43

所有在AI研究的残余领域里的时髦、有胡子的大师都使用Lisp :)

有两个主要阵营:Common Lisp和Scheme。它们有不同的语法等等。针对这两种语言都有很多好东西写出来。

Java是一种非常流行的通用语言,但在AI/函数式编程中的许多有趣的内容,例如将闭包作为一级对象传递,却在Java中操作笨拙。

我的个人喜好是远离像C#和F#这样的Windows语言。酷的人在Unix下开发。如果他们很酷但很穷,则在Linux下开发。

一些古怪但酷的人会使用Haskell。这是一种相当现代的函数式语言,具有良好的性能。我曾经尝试过,但那让我的头脑受伤了;但你可能比我更聪明。


更新:对Steve的问题的回答。

  1. 我不会支付任何Unix变体的费用;那是公司和研究机构所做的。理念是你想为一个投入数百万美元硬件设备且不会在购买操作系统上吝啬几千美元的公司或研究机构从事AI研究。这样的机构很可能在自己的食堂里提供美食,或者支付一定费用来做有趣的工作。但我当然不排斥Linux。

  2. F#可能很酷,但我看到了一整个问题阵列,使它难以在Linux或其他Unix上运行(这就是我所说的"windowsy"),而且我不想在Windows下工作(这就是我所说的"个人喜好")。

  • 关于"Windowsy"主题的详细说明:您提到F#是OCaml变体。从我自己的研究来看,尽管只是简单的了解,似乎F#缺少functors、OCaml样式的对象、多态变量和camlp4预处理器。没有functors的函数语言?真的吗?如果有人不喜欢微软(像我一样),那么可以得出结论,他们已经将一个完全良好的函数语言OCaml强行塞进了某些他们可以在CLR中运行的东西,以便声称"拥有"一个函数语言。最后,因为我不是怀疑,而是知道微软总是把市场支配地位置于产品质量之上,所以我不打算使用F#。但这是我的个人偏好,并且被明确标识为这样的偏好,我们真正关心的是对mary.ja45做出良好的建议。

  • 我更推荐Lisp而不是F#,甚至不是OCaml和Haskell。这些大多基于Lisp在AI领域的历史优势。

    • 大部分AI文献都是基于用Lisp或Prolog编写的程序。即使仅仅掌握Lisp的基本知识,也能让学生理解样本程序。我的个人最爱AI超级项目Cyc在Common Lisp或C中运行。

    • 在编程语言的TIOBE指数(工业界使用的编程语言排名),Lisp排在第15位,而Haskell排在第43位,F#和OCaml排名低于50位。市场上的存在自然与就业机会相关。

    话虽如此,也有可能许多年轻的"AI感兴趣"语言正在迅速崛起。如果某个重要的研究机构发表了一些颠覆性、定义领域的研究成果,比如说在Scala中,你将看到Scala在研究界大幅提升其受欢迎程度,并且随着一些滞后的时间,在工业界也是如此。

    我(显然)无法评论F#的其他优点,但您同样可以进行推荐。


    2
    我能用Lisp做其他的事情吗? - mary.ja45
    10
    赞同酷的人在Linux上开发。 - hasen
    这对我来说听起来非常像阴谋论,或者只是强烈的粉丝偏好(Windows 真的很烂!) - Caleb Jares
    你能提供一些Scheme的“好东西”的链接吗?我曾经在一个重度Scheme学校(印第安纳大学,小Schemer的诞生地)学习,并且到2007年为止,唯一从事人工智能的有胡子的大师(我是其中之一)已经完全放弃了Scheme。通常使用Python进行原型设计,使用Java/C++进行性能优化。 - Nathan Shively-Sanders
    由于OP标记了神经网络,他也有非传统的AI需求。Scala或Haskell是否满足这种需求? - rjt
    显示剩余5条评论

    20

    Python 在一般的科学界中得到了广泛应用。它有很多可用的库并且易学易用。


    14

    我会考虑使用Scala。

    • 它适用于函数式编程
    • 它可以像Java一样快速
    • 它是一种现代语言,有很多优秀的方面
    • Java 在人工智能领域似乎也很受欢迎,因此您可以从Scala中使用所有这些Java库

    我已经用Scala解决了一个基本AI课程中的所有练习。效果非常好。


    1
    Scala是一种非常适合聪明人使用的能力强大的语言。我喜欢它,认为它可能有一个光明的未来。+1。 - Carl Smotricz
    Scala非常适合企业规模和性能。 - tree em

    12
    如果“所有AI”也包括机器学习,我猜想需要提到Matlab、R和Python+Scipy。

    12

    我个人使用Clojure进行AI编程,并发现它是一种非常出色的全能型AI语言。

    原因:

    • 它是一种Lisp语言,而Lisp在AI领域历史上一直很强大。
    • 它是一种同像性语言,具有功能强大的宏,因此非常适合代码生成和遗传编程。这是AI编程中一个意外有用的特性(并且可能解释了Lisp在这个领域的成功)。
    • 它运行于JVM上,可以轻松地访问所有Java库,用于数值计算(Weka、Colt等)。
    • 它非常适合快速交互式开发——它非常动态,您可以在运行中的Clojure REPL中进行几乎所有交互式操作。不需要重新编译等操作。

    7

    编程环境是学术性的还是非学术性的可能很重要,但对于大多数非学术AI应用程序开发,我建议使用像Java或C++这样的主流语言。需要能够轻松地与其他 COTS 或开源软件包进行接口,而在更“奇特”的语言中有时可能会很困难甚至不可能。对于学术研究来说,这可能不是一个那么关键的问题。

    此外,性能对于许多应用程序来说也很重要,主流语言通常具有最优化的编译器,例如C++或Java。

    虽然函数式编程语言如LISP、Scheme等具有特殊功能,可能使实现特定AI方法更容易,但我不认为这适用于整个AI相关编程,例如量化机器学习方法通常不需要函数式语言。如果您需要访问函数结构和一般软件包,有一些 LISP工具可帮助解决此问题,最近开发的Clojure是一种在JVM上运行并可以访问Java库的LISP变体。另外,Groovy是另一种基于JVM的语言,包括对闭包的支持。
    最后,一些程序员喜欢范式灵活性和/或快速原型制作的AI项目。Ruby和Python都因此成为多范式语言,也可以用于脚本编写的AI相关用途。
    像编程中的大多数事情一样,选择哪种语言用于AI开发的最佳答案最终取决于您的项目需求。

    4

    这真的取决于你要解决什么样的问题。此外,你想深入研究AI方面的内容有多深。如果你想从基础开始学习并实现理论上的AI内容,则可以选择高级语言——如函数式编程(在AI中已被证明)例如lisp或prolog。如果你知道自己正在处理什么问题集并且想要高效率,则可以选择像Java、C++这样的语言,并使用工具包来完成工作。由于你提到了机器学习,请查看Java中的Weka Toolkit以获取其中的一些内容。


    如果你想从基础开始学习,只是实现理论的人工智能方面。 - mary.ja45
    我建议你选择你更熟悉的语言,或者选择Lisp、Python。我知道Norvig的《人工智能:现代方法》一书中有很多关于Lisp的内容,并且这些语言中都有代码。如果你选择Python,http://code.google.com/p/aima-python/ 可能会有所帮助。 - prasanna

    4

    选择具有AI技术的编程语言,就像选择其他项目的语言一样:

    • 您要解决什么问题?
    • 该语言是否有良好的支持?
    • 客户的要求是什么?

    我建议使用Prolog作为实现AI系统的非常好的编程语言。


    1
    Davie,我希望能找到一种适用于任何AI问题的编程语言 :) 这可能吗? :/ - mary.ja45

    3

    没有“最好”的编程语言。每种语言都有其优点。当我学习人工智能时,我们主要使用Lisp和Prolog,但是我在使用Java/C#和F#进行人工智能开发时效率更高。


    2

    这也取决于你的数据集的大小。对于 Web 规模的数据集,您可能需要使用 Map-Reduce,这意味着要使用 Hadoop。Hadoop 使用 Java 编写,但您可以使用任何语言(例如 Python)编写您的 Map-Reduce 函数。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接