有兴趣进行自然语言处理的人有什么好的起点?

所以我最近想出了一些新的可能的项目,这些项目将不得不从用户提交和生成的文本中获取“含义”。

自然语言处理是处理这类问题的领域,经过一些初步的研究,我发现OpenNLP Hub和大学合作项目就像这个尝试项目 。 和stackoverflow有这个 。

如果有人能把我和一些很好的资源联系起来,从研究论文和介绍文本到apis,我会比一个6岁的小孩打开圣诞礼物更开心!

更新

通过你的一个build议,我发现了opencyc ( '世界上最大,最完整的通用知识库和常识推理引擎' )。 更令人吃惊的是,还有一个项目叫做UMBEL的开放循环的蒸馏版本。 它以rdf / owl / skos n3语法为特色的语义数据。

我也偶然发现了antlr ,一个parsing器生成器,用于“从语法描述中构build识别器,解释器,编译器和翻译器”

这里有个问题,列出了大量的免费和开放的数据 。

感谢stackoverflow社区!

强悍的呼叫,NLP是一个比大多数人认为是更广泛的领域。 基本上,语言可以分成几个类别,这将需要你学习完全不同的东西。

在我开始之前,让我告诉你,我怀疑你没有在某些(密切相关的)领域获得学位的成功(至less是职业)。 涉及到很多理论,大部分是枯燥的东西,很难学。 你需要很多耐力,最重要的是:时间。

如果你对文本的含义感兴趣,那么这就是下一个大事。 语义search引擎被预言为启动Web 3.0,但我们还远远没有。 从文本中提取逻辑取决于几个步骤:

  • 标志化,块化
  • 在词汇层面消除歧义(时间飞逝,像箭,但果实飞得像香蕉。)
  • 句法分析
  • 形态分析(时态,方面,案例,数量,whatnot)

一个小名单,我的头顶。 还有更多的:-),还有更多的细节。 例如,当我说“parsing”时,这是什么? 有许多不同的parsingalgorithm,parsingforms也是一样的。 其中最强大的是树连接语法和头驱动短语结构语法 。 但是他们两个都很less用在现场(现在)。 通常情况下,你会处理一些半生成的方法,并且必须自己进行形态分析。

从那里到语义是一大步。 语法/语义接口在所采用的语法语义框架上都是依赖的,而且还没有单一的工作解决scheme。 在语义方面,有经典的生成语义,则有话语表示理论 , dynamic语义等等。 即使是一切依据的逻辑forms主义依然不明确。 有人说应该使用一阶逻辑,但这似乎不够。 那么正如Montague所使用的那样,存在内涵逻辑,但是这似乎过于复杂,并且在计算上是不可行的。 也有dynamic的逻辑(Groenendijk和Stokhof开创了这个东西,很棒的东西!),而最近,今年夏天, Jeroen Groenendijk提出了一个新的forms主义, 好奇的 语义 ,也很有趣。

如果你想在一个非常简单的层面上开始,请阅读Blackburn和Bos(2005) ,这是很棒的东西,并且事实上是介绍计算语义! Groenendijk和Stokhof(1982)提出,我最近扩展了他们的系统来覆盖问题的分割理论(问题回答是一个野兽!),但不幸的是,这个理论在个体领域上的复杂度是O(n2) 。 当我这样做的时候,我发现B&B的实施有些呃…呃,在某些地方。 尽pipe如此,它确实会帮助您深入到计算语义,而且它仍然是一个非常令人印象深刻的展示。 另外,他们应该有额外的冷点来实现在“低俗小说”(电影)中定义的语法。

而当我在这里,拿起Prolog。 计算语义学的研究大部分是基于Prolog的。 现在就学习Prolog! 是一个很好的介绍。 我还可以推荐“Prolog艺术”和Covington的“Prolog编程深度”和“Prolog程序员自然语言处理”,前者可以免费在线。

乔姆斯基完全是NLP的错误来源(他自己也会强调自己是这么说的) – 请参阅Abney的“ 统计方法和语言学 ”。

上面提到的尤拉夫斯基和马丁是一个标准的参考,但我自己更喜欢曼宁和舒特泽 。 如果你对NLP很认真,你可能会想读两个。 在线提供Manning课程的video。

如果你通过Prolog直到现在学习Prolog中的DCG章节! 上面Dimitrov先生提到的,因为Prolog为您提供了一个维护知识和信念数据库的非常简单的方法,可以通过问题回答来更新,所以在获得一些语义到您的系统中将会有一个好的开始。

关于文献,我有一个重要的build议,就是用尽Jurafsky&Martin的语言和语言处理 。 这几乎关于NLP 书(第一章在线提供); 在非英语的大学课程中使用,对非语言学家和实际的导向非常具有可读性,同时也深入到语言学问题。 我真的不能推荐它。 第17,18和21章似乎是你要找的(第一版14,15和18)。 他们向您展示简单的lambda表示法,它可以很好地转换成带有function的Prolog DCG。

哦,顺便说一句,让语言学硕士, 如果你使用的是NL语义,我宁愿推荐你能find所有与AI相关的课程(尽pipe任何关于“简单”语言语义学,逻辑学,逻辑语义学, DRT , LFG / HPSG / CCG,NLparsing,forms语言学理论等都不会伤害…)

读乔姆斯基的原创文学并不是很有用, 据我所知,目前没有与他的理论直接相关的实现,他的所有有用的东西都包含在其他理论中(任何时间靠近语言学家的人都会通过渗透吸收乔姆斯基的知识) 。

我强烈build议玩NLTK并阅读NLTK书 。 NLTK非常强大,容易进入。

你可以尝试阅读一下短语结构化语法 ,这基本上是语言处理背后的math。 实际上并不重要,主要是基于集合和图论。 作为一门离散math课程的一部分,我曾经在很多个月前研究过它,现在有很多很好的参考资料。

编辑:不像我预期的谷歌,虽然这看起来像一个很好的学习来源。

早期的探索者之一是诺姆·乔姆斯基(Noam Chomsky); 他在五十年代到七十年代就写了关于这个题目的小书。 你可能会发现有吸引力的阅读。

Cycorp对他们的Cyc知识库如何从句子中得出含义有一个简短的描述 。

通过利用大量常见事实的知识库,系统可以确定最合乎逻辑的句子分析。

从构build块开始的一个简单的地方是查看试图执行它的包的文档。 我推荐Python [自然语言工具包(NLTK) 1) ,特别是因为他们写得很好,免费的书 ,里面充满了例子。 它不会让你一路到你想要的(这是一个AI难题),但它会给你一个很好的基础。 NLTK拥有parsing器,分块器,上下文无关语法等等。

真的很难。 我首先得到至less一个语言学硕士学位,然后在计算机科学博士学位,专注于NLP。

问题是,我们大多数人不了解什么语言。 没有这个理解,实施一个解决scheme就很难。

其他评论给出了一些读数,如果你想开始玩弄一小部分的问题,这可能是好的,但为了提出一个非常强大的解决scheme,那么没有捷径。 你需要两个学科的学术背景。

一个非常有趣的可读介绍是由史蒂芬·平克的语言本能。 它进入乔姆斯基的东西,也从进化的生物学angular度讲述有趣的故事。 如果您对这个主题感兴趣,那么在进入乔姆斯基的论文和相关工作之前,可能需要从这样的事情开始。