假设您认识一名想要学习机器学习和自然语言处理的学生。
他们应该关注哪些具体的计算机科学科目以及专门设计哪些编程语言来解决这些类型的问题?
我不是在寻找您最喜欢的科目和工具,而是寻找行业标准。
示例:我猜测知道Prolog和Matlab可能对他们有所帮助。他们也可能想要研究离散结构*,微积分和统计学。
*图表和树木。函数:属性,递归定义,解决重现。关系:属性,等价,偏序。证明技术,归纳证明。计数技术和离散概率。逻辑:命题演算,一阶谓词演算。正式推理:自然演绎,分辨率。用于编程正确性和自动推理的应用程序。计算中的代数结构简介。
答案 0 :(得分:54)
这个相关的stackoverflow问题有一些很好的答案:What are good starting points for someone interested in natural language processing?
这是一个非常大的领域。先决条件主要包括概率/统计,线性代数和基本计算机科学,尽管自然语言处理需要更加密集的计算机科学背景(经常覆盖一些基本的AI)。关于特定的语言:Lisp创建"as an afterthought" for doing AI research,而Prolog(其根源于形式逻辑)特别针对自然语言处理,许多课程将使用Prolog,Scheme,Matlab,R或其他功能语言(例如OCaml is used for this course at Cornell)因为它们非常适合这种分析。
以下是一些更具体的指示:
对于机器学习,Stanford CS 229: Machine Learning非常棒:它包括所有内容,包括讲座的完整视频(也在iTunes上),课程笔记,问题集等等。{{{{{ 3}}
注意先决条件:
学生应具备以下背景知识: 基本的计算机科学原理和技能,达到足以写作的水平 一个相当重要的计算机程序。熟悉基本概率论。 熟悉基本线性代数。
该课程使用Matlab和/或Octave。它还建议以下读数(虽然课程说明本身非常完整):
对于自然语言处理,Reinforcement Learning: An introduction提供了许多好的资源。入门课程NLP group at Stanford包括Stanford CS 224: Natural Language Processing,并具有以下先决条件:
有足够的编程经验 和正式结构。程序设计 项目将用Java 1.5编写, 所以Java的知识(或意愿 需要自己学习。 了解标准概念 人工智能和/或 计算语言学。基本 熟悉逻辑,向量空间, 和概率。</ p>
一些推荐的文本是:
先决条件Statistical Methods for Speech Recognition需要基本的计算机编程和数据结构知识,并使用相同的教科书。所需的人工智能课程computational linguistics course以及is also available online并使用:
这是标准的人工智能文本,也值得一读。
我自己使用Artificial Intelligence: A Modern Approach进行机器学习,并且真的推荐它。为此,我建议查看R,其全文可在线免费获取。您可能需要参考CRAN上的The Elements of Statistical Learning和Machine Learning视图以获取特定功能。
答案 1 :(得分:7)
我的建议是:或者全部(取决于他的数量和感兴趣的领域):
The Oxford Handbook of Computational Linguistics:
Foundations of Statistical Natural Language Processing:
Foundations of Statistical Natural Language Processing http://nlp.stanford.edu/fsnlp/fsnlp.gif
Introduction to Information Retrieval:
Introduction to Information Retrieval http://nlp.stanford.edu/IR-book/iir.jpg
答案 2 :(得分:5)
我会说 probabily&amp;统计是最重要的先决条件。特别是高斯混合模型(GMMs)和隐马尔可夫模型(HMMs)在机器学习和自然语言处理中都非常重要(当然这些科目可能是课程的一部分,如果是介绍性的。)
然后,我会说基本的CS知识也很有用,例如算法,形式语言和基本复杂性理论。
答案 3 :(得分:5)
字符串算法,包括后缀树。微积分和线性代数。不同的统计数据。人工智能优化算法。数据聚类技术......以及其他一百万种东西。这是一个非常活跃的领域,取决于你打算做什么。
选择操作的语言并不重要。例如,Python有NLTK,这是一个非常好的免费软件包,用于修改计算语言学。
答案 4 :(得分:5)
斯坦福大学CS 224:自然语言处理课程已提及已包括videos online(除了其他课程资料)。这些视频没有链接到课程网站上,所以很多人可能都没有注意到它们。
答案 5 :(得分:3)
Jurafsky和Martin的言语和语言处理http://www.amazon.com/Speech-Language-Processing-Daniel-Jurafsky/dp/0131873210/非常好。不幸的是,第二版草案章节现已不再免费在线发布:(
另外,如果你是一个体面的程序员,那么玩NLP程序永远不会太早。想到了NLTK(Python)。它有一本书,你可以在网上免费阅读(我认为是OReilly)。
答案 6 :(得分:2)
Markdown and an Introduction to Parsing Expression Grammars (PEG)在cletus网站cforcoding上发布了{{3}}怎么样?
ANTLR似乎是开始进行自然语言处理的好地方。我不是专家。
答案 7 :(得分:2)
广泛的问题,但我当然认为有限状态自动机和隐马尔可夫模型的知识将是有用的。这需要统计学习,贝叶斯参数估计和熵的知识。
潜在语义索引是许多机器学习问题中最常用的工具。有些方法很容易理解。有一堆潜在的基础项目。
编辑:非负矩阵分解(NMF)是一种由于其简单性和有效性而大受欢迎的工具。这很容易理解。我目前正在研究使用NMF进行音乐信息检索; NMF已经证明对于文本语料库的潜在语义索引也是有用的。这是一篇论文。 PDF
答案 8 :(得分:1)
Prolog只会在学术上帮助它们,它也受限于逻辑约束和基于语义NLP的工作。 Prolog还不是一种行业友好的语言,因此在现实世界中尚不实用。而且,matlab也是一种基于学术的工具,除非他们做了大量科学或基于量的工作,他们真的不需要它。首先,他们可能想要拿起“Norvig”一书并进入人工智能世界,在所有领域获得基础。理解一些基本概率,统计数据,数据库,操作系统,数据结构,并且很可能是对编程语言的理解和体验。他们需要能够向自己证明人工智能技术的工作原理和不工作的原因。然后更详细地查看机器学习和NLP等特定领域。事实上,norvig书在每章后都有参考资料,所以他们已经有了很多进一步的阅读资料。通过互联网,书籍,期刊论文为他们提供了大量的参考资料以供指导。不要只是阅读本书,尝试用编程语言构建工具,然后推断出“有意义”的结果。学习算法是否真的按预期学习,如果不是为什么会这样,那怎么可能修复。