输入和能力受到极大限制的NLP

输入和能力受到极大限制的NLP,nlp,Nlp,我没有时间阅读或消化关于NLP理论概念的冗长复杂的讨论,也没有时间去读博士学位。也就是说,我读了一些,这是一个非常有趣的领域。问题是我需要现实世界的解决方案,对于现实世界的产品,在现实世界的时间框架内 我现在面临的问题是,我不确定要开始实施,应该问哪些问题。我认为这主要与词汇有关。我会在某个地方读到,一篇博客帖子,一篇论坛帖子,一篇白皮书,上面写着,我正在用blargy-blarg方法进行flooping,然后我去谷歌flooping和blargy-blarg,我得到了更多关于晦涩的参考。它似乎

我没有时间阅读或消化关于NLP理论概念的冗长复杂的讨论,也没有时间去读博士学位。也就是说,我读了一些,这是一个非常有趣的领域。问题是我需要现实世界的解决方案,对于现实世界的产品,在现实世界的时间框架内

我现在面临的问题是,我不确定要开始实施,应该问哪些问题。我认为这主要与词汇有关。我会在某个地方读到,一篇博客帖子,一篇论坛帖子,一篇白皮书,上面写着,我正在用blargy-blarg方法进行flooping,然后我去谷歌flooping和blargy-blarg,我得到了更多关于晦涩的参考。它似乎永远不会结束

所以,我的问题是多阶段的

首先,更一般地说,我是如何很快地接受这方面的教育的?及时教育。我只需要知道下一步需要知道什么。我花了20年的时间写代码。快解释。我去拿。我的意思是提供一个参考,当然可以很快解释

我很高兴读对了这本书,但我不想读一本书,在这本书中,我读了一章引言,解释了什么是floopy floop,然后用floopy flooping的例子跳过了这一章的其余部分,因为现在我明白了它是什么。我也不想读一本涉及太多理论基础或历史细节的书。例如,Jurafsky的书似乎比我需要的多得多。但如果这本书读对了,我会读的。这也太贵了

如果你愿意的话,我需要加速学习树的根节点。给我指出正确的方向,我会非常感激的。我期待着大量的消防水带饮用-我只需要合适的消防水带

第二,我需要做的是用一个简单的句子,减少词汇量,然后得到一个语法树,如果这是一个错误的术语,我可以用它做一些事情

我知道我可以很容易地用c语言以一种更传统的方式编写这种命令行输入风格,但我需要它做得更好。但我也不需要喋喋不休的人


我所做的需要生活在一个受限制的环境中。不幸的是,我不能使用Python。我不能携带千兆字节的微粒。我需要使用c/c++的任何库。如果非要我自己写,我会的。希望,考虑到问题集的减少,这将是可以实现的。也许,也许,那太天真了。如果是,请告诉我-

解析是一个相当困难的问题。从零开始学习编写一个好的解析器需要硕士学位

如果你想建立一个标记器或分类器,有一些相对简单的算法,你可以在不完全掌握所有数学知识的情况下学习。解析树是另一回事

想了解一些情况,请看一看。这里有一个相对先进的解析器系统,以及到数据资源的相关链接。例如,如果您想为一种没有Penn树库的语言构建解析器,您需要解决一个相当大的数据问题

如果你告诉我们你想解决什么样的现实问题,也可能会有所帮助。有很多非常有用的NLP的事情可以不用解析器来完成

编辑

我一直在努力制定一个有用的对策来应对你的,嗯,存在的情况

你想从人们输入的自由格式输入中提取信息,a-LaZork

你听说有一个领域,NLP,人们在“自然语言处理”方面取得了一些成功。你希望能够找到一个有能力的专业程序可以使用的实现或算法,而不存在巨大的自我教育问题

这是对这个问题有偏见的历史解释。从前,有一个领域叫人工智能。作为人工智能的一部分,聪明人开始尝试解决理解自然语言的问题

最重要的早期发现是这是一个非常非常困难的问题。接下来发生的事情很自然。人们开始把大的、不可能的问题分成小的、不太可能的问题。随后出现了几级分裂

现在,许多年过去了,这些小问题中的一些已经很好地理解了解决方案。其中一些甚至有开放源码实现,对任何人来说都相对容易部署。有关示例,请参见Weka或apachemahout。不幸的是,这些子问题不是您要寻找的

最初的、真正大的“人工智能”问题远未解决,而你想要解决的问题在食物链的最上层

据我所知,解决您自己设置的问题的最佳方法不涉及解析树。最成功的系统已经使用了相对简单的模板模式来识别他们感兴趣的东西。想想“正则表达式”。伤心地想,“哈 谷歌“伊丽莎”的一个主要原因是,被邀请在一个系统上打字的人,不会输入完整的语法句子。他们漏掉了一些东西,打错了其他的东西,通常会让事情变得尽可能困难


我很抱歉这么沮丧,我很高兴读到其他人的答案,给你一个不那么悲观的解读。另一方面,我也鼓励你在网上找到一份题为“人工智能与自然愚蠢的结合”的论文。

Jurafsky&Martin的书是一本值得阅读的书,至少是一本。它有一个很好的索引和参考书目,并解释了你需要知道的大部分概念。也可能会有一个更便宜的软封面版本。

您想要做的通常被称为自然语言理解,解决方案可以从简单的模式匹配到包括基于统计的解析的方法

我想在对话界面中确定您希望给用户多大的灵活性是很重要的。如果你想允许一种开放的、不受限制的自然语言,那么你肯定需要从Jurafsky和Martin开始。特别是我会阅读有关语法分析、语义和对话系统的章节

如果您的接口的语法和词汇受到相当大的限制,我建议您将此问题更像计算机语言解析。为了做到这一点,我将阅读Lex和Yacc或GNU变体Flex和Bison,以了解如何将输入词汇化,然后将其放入某种层次结构中。不管怎样,我建议你阅读Earley和CYK解析器上的维基百科条目,我会链接到它们,但垃圾邮件预防不允许我发布多个链接。它应该对自然语言解析的基础知识有所帮助

无论采用哪种方法,都有可能需要编写自己的语法。 一个更简单的语义语法可能如下所示:

Sentence := CommandSentence
CommandSentence := Command DT Object PP DT Location
CommandSentence := Command DT Object PP Receiver
Command := give
Command := place
DT := a
DT := an
DT := the
Object := pencil
Object := sword
PP := on
PP := in
Location := cave
Location := table
Receiver := Bob
Receiver := Sally
(Sentence 
    (CommandSentence
        ((Command (place)) 
         (DT (the))
         (Object (sword))
         (PP (in))
         (DT (the))
         (Location (Cave))
        )
     )
  )
对于像将剑放入洞穴这样的命令,解析将有如下简单解析:

Sentence := CommandSentence
CommandSentence := Command DT Object PP DT Location
CommandSentence := Command DT Object PP Receiver
Command := give
Command := place
DT := a
DT := an
DT := the
Object := pencil
Object := sword
PP := on
PP := in
Location := cave
Location := table
Receiver := Bob
Receiver := Sally
(Sentence 
    (CommandSentence
        ((Command (place)) 
         (DT (the))
         (Object (sword))
         (PP (in))
         (DT (the))
         (Location (Cave))
        )
     )
  )
您还可以尝试使用一个现成的解析器(如),看看是否可以从其输出中提取有用的信息


祝你好运

这应该是社区维基。这个问题有点模糊。Mike F,你能澄清一下你想用自然语言处理来完成什么吗?好吧,问题来了。我不知道宾州树银行是什么。或者标记器和分类器之间的区别是什么。此外,我不知道我是否想要一个宾夕法尼亚州的树银行。我看了一下链接,发现了:我们的2006个NIPS文件的Putman Yor适配器语法取样器,现在更新,以估计Ptman Yor超参数,也使用切片取样器,并使用C++ Tr1哈希表2009年8月。这也可以用梵语写。我所要求的是以一种快速的方式帮助理解所有这些。此外,为了讨论的目的,我试图构建的内容在范围上类似于文本冒险界面,也就是Zork。谢谢你说你想学语法。如果你想要的是理解Zork输入,那么语法就不是最好的选择。不幸的是,对于你应该从哪里开始,我没有很好的建议。我希望其他人能提出更令人鼓舞的建议,但我的建议是放弃理解非正式文本输入的捷径。