我怎样才能学习*实用*自然语言处理?

时间:2013-10-05 20:00:06

标签: java frameworks nlp

我有一些Java,Pascal,PERL,SQL和& R并且希望从该背景中找到合理最小的阻力路径,从文本中自动或半自动地提取概念,并将结果转换为可统计分析的(如果需要,愿意学习新语言)。我想我需要在几千页的文本上执行一些NLP任务,特别是POS处理,名词短语的识别,词义消歧。我认为,后者可能需要半监督机器学习才能获得准确性。我的问题是从哪里开始学习实用 NLP?参加一门课程或阅读NLP书籍似乎涉及到更多关于如何进行NLP任务的详细信息 - 我只需要知道它的作用,准确程度以及有哪些替代方案。跳进一些现有的NLP框架似乎让我陷入困境。我已经使用GATE进行POS处理,但是输出是XML,我不知道如何进一步处理,或者在postgresql中,这是一个操纵w / SQL生成统计数据的熊。此外,当时GATE没有提取词义的好方法。

3 个答案:

答案 0 :(得分:2)

OpenNLP将使您能够利用现有的Java知识。但毫无疑问,@ neeagl建议NLTK是一个杰出的人。此外,Python可能是最好的语言。

答案 1 :(得分:1)

NLTK是您的最佳选择。 :)

另外,如果您对实施LDA,LSA等算法感兴趣,我建议您使用gensims

答案 2 :(得分:0)

我现在已经拥有NLTK,NLTK书和斯坦福CoreNLP软件的一些经验,所以我想我可以添加一些有用的实际兴趣应该如何处理NLP。

我最初的目标是完成一些NLP任务,并且不需要了解NLP如何完成它所做的事情(至少在特殊兴趣领域之外)。有了这个目标,我可能应该简单地开始使用Stanford CoreNLP软件。它或多或少地完成了最先进的工作,学习如何将文本放入软件并获得输出非常简单。 NLTK在输出质量方面不及CoreNLP,除了统计搭配分析以外的所有内容(据我所知),CoreNLP拥有更广泛的实用算法。

例如,在NLTK到块名词短语中,您需要编写正则表达式或训练机器学习例程。对于解析,您可以学习多种解析方法,并且可以应用多种语法。我不清楚哪些是最好的,或者可用的是最先进的。在CoreNLP中,您请求解析并获得看起来非常称职的解析。解析识别名词短语,因此解决了IDing名词短语的问题。

毫无疑问,我需要最终了解更多关于我是否按照自己的意愿做事,以及是否应该培训特定数据。但我手边有一个实际问题,需要看看NLP是否可以开始解决这个问题。我可以稍后回圈并填补空白。因此,目前,CoreNLP使用简单地满足了我的需求。

CoreNLP将结果输出到XML或注释对象,因此我需要学习如何在Java中处理这些问题。而且,我需要学习如何进行一些额外的处理并添加结果。

对于有兴趣学习NLP的一些细节的人来说,NLTK书是一本非常好的动手书。而且,看看NLTK如何表示和操纵语言数据是很有用的,尽管最终Java的处理方式不同,这是我现在关注的地方。对于大而复杂的任务,Java也许更有用 - 语言更加结构化,比Python快一个数量级。最后,CoreNLP有一个管道 - 你输入文本,指出你想要的注释类型,然后是最终产品。在NLTK中,如何将多个不同的注释(比如POS,引理,解析)叠加在一起,不太清楚。