假设您认识一名想要学习机器学习和自然语言处理的学生.
他们应该关注哪些具体的计算机科学科目以及专门设计哪些编程语言来解决这些类型的问题?
我不是在寻找你最喜欢的科目和工具,而是寻找行业标准.
示例:我猜测知道Prolog和Matlab可能对他们有所帮助.他们也可能想要研究离散结构*,微积分和统计.
*图形和树木.函数:属性,递归定义,解决重现.关系:属性,等价,偏序.证明技术,归纳证明.计数技术和离散概率.逻辑:命题演算,一阶谓词演算.正式推理:自然演绎,分辨率.用于编程正确性和自动推理的应用程序.计算中代数结构的介绍.
这个相关的stackoverflow问题有一些很好的答案:对自然语言处理感兴趣的人有什么好的起点?
这是一个非常大的领域.先决条件主要包括概率/统计,线性代数和基本计算机科学,尽管自然语言处理需要更加密集的计算机科学背景(经常覆盖一些基本的AI).关于特定的语言:Lisp是用于进行人工智能研究的"事后补充",而Prolog(以其在形式逻辑中的根源)特别针对自然语言处理,许多课程将使用Prolog,Scheme,Matlab,R或其他功能语言(例如OCaml用于康奈尔大学的这门课程),因为它们非常适合这种分析.
以下是一些更具体的指针:
对于机器学习,斯坦福CS 229:机器学习很棒:它包括一切,包括讲座的完整视频(也在iTunes上),课程笔记,问题集等,而且Andrew Ng教授的非常好.
请注意先决条件:
学生应具备以下背景知识:基本计算机科学原理和技能知识,其水平足以编写一个合理的非平凡计算机程序.熟悉基本概率论.熟悉基本线性代数.
该课程使用Matlab和/或Octave.它还建议以下读数(虽然课程说明本身非常完整):
Christopher Bishop,模式识别和机器学习.施普林格,2006年.
Richard Duda,Peter Hart和David Stork,Pattern Classification,2nd ed.John Wiley&Sons,2001.
Tom Mitchell,机器学习.麦格劳希尔,1997年.
Richard Sutton和Andrew Barto,强化学习:介绍.MIT出版社,1998年
对于自然语言处理,斯坦福大学的NLP小组提供了许多优秀的资源.Stanford CS 224:自然语言处理入门课程包括所有在线讲座,并具有以下先决条件:
在编程和正式结构方面有足够的经验.编程项目将使用Java 1.5编写,因此需要了解Java(或者自己学习的意愿).了解人工智能和/或计算语言学中的标准概念.基本熟悉逻辑,向量空间和概率.
一些推荐的文本是:
Daniel Jurafsky和James H. Martin.2008年语音语言处理:介绍自然语言处理,计算语言学和语音识别.第二版.普伦蒂斯霍尔.
Christopher D. Manning和HinrichSchütze.1999. 统计自然语言处理基础.MIT出版社.
詹姆斯艾伦.1995. 自然语言理解.本杰明/卡明斯,2ed.
Gerald Gazdar和Chris Mellish.1989. Prolog中的自然语言处理.Addison-Wesley出版社.(这是免费在线提供)
弗雷德里克耶利内克.1998年的统计方法的语音识别.MIT出版社.
必备计算语言学课程需要基本的计算机编程和数据结构知识,并使用相同的教科书.所需的人工智能课程也可在线获取,并附有所有讲义和用途:
S. Russell和P. Norvig,人工智能:现代方法.第二版
这是标准的人工智能文本,也值得一读.
我自己使用R进行机器学习,并且真的推荐它.为此,我建议查看统计学习要素,全文可在线免费获取.您可能需要参考CRAN上的机器学习和自然语言处理视图以获取特定功能.
我的建议是:或者全部(取决于他的数量和兴趣领域):
牛津计算语言学手册:
牛津计算语言学手册http://ukcatalogue.oup.com/images/en_US/covers/medium/9780199276349_140.jpg
统计自然语言处理的基础:
统计自然语言处理基础http://nlp.stanford.edu/fsnlp/fsnlp.gif
信息检索简介:
信息检索简介http://nlp.stanford.edu/IR-book/iir.jpg
我会说可能和统计是最重要的先决条件.特别是高斯混合模型(GMM)和隐马尔可夫模型(HMM)在机器学习和自然语言处理中都非常重要(当然,如果它是介绍性的话,这些主题可能是课程的一部分).
然后,我会说基本的CS知识也很有帮助,例如算法,形式语言和基本复杂性理论.
字符串算法,包括后缀树.微积分和线性代数.不同的统计数据.人工智能优化算法.数据聚类技术......以及其他一百万种东西.这是一个非常活跃的领域,取决于你打算做什么.
你选择使用什么语言并不重要.例如,Python有NLTK,这是一个非常好的免费软件包,用于修补计算语言学.
已提到的斯坦福CS 224:自然语言处理课程也包括在线视频(除了其他课程资料).视频未与课程网站链接,因此很多人可能不会注意到它们.