我在 Java、Pascal、PERL、SQL 和 R 方面有一定的背景,并且希望从该背景中找到一条阻力最小的路径,以便从文本中自动或半自动地提取概念并将结果转化为可统计分析的结果(愿意必要时学习新语言)。我想我需要对几千页的文本执行一些 NLP 任务,特别是 POS 处理、名词短语识别、词义消歧。我相信,后者可能需要半监督机器学习来提高准确性。我的问题是从哪里开始学习实用自然语言处理?学习 NLP 课程或阅读 NLP 书籍似乎比我现在需要更详细地了解 NLP 任务的执行方式——我只需要知道它的作用、它的准确性以及有哪些替代方案。跳入一些现有的 NLP 框架似乎让我陷入困境。我已经使用 GATE 进行 POS 处理,但输出要么是 XML,我不知道如何进一步处理,要么是 postgresql,它是一个使用 SQL 操作以生成统计数据的熊。另外,当时 GATE 也没有很好的词义提取方法。
3 回答
我现在已经对 NLTK、NLTK 书和斯坦福 CoreNLP 软件有了一些经验,所以我想我可以添加一些有用的东西来说明有实际兴趣的人应该如何处理 NLP。
我最初的目标是完成一些 NLP 任务并做得很好,而无需了解 NLP 是如何做的(至少在特殊兴趣领域之外)。有了这个目标,我可能应该从斯坦福 CoreNLP 软件开始。它或多或少地完成了最先进的工作,学习如何将文本放入软件并获得输出非常简单。就输出质量而言,NLTK 不如 CoreNLP,而且除了统计搭配分析(据我所知)之外,CoreNLP 具有更广泛的实用算法。
例如,在 NLTK 中对名词短语进行分块时,您需要编写正则表达式或训练机器学习例程。对于解析,您可以学习多种解析方法,并且可以应用多种语法。我不清楚哪些是最好的,或者可用的是否是最先进的。在 CoreNLP 中,您请求解析,然后您会得到看起来非常有能力的解析。解析识别名词短语,解决了我识别名词短语的问题。
毫无疑问,我最终需要更多地了解我是否以最佳方式做事,以及我是否应该针对特定数据进行训练。但我手头有一个实际问题,需要看看 NLP 是否可以开始解决这个问题。我可以稍后再回过头来填补空白。所以,就目前而言,CoreNLP 的使用简单地满足了我的需求。
CoreNLP 会将结果输出到 XML 或注释对象,所以我需要学习如何在 Java 中处理这些。而且,我需要学习如何进行一些额外的处理并添加结果。
对于有兴趣学习 NLP 的一些细节的人来说,NLTK 书将是一本极好的实践书。而且,了解 NLTK 如何表示和操作语言数据很有用,尽管最终在 Java 中处理的方式有所不同,这是我现在关注的地方。Java 对于大型、复杂的任务也可能更有用——该语言比 Python 更结构化且速度快一个数量级。最后,CoreNLP 有一个管道——你输入文本,指出你想要什么样的注释,然后输出一个最终产品。在 NLTK 中,如何将许多不同的注释(比如 POS、引理、解析)堆叠在一起还不太清楚。
NLTK 是您的最佳选择。:)
此外,如果您对实现 LDA、LSA 等算法感兴趣,我建议您使用gensims